#ifndef _WINDOT11_H
#define _WINDOT11_H

#if __POCC__ >= 500
#pragma once
#endif

/* Native 802.11 miniport driver definitions */

#include <ntddndis.h>
#include <wlantypes.h>

#if __POCC__ >= 290
#pragma warn(push)
#pragma warn(disable:2073)
#pragma warn(disable:2185)  /* Alignment of field 'x' can be less than the natural alignment */
#pragma warn(disable:2198)  /* Nameless field is not standard */
#endif

typedef struct _DOT11_MAC_ADDRESS {
    UCHAR ucDot11MacAddress[6];
} DOT11_MAC_ADDRESS, *PDOT11_MAC_ADDRESS;

typedef struct DOT11_BSSID_LIST {
#define DOT11_BSSID_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_MAC_ADDRESS BSSIDs[1];
} DOT11_BSSID_LIST, *PDOT11_BSSID_LIST;

typedef enum _DOT11_PHY_TYPE {
    dot11_phy_type_unknown = 0,
    dot11_phy_type_any = dot11_phy_type_unknown,
    dot11_phy_type_fhss = 1,
    dot11_phy_type_dsss = 2,
    dot11_phy_type_irbaseband = 3,
    dot11_phy_type_ofdm = 4,
    dot11_phy_type_hrdsss = 5,
    dot11_phy_type_erp = 6,
    dot11_phy_type_ht = 7,
    dot11_phy_type_IHV_start = 0x80000000,
    dot11_phy_type_IHV_end = 0xffffffff
} DOT11_PHY_TYPE, *PDOT11_PHY_TYPE;

#define DOT11_RATE_SET_MAX_LENGTH  126
typedef struct _DOT11_RATE_SET {
    ULONG uRateSetLength;
    UCHAR ucRateSet[DOT11_RATE_SET_MAX_LENGTH];
} DOT11_RATE_SET, *PDOT11_RATE_SET;

typedef UCHAR DOT11_COUNTRY_OR_REGION_STRING[3];
typedef DOT11_COUNTRY_OR_REGION_STRING *PDOT11_COUNTRY_OR_REGION_STRING;

#if (NTDDI_VERSION >= NTDDI_WIN8 || NDIS_SUPPORT_NDIS630)
#define NWF_WFD_SUPPORTED
#define NWF_POWER_SAVE_SUPPORTED
#endif /* NTDDI_VERSION >= NTDDI_WIN8 || NDIS_SUPPORT_NDIS630 */

#if (NTDDI_VERSION >= NTDDI_WIN7 || NDIS_SUPPORT_NDIS620)
#define NWF_EXTAP_SUPPORTED
#define NWF_VWIFI_SUPPORTED
#endif /* NTDDI_VERSION >= NTDDI_WIN7 || NDIS_SUPPORT_NDIS620 */

#if (NTDDI_VERSION >= NTDDI_VISTA)

#define NDIS_PACKET_TYPE_MEDIA_SPECIFIC_MASK  (0x0fff0000U)

#define NDIS_PACKET_TYPE_802_11_DIRECTED_DATA    NDIS_PACKET_TYPE_DIRECTED
#define NDIS_PACKET_TYPE_802_11_BROADCAST_DATA   NDIS_PACKET_TYPE_BROADCAST
#define NDIS_PACKET_TYPE_802_11_MULTICAST_DATA   NDIS_PACKET_TYPE_MULTICAST
#define NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_DATA  NDIS_PACKET_TYPE_ALL_MULTICAST
#define NDIS_PACKET_TYPE_802_11_PROMISCUOUS_DATA    NDIS_PACKET_TYPE_PROMISCUOUS

#define NDIS_PACKET_TYPE_802_11_RAW_DATA  (0x00010000U)
#define NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT  (0x00020000U)
#define NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT  (0x00040000U)
#define NDIS_PACKET_TYPE_802_11_MULTICAST_MGMT  (0x00080000U)
#define NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_MGMT  (0x00100000U)
#define NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT  (0x00200000U)
#define NDIS_PACKET_TYPE_802_11_RAW_MGMT  (0x00400000U)
#define NDIS_PACKET_TYPE_802_11_DIRECTED_CTRL  (0x00800000U)
#define NDIS_PACKET_TYPE_802_11_BROADCAST_CTRL  (0x01000000U)
#define NDIS_PACKET_TYPE_802_11_PROMISCUOUS_CTRL  (0x02000000U)

#define NDIS_PACKET_TYPE_ALL_802_11_FILTERS   \
    (NDIS_PACKET_TYPE_DIRECTED |  \
     NDIS_PACKET_TYPE_MULTICAST |    \
     NDIS_PACKET_TYPE_ALL_MULTICAST |   \
     NDIS_PACKET_TYPE_BROADCAST |    \
     NDIS_PACKET_TYPE_PROMISCUOUS |  \
     NDIS_PACKET_TYPE_802_11_RAW_DATA |    \
     NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT |  \
     NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT |    \
     NDIS_PACKET_TYPE_802_11_MULTICAST_MGMT |    \
     NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_MGMT |   \
     NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT |  \
     NDIS_PACKET_TYPE_802_11_RAW_MGMT |    \
     NDIS_PACKET_TYPE_802_11_DIRECTED_CTRL |  \
     NDIS_PACKET_TYPE_802_11_BROADCAST_CTRL |    \
     NDIS_PACKET_TYPE_802_11_PROMISCUOUS_CTRL)

#define DOT11_MAX_PDU_SIZE  2346

#define DOT11_MIN_PDU_SIZE  (256)

#define DOT11_MAX_NUM_DEFAULT_KEY  4

#if (NTDDI_VERSION >= NTDDI_WIN8 || NDIS_SUPPORT_NDIS630)
#define DOT11_MAX_NUM_DEFAULT_KEY_MFP  DOT11_MAX_NUM_DEFAULT_KEY + 2
#endif /* NTDDI_VERSION >= NTDDI_WIN8 || NDIS_SUPPORT_NDIS630 */

#define OID_DOT11_NDIS_START  0x0D010300

#define NWF_MANDATORY_OID  (0x01U)
#define NWF_OPTIONAL_OID  (0x02U)

#define NWF_OPERATIONAL_OID  (0x01U)
#define NWF_STATISTICS_OID  (0x02U)

#define NWF_DEFINE_OID(Seq,o,m)  ((0x0E000000U) | ((o) << 16) | ((m) << 8) | (Seq))

#define OID_DOT11_OFFLOAD_CAPABILITY  (OID_DOT11_NDIS_START + 0)
#define DOT11_HW_WEP_SUPPORTED_TX   0x00000001
#define DOT11_HW_WEP_SUPPORTED_RX   0x00000002
#define DOT11_HW_FRAGMENTATION_SUPPORTED  0x00000004
#define DOT11_HW_DEFRAGMENTATION_SUPPORTED   0x00000008
#define DOT11_HW_MSDU_AUTH_SUPPORTED_TX   0x00000010
#define DOT11_HW_MSDU_AUTH_SUPPORTED_RX   0x00000020
#define DOT11_CONF_ALGO_WEP_RC4  0x00000001
#define DOT11_CONF_ALGO_TKIP  0x00000002
#define DOT11_AUTH_ALGO_MICHAEL  0x00000001

typedef struct _DOT11_OFFLOAD_CAPABILITY {
    ULONG uReserved;
    ULONG uFlags;
    ULONG uSupportedWEPAlgorithms;
    ULONG uNumOfReplayWindows;
    ULONG uMaxWEPKeyMappingLength;
    ULONG uSupportedAuthAlgorithms;
    ULONG uMaxAuthKeyMappingLength;
} DOT11_OFFLOAD_CAPABILITY, *PDOT11_OFFLOAD_CAPABILITY;

#define OID_DOT11_CURRENT_OFFLOAD_CAPABILITY  (OID_DOT11_NDIS_START + 1)
typedef struct _DOT11_CURRENT_OFFLOAD_CAPABILITY {
    ULONG uReserved;
    ULONG uFlags;
} DOT11_CURRENT_OFFLOAD_CAPABILITY, *PDOT11_CURRENT_OFFLOAD_CAPABILITY;

#define OID_DOT11_WEP_OFFLOAD  (OID_DOT11_NDIS_START + 2)
typedef enum _DOT11_OFFLOAD_TYPE {
    dot11_offload_type_wep = 1,
    dot11_offload_type_auth = 2
} DOT11_OFFLOAD_TYPE, *PDOT11_OFFLOAD_TYPE;

typedef struct _DOT11_IV48_COUNTER {
    ULONG uIV32Counter;
    USHORT usIV16Counter;
} DOT11_IV48_COUNTER, *PDOT11_IV48_COUNTER;

typedef struct _DOT11_WEP_OFFLOAD {
    ULONG uReserved;
    HANDLE hOffloadContext;
    HANDLE hOffload;
    DOT11_OFFLOAD_TYPE dot11OffloadType;
    ULONG dwAlgorithm;
    BOOLEAN bRowIsOutbound;
    BOOLEAN bUseDefault;
    ULONG uFlags;
    UCHAR ucMacAddress[6];
    ULONG uNumOfRWsOnPeer;
    ULONG uNumOfRWsOnMe;
    DOT11_IV48_COUNTER dot11IV48Counters[16];
    USHORT usDot11RWBitMaps[16];
    USHORT usKeyLength;
    UCHAR ucKey[1];
} DOT11_WEP_OFFLOAD, *PDOT11_WEP_OFFLOAD;

#define OID_DOT11_WEP_UPLOAD  (OID_DOT11_NDIS_START + 3)
typedef struct _DOT11_WEP_UPLOAD {
    ULONG uReserved;
    DOT11_OFFLOAD_TYPE dot11OffloadType;
    HANDLE hOffload;
    ULONG uNumOfRWsUsed;
    DOT11_IV48_COUNTER dot11IV48Counters[16];
    USHORT usDot11RWBitMaps[16];
} DOT11_WEP_UPLOAD, *PDOT11_WEP_UPLOAD;

#define OID_DOT11_DEFAULT_WEP_OFFLOAD  (OID_DOT11_NDIS_START + 4)
typedef enum _DOT11_KEY_DIRECTION {
    dot11_key_direction_both = 1,
    dot11_key_direction_inbound = 2,
    dot11_key_direction_outbound = 3
} DOT11_KEY_DIRECTION, *PDOT11_KEY_DIRECTION;

typedef struct _DOT11_DEFAULT_WEP_OFFLOAD {
    ULONG uReserved;
    HANDLE hOffloadContext;
    HANDLE hOffload;
    ULONG dwIndex;
    DOT11_OFFLOAD_TYPE dot11OffloadType;
    ULONG dwAlgorithm;
    ULONG uFlags;
    DOT11_KEY_DIRECTION dot11KeyDirection;
    UCHAR ucMacAddress[6];
    ULONG uNumOfRWsOnMe;
    DOT11_IV48_COUNTER dot11IV48Counters[16];
    USHORT usDot11RWBitMaps[16];
    USHORT usKeyLength;
    UCHAR ucKey[1];
} DOT11_DEFAULT_WEP_OFFLOAD, *PDOT11_DEFAULT_WEP_OFFLOAD;

#define OID_DOT11_DEFAULT_WEP_UPLOAD  (OID_DOT11_NDIS_START + 5)
typedef struct _DOT11_DEFAULT_WEP_UPLOAD {
    ULONG uReserved;
    DOT11_OFFLOAD_TYPE dot11OffloadType;
    HANDLE hOffload;
    ULONG uNumOfRWsUsed;
    DOT11_IV48_COUNTER dot11IV48Counters[16];
    USHORT usDot11RWBitMaps[16];
} DOT11_DEFAULT_WEP_UPLOAD, *PDOT11_DEFAULT_WEP_UPLOAD;

#define OID_DOT11_MPDU_MAX_LENGTH  (OID_DOT11_NDIS_START + 6)

#define OID_DOT11_OPERATION_MODE_CAPABILITY  (OID_DOT11_NDIS_START + 7)
#define DOT11_OPERATION_MODE_UNKNOWN   0x00000000
#define DOT11_OPERATION_MODE_STATION   0x00000001
#define DOT11_OPERATION_MODE_AP  0x00000002
#define DOT11_OPERATION_MODE_EXTENSIBLE_STATION 0x00000004
#define DOT11_OPERATION_MODE_NETWORK_MONITOR    0x80000000
typedef struct _DOT11_OPERATION_MODE_CAPABILITY {
    ULONG uReserved;
    ULONG uMajorVersion;
    ULONG uMinorVersion;
    ULONG uNumOfTXBuffers;
    ULONG uNumOfRXBuffers;
    ULONG uOpModeCapability;
} DOT11_OPERATION_MODE_CAPABILITY, *PDOT11_OPERATION_MODE_CAPABILITY;

#define OID_DOT11_CURRENT_OPERATION_MODE  (OID_DOT11_NDIS_START + 8)
typedef struct _DOT11_CURRENT_OPERATION_MODE {
    ULONG uReserved;
    ULONG uCurrentOpMode;
} DOT11_CURRENT_OPERATION_MODE, *PDOT11_CURRENT_OPERATION_MODE;

#define OID_DOT11_CURRENT_PACKET_FILTER  (OID_DOT11_NDIS_START + 9)
#define DOT11_PACKET_TYPE_DIRECTED_CTRL   0x00000001
#define DOT11_PACKET_TYPE_DIRECTED_MGMT   0x00000002
#define DOT11_PACKET_TYPE_DIRECTED_DATA   0x00000004
#define DOT11_PACKET_TYPE_MULTICAST_CTRL  0x00000008
#define DOT11_PACKET_TYPE_MULTICAST_MGMT  0x00000010
#define DOT11_PACKET_TYPE_MULTICAST_DATA  0x00000020
#define DOT11_PACKET_TYPE_BROADCAST_CTRL  0x00000040
#define DOT11_PACKET_TYPE_BROADCAST_MGMT  0x00000080
#define DOT11_PACKET_TYPE_BROADCAST_DATA  0x00000100
#define DOT11_PACKET_TYPE_PROMISCUOUS_CTRL   0x00000200
#define DOT11_PACKET_TYPE_PROMISCUOUS_MGMT   0x00000400
#define DOT11_PACKET_TYPE_PROMISCUOUS_DATA   0x00000800
#define DOT11_PACKET_TYPE_ALL_MULTICAST_CTRL    0x00001000
#define DOT11_PACKET_TYPE_ALL_MULTICAST_MGMT    0x00002000
#define DOT11_PACKET_TYPE_ALL_MULTICAST_DATA    0x00004000
#define DOT11_PACKET_TYPE_RESERVED  (~(    \
    DOT11_PACKET_TYPE_DIRECTED_CTRL |    \
    DOT11_PACKET_TYPE_DIRECTED_MGMT |    \
    DOT11_PACKET_TYPE_DIRECTED_DATA |    \
    DOT11_PACKET_TYPE_MULTICAST_CTRL |   \
    DOT11_PACKET_TYPE_MULTICAST_MGMT |   \
    DOT11_PACKET_TYPE_MULTICAST_DATA |   \
    DOT11_PACKET_TYPE_BROADCAST_CTRL |   \
    DOT11_PACKET_TYPE_BROADCAST_MGMT |   \
    DOT11_PACKET_TYPE_BROADCAST_DATA |   \
    DOT11_PACKET_TYPE_PROMISCUOUS_CTRL |    \
    DOT11_PACKET_TYPE_PROMISCUOUS_MGMT |    \
    DOT11_PACKET_TYPE_PROMISCUOUS_DATA |    \
    DOT11_PACKET_TYPE_ALL_MULTICAST_CTRL |  \
    DOT11_PACKET_TYPE_ALL_MULTICAST_MGMT |  \
    DOT11_PACKET_TYPE_ALL_MULTICAST_DATA |  \
    0   \
    ))

#define OID_DOT11_ATIM_WINDOW  (OID_DOT11_NDIS_START + 10)

#define OID_DOT11_SCAN_REQUEST  (OID_DOT11_NDIS_START + 11)

typedef enum _DOT11_SCAN_TYPE {
    dot11_scan_type_active = 1,
    dot11_scan_type_passive = 2,
    dot11_scan_type_auto = 3,
    dot11_scan_type_forced = 0x80000000
} DOT11_SCAN_TYPE, *PDOT11_SCAN_TYPE;
typedef struct _DOT11_SCAN_REQUEST {
    DOT11_BSS_TYPE dot11BSSType;
    DOT11_MAC_ADDRESS dot11BSSID;
    DOT11_SSID dot11SSID;
    DOT11_SCAN_TYPE dot11ScanType;
    BOOLEAN bRestrictedScan;
    BOOLEAN bUseRequestIE;
    ULONG uRequestIDsOffset;
    ULONG uNumOfRequestIDs;
    ULONG uPhyTypesOffset;
    ULONG uNumOfPhyTypes;
    ULONG uIEsOffset;
    ULONG uIEsLength;
    UCHAR ucBuffer[1];
} DOT11_SCAN_REQUEST, *PDOT11_SCAN_REQUEST;

typedef enum _CH_DESCRIPTION_TYPE {
    ch_description_type_logical = 1,
    ch_description_type_center_frequency = 2,
    ch_description_type_phy_specific
} CH_DESCRIPTION_TYPE, *PCH_DESCRIPTION_TYPE;

typedef struct _DOT11_PHY_TYPE_INFO {
    DOT11_PHY_TYPE dot11PhyType;
    BOOLEAN bUseParameters;
    ULONG uProbeDelay;
    ULONG uMinChannelTime;
    ULONG uMaxChannelTime;
    CH_DESCRIPTION_TYPE ChDescriptionType;
    ULONG uChannelListSize;
    UCHAR ucChannelListBuffer[1];
} DOT11_PHY_TYPE_INFO, *PDOT11_PHY_TYPE_INFO;

typedef struct _DOT11_SCAN_REQUEST_V2 {
    DOT11_BSS_TYPE dot11BSSType;
    DOT11_MAC_ADDRESS dot11BSSID;
    DOT11_SCAN_TYPE dot11ScanType;
    BOOLEAN bRestrictedScan;
    ULONG udot11SSIDsOffset;
    ULONG uNumOfdot11SSIDs;
    BOOLEAN bUseRequestIE;
    ULONG uRequestIDsOffset;
    ULONG uNumOfRequestIDs;
    ULONG uPhyTypeInfosOffset;
    ULONG uNumOfPhyTypeInfos;
    ULONG uIEsOffset;
    ULONG uIEsLength;
    UCHAR ucBuffer[1];
} DOT11_SCAN_REQUEST_V2, *PDOT11_SCAN_REQUEST_V2;

#define OID_DOT11_CURRENT_PHY_TYPE  (OID_DOT11_NDIS_START + 12)
typedef struct DOT11_PHY_TYPE_LIST {
#define DOT11_PHY_TYPE_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_PHY_TYPE dot11PhyType[1];
} DOT11_PHY_TYPE_LIST, *PDOT11_PHY_TYPE_LIST;

#define OID_DOT11_JOIN_REQUEST  (OID_DOT11_NDIS_START + 13)

#define DOT11_CAPABILITY_INFO_ESS   0x0001
#define DOT11_CAPABILITY_INFO_IBSS  0x0002
#define DOT11_CAPABILITY_INFO_CF_POLLABLE    0x0004
#define DOT11_CAPABILITY_INFO_CF_POLL_REQ    0x0008
#define DOT11_CAPABILITY_INFO_PRIVACY  0x0010
#define DOT11_CAPABILITY_SHORT_PREAMBLE   0x0020
#define DOT11_CAPABILITY_PBCC    0x0040
#define DOT11_CAPABILITY_CHANNEL_AGILITY  0x0080
#define DOT11_CAPABILITY_SHORT_SLOT_TIME  0x0400
#define DOT11_CAPABILITY_DSSSOFDM   0x2000

typedef struct _DOT11_BSS_DESCRIPTION {
    ULONG uReserved;
    DOT11_MAC_ADDRESS dot11BSSID;
    DOT11_BSS_TYPE dot11BSSType;
    USHORT usBeaconPeriod;
    ULONGLONG ullTimestamp;
    USHORT usCapabilityInformation;
    ULONG uBufferLength;
    UCHAR ucBuffer[1];
} DOT11_BSS_DESCRIPTION, *PDOT11_BSS_DESCRIPTION;

typedef struct _DOT11_JOIN_REQUEST {
    ULONG uJoinFailureTimeout;
    DOT11_RATE_SET OperationalRateSet;
    ULONG uChCenterFrequency;
    DOT11_BSS_DESCRIPTION dot11BSSDescription;
} DOT11_JOIN_REQUEST, *PDOT11_JOIN_REQUEST;

#define OID_DOT11_START_REQUEST  (OID_DOT11_NDIS_START + 14)
typedef struct _DOT11_START_REQUEST {
    ULONG uStartFailureTimeout;
    DOT11_RATE_SET OperationalRateSet;
    ULONG uChCenterFrequency;
    DOT11_BSS_DESCRIPTION dot11BSSDescription;
} DOT11_START_REQUEST, *PDOT11_START_REQUEST;

#define OID_DOT11_UPDATE_IE  (OID_DOT11_NDIS_START + 15)
typedef enum _DOT11_UPDATE_IE_OP {
    dot11_update_ie_op_create_replace = 1,
    dot11_update_ie_op_delete = 2,
} DOT11_UPDATE_IE_OP, *PDOT11_UPDATE_IE_OP;

typedef struct _DOT11_UPDATE_IE {
    DOT11_UPDATE_IE_OP dot11UpdateIEOp;
    ULONG uBufferLength;
    UCHAR ucBuffer[1];
} DOT11_UPDATE_IE, *PDOT11_UPDATE_IE;

#define OID_DOT11_RESET_REQUEST  (OID_DOT11_NDIS_START + 16)
typedef enum _DOT11_RESET_TYPE {
    dot11_reset_type_phy = 1,
    dot11_reset_type_mac = 2,
    dot11_reset_type_phy_and_mac = 3
} DOT11_RESET_TYPE, *PDOT11_RESET_TYPE;

typedef struct _DOT11_RESET_REQUEST {
    DOT11_RESET_TYPE dot11ResetType;
    DOT11_MAC_ADDRESS dot11MacAddress;
    BOOLEAN bSetDefaultMIB;
} DOT11_RESET_REQUEST, *PDOT11_RESET_REQUEST;

#define OID_DOT11_NIC_POWER_STATE  (OID_DOT11_NDIS_START + 17)

#define OID_DOT11_OPTIONAL_CAPABILITY  (OID_DOT11_NDIS_START + 18)
typedef struct _DOT11_OPTIONAL_CAPABILITY {
    ULONG uReserved;
    BOOLEAN bDot11PCF;
    BOOLEAN bDot11PCFMPDUTransferToPC;
    BOOLEAN bStrictlyOrderedServiceClass;
} DOT11_OPTIONAL_CAPABILITY, *PDOT11_OPTIONAL_CAPABILITY;

#define OID_DOT11_CURRENT_OPTIONAL_CAPABILITY  (OID_DOT11_NDIS_START + 19)
typedef struct _DOT11_CURRENT_OPTIONAL_CAPABILITY {
    ULONG uReserved;
    BOOLEAN bDot11CFPollable;
    BOOLEAN bDot11PCF;
    BOOLEAN bDot11PCFMPDUTransferToPC;
    BOOLEAN bStrictlyOrderedServiceClass;
} DOT11_CURRENT_OPTIONAL_CAPABILITY, *PDOT11_CURRENT_OPTIONAL_CAPABILITY;

#define OID_DOT11_STATION_ID  (OID_DOT11_NDIS_START + 20)

#define OID_DOT11_MEDIUM_OCCUPANCY_LIMIT  (OID_DOT11_NDIS_START + 21)

#define OID_DOT11_CF_POLLABLE  (OID_DOT11_NDIS_START + 22)

#define OID_DOT11_CFP_PERIOD  (OID_DOT11_NDIS_START + 23)

#define OID_DOT11_CFP_MAX_DURATION  (OID_DOT11_NDIS_START + 24)

#define OID_DOT11_POWER_MGMT_MODE  (OID_DOT11_NDIS_START + 25)

typedef enum _DOT11_POWER_MODE {
    dot11_power_mode_unknown = 0,
    dot11_power_mode_active = 1,
    dot11_power_mode_powersave = 2
} DOT11_POWER_MODE, *PDOT11_POWER_MODE;
#define DOT11_POWER_SAVE_LEVEL_MAX_PSP   1
#define DOT11_POWER_SAVE_LEVEL_FAST_PSP  2
typedef struct _DOT11_POWER_MGMT_MODE {
    DOT11_POWER_MODE dot11PowerMode;
    ULONG uPowerSaveLevel;
    USHORT usListenInterval;
    USHORT usAID;
    BOOLEAN bReceiveDTIMs;
} DOT11_POWER_MGMT_MODE, *PDOT11_POWER_MGMT_MODE;

#define OID_DOT11_OPERATIONAL_RATE_SET  (OID_DOT11_NDIS_START + 26)

#define OID_DOT11_BEACON_PERIOD  (OID_DOT11_NDIS_START + 27)

#define OID_DOT11_DTIM_PERIOD  (OID_DOT11_NDIS_START + 28)

#define OID_DOT11_WEP_ICV_ERROR_COUNT  (OID_DOT11_NDIS_START + 29)

#define OID_DOT11_MAC_ADDRESS  (OID_DOT11_NDIS_START + 30)

#define OID_DOT11_RTS_THRESHOLD  (OID_DOT11_NDIS_START + 31)

#define OID_DOT11_SHORT_RETRY_LIMIT  (OID_DOT11_NDIS_START + 32)

#define OID_DOT11_LONG_RETRY_LIMIT  (OID_DOT11_NDIS_START + 33)

#define OID_DOT11_FRAGMENTATION_THRESHOLD  (OID_DOT11_NDIS_START + 34)

#define OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME  (OID_DOT11_NDIS_START + 35)

#define OID_DOT11_MAX_RECEIVE_LIFETIME  (OID_DOT11_NDIS_START + 36)

#define OID_DOT11_COUNTERS_ENTRY  (OID_DOT11_NDIS_START + 37)
typedef struct _DOT11_COUNTERS_ENTRY {
    ULONG uTransmittedFragmentCount;
    ULONG uMulticastTransmittedFrameCount;
    ULONG uFailedCount;
    ULONG uRetryCount;
    ULONG uMultipleRetryCount;
    ULONG uFrameDuplicateCount;
    ULONG uRTSSuccessCount;
    ULONG uRTSFailureCount;
    ULONG uACKFailureCount;
    ULONG uReceivedFragmentCount;
    ULONG uMulticastReceivedFrameCount;
    ULONG uFCSErrorCount;
    ULONG uTransmittedFrameCount;
} DOT11_COUNTERS_ENTRY, *PDOT11_COUNTERS_ENTRY;

#define OID_DOT11_SUPPORTED_PHY_TYPES  (OID_DOT11_NDIS_START + 38)
typedef struct _DOT11_SUPPORTED_PHY_TYPES {
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_PHY_TYPE dot11PHYType[1];
} DOT11_SUPPORTED_PHY_TYPES, *PDOT11_SUPPORTED_PHY_TYPES;

#define OID_DOT11_CURRENT_REG_DOMAIN  (OID_DOT11_NDIS_START + 39)
#define DOT11_REG_DOMAIN_OTHER   0x00000000
#define DOT11_REG_DOMAIN_FCC  0x00000010
#define DOT11_REG_DOMAIN_DOC  0x00000020
#define DOT11_REG_DOMAIN_ETSI    0x00000030
#define DOT11_REG_DOMAIN_SPAIN   0x00000031
#define DOT11_REG_DOMAIN_FRANCE  0x00000032
#define DOT11_REG_DOMAIN_MKK  0x00000040

#define OID_DOT11_TEMP_TYPE  (OID_DOT11_NDIS_START + 40)
typedef enum _DOT11_TEMP_TYPE {
    dot11_temp_type_unknown = 0,
    dot11_temp_type_1 = 1,
    dot11_temp_type_2 = 2
} DOT11_TEMP_TYPE, *PDOT11_TEMP_TYPE;

#define OID_DOT11_CURRENT_TX_ANTENNA  (OID_DOT11_NDIS_START + 41)

#define OID_DOT11_DIVERSITY_SUPPORT  (OID_DOT11_NDIS_START + 42)
typedef enum _DOT11_DIVERSITY_SUPPORT {
    dot11_diversity_support_unknown = 0,
    dot11_diversity_support_fixedlist = 1,
    dot11_diversity_support_notsupported = 2,
    dot11_diversity_support_dynamic = 3
} DOT11_DIVERSITY_SUPPORT, *PDOT11_DIVERSITY_SUPPORT;

#define OID_DOT11_CURRENT_RX_ANTENNA  (OID_DOT11_NDIS_START + 43)

#define OID_DOT11_SUPPORTED_POWER_LEVELS  (OID_DOT11_NDIS_START + 44)
typedef struct _DOT11_SUPPORTED_POWER_LEVELS {
    ULONG uNumOfSupportedPowerLevels;
    ULONG uTxPowerLevelValues[8];
} DOT11_SUPPORTED_POWER_LEVELS, *PDOT11_SUPPORTED_POWER_LEVELS;

#define OID_DOT11_CURRENT_TX_POWER_LEVEL  (OID_DOT11_NDIS_START + 45)

#define OID_DOT11_HOP_TIME  (OID_DOT11_NDIS_START + 46)

#define OID_DOT11_CURRENT_CHANNEL_NUMBER  (OID_DOT11_NDIS_START + 47)

#define OID_DOT11_MAX_DWELL_TIME  (OID_DOT11_NDIS_START + 48)

#define OID_DOT11_CURRENT_DWELL_TIME  (OID_DOT11_NDIS_START + 49)

#define OID_DOT11_CURRENT_SET  (OID_DOT11_NDIS_START + 50)

#define OID_DOT11_CURRENT_PATTERN  (OID_DOT11_NDIS_START + 51)

#define OID_DOT11_CURRENT_INDEX  (OID_DOT11_NDIS_START + 52)

#define OID_DOT11_CURRENT_CHANNEL  (OID_DOT11_NDIS_START + 53)

#define OID_DOT11_CCA_MODE_SUPPORTED  (OID_DOT11_NDIS_START + 54)
#define DOT11_CCA_MODE_ED_ONLY   0x00000001
#define DOT11_CCA_MODE_CS_ONLY   0x00000002
#define DOT11_CCA_MODE_ED_and_CS    0x00000004
#define DOT11_CCA_MODE_CS_WITH_TIMER   0x00000008
#define DOT11_CCA_MODE_HRCS_AND_ED  0x00000010

#define OID_DOT11_CURRENT_CCA_MODE  (OID_DOT11_NDIS_START + 55)

#define OID_DOT11_ED_THRESHOLD  (OID_DOT11_NDIS_START + 56)

#define OID_DOT11_CCA_WATCHDOG_TIMER_MAX  (OID_DOT11_NDIS_START + 57)

#define OID_DOT11_CCA_WATCHDOG_COUNT_MAX  (OID_DOT11_NDIS_START + 58)

#define OID_DOT11_CCA_WATCHDOG_TIMER_MIN  (OID_DOT11_NDIS_START + 59)

#define OID_DOT11_CCA_WATCHDOG_COUNT_MIN  (OID_DOT11_NDIS_START + 60)

#define OID_DOT11_REG_DOMAINS_SUPPORT_VALUE  (OID_DOT11_NDIS_START + 61)
typedef struct _DOT11_REG_DOMAIN_VALUE {
    ULONG uRegDomainsSupportIndex;
    ULONG uRegDomainsSupportValue;
} DOT11_REG_DOMAIN_VALUE, *PDOT11_REG_DOMAIN_VALUE;
typedef struct _DOT11_REG_DOMAINS_SUPPORT_VALUE {
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_REG_DOMAIN_VALUE dot11RegDomainValue[1];
} DOT11_REG_DOMAINS_SUPPORT_VALUE, *PDOT11_REG_DOMAINS_SUPPORT_VALUE;

#define OID_DOT11_SUPPORTED_TX_ANTENNA  (OID_DOT11_NDIS_START + 62)
typedef struct _DOT11_SUPPORTED_ANTENNA {
    ULONG uAntennaListIndex;
    BOOLEAN bSupportedAntenna;
} DOT11_SUPPORTED_ANTENNA, *PDOT11_SUPPORTED_ANTENNA;
typedef struct _DOT11_SUPPORTED_ANTENNA_LIST {
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_SUPPORTED_ANTENNA dot11SupportedAntenna[1];
} DOT11_SUPPORTED_ANTENNA_LIST, *PDOT11_SUPPORTED_ANTENNA_LIST;

#define OID_DOT11_SUPPORTED_RX_ANTENNA  (OID_DOT11_NDIS_START + 63)

#define OID_DOT11_DIVERSITY_SELECTION_RX  (OID_DOT11_NDIS_START + 64)
typedef struct _DOT11_DIVERSITY_SELECTION_RX {
    ULONG uAntennaListIndex;
    BOOLEAN bDiversitySelectionRX;
} DOT11_DIVERSITY_SELECTION_RX, *PDOT11_DIVERSITY_SELECTION_RX;
typedef struct _DOT11_DIVERSITY_SELECTION_RX_LIST {
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_DIVERSITY_SELECTION_RX dot11DiversitySelectionRx[1];
} DOT11_DIVERSITY_SELECTION_RX_LIST, *PDOT11_DIVERSITY_SELECTION_RX_LIST;

#define OID_DOT11_SUPPORTED_DATA_RATES_VALUE  (OID_DOT11_NDIS_START + 65)
#define MAX_NUM_SUPPORTED_RATES  8
#define MAX_NUM_SUPPORTED_RATES_V2  255
typedef struct _DOT11_SUPPORTED_DATA_RATES_VALUE {
    UCHAR ucSupportedTxDataRatesValue[MAX_NUM_SUPPORTED_RATES];
    UCHAR ucSupportedRxDataRatesValue[MAX_NUM_SUPPORTED_RATES];
} DOT11_SUPPORTED_DATA_RATES_VALUE, *PDOT11_SUPPORTED_DATA_RATES_VALUE;

typedef struct _DOT11_SUPPORTED_DATA_RATES_VALUE_V2 {
    UCHAR ucSupportedTxDataRatesValue[MAX_NUM_SUPPORTED_RATES_V2];
    UCHAR ucSupportedRxDataRatesValue[MAX_NUM_SUPPORTED_RATES_V2];
} DOT11_SUPPORTED_DATA_RATES_VALUE_V2, *PDOT11_SUPPORTED_DATA_RATES_VALUE_V2;

typedef DOT11_SUPPORTED_DATA_RATES_VALUE_V2 DOT11_SUPPORTED_DATA_RATES_VALUE_V1, *PDOT11_SUPPORTED_DATA_RATES_VALUE_V1;

#define OID_DOT11_CURRENT_FREQUENCY  (OID_DOT11_NDIS_START + 66)

#define OID_DOT11_TI_THRESHOLD  (OID_DOT11_NDIS_START + 67)

#define OID_DOT11_FREQUENCY_BANDS_SUPPORTED  (OID_DOT11_NDIS_START + 68)
#define DOT11_FREQUENCY_BANDS_LOWER    0x00000001
#define DOT11_FREQUENCY_BANDS_MIDDLE   0x00000002
#define DOT11_FREQUENCY_BANDS_UPPER    0x00000004

#define OID_DOT11_SHORT_PREAMBLE_OPTION_IMPLEMENTED (OID_DOT11_NDIS_START + 69)

#define OID_DOT11_PBCC_OPTION_IMPLEMENTED  (OID_DOT11_NDIS_START + 70)

#define OID_DOT11_CHANNEL_AGILITY_PRESENT  (OID_DOT11_NDIS_START + 71)

#define OID_DOT11_CHANNEL_AGILITY_ENABLED  (OID_DOT11_NDIS_START + 72)

#define OID_DOT11_HR_CCA_MODE_SUPPORTED  (OID_DOT11_NDIS_START + 73)
#define DOT11_HR_CCA_MODE_ED_ONLY  0x00000001
#define DOT11_HR_CCA_MODE_CS_ONLY  0x00000002
#define DOT11_HR_CCA_MODE_CS_AND_ED   0x00000004
#define DOT11_HR_CCA_MODE_CS_WITH_TIMER  0x00000008
#define DOT11_HR_CCA_MODE_HRCS_AND_ED    0x00000010

#define OID_DOT11_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED  (OID_DOT11_NDIS_START + 74)

#define OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED  (OID_DOT11_NDIS_START + 75)

#define OID_DOT11_COUNTRY_STRING  (OID_DOT11_NDIS_START + 76)

typedef struct _DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY {
    ULONG uMultiDomainCapabilityIndex;
    ULONG uFirstChannelNumber;
    ULONG uNumberOfChannels;
    LONG lMaximumTransmitPowerLevel;
} DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY, *PDOT11_MULTI_DOMAIN_CAPABILITY_ENTRY;

typedef struct _DOT11_MD_CAPABILITY_ENTRY_LIST {
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY dot11MDCapabilityEntry[1];
} DOT11_MD_CAPABILITY_ENTRY_LIST, *PDOT11_MD_CAPABILITY_ENTRY_LIST;

#define OID_DOT11_MULTI_DOMAIN_CAPABILITY  (OID_DOT11_NDIS_START + 77)

#define OID_DOT11_EHCC_PRIME_RADIX  (OID_DOT11_NDIS_START + 78)

#define OID_DOT11_EHCC_NUMBER_OF_CHANNELS_FAMILY_INDEX  (OID_DOT11_NDIS_START + 79)

#define OID_DOT11_EHCC_CAPABILITY_IMPLEMENTED  (OID_DOT11_NDIS_START + 80)

#define OID_DOT11_EHCC_CAPABILITY_ENABLED  (OID_DOT11_NDIS_START + 81)

#define OID_DOT11_HOP_ALGORITHM_ADOPTED  (OID_DOT11_NDIS_START + 82)
typedef enum _DOT11_HOP_ALGO_ADOPTED {
    dot11_hop_algo_current = 0,
    dot11_hop_algo_hop_index = 1,
    dot11_hop_algo_hcc = 2
} DOT11_HOP_ALGO_ADOPTED, *PDOT11_HOP_ALGO_ADOPTED;

#define OID_DOT11_RANDOM_TABLE_FLAG  (OID_DOT11_NDIS_START + 83)

#define OID_DOT11_NUMBER_OF_HOPPING_SETS  (OID_DOT11_NDIS_START + 84)

#define OID_DOT11_HOP_MODULUS  (OID_DOT11_NDIS_START + 85)

#define OID_DOT11_HOP_OFFSET  (OID_DOT11_NDIS_START + 86)

#define OID_DOT11_HOPPING_PATTERN  (OID_DOT11_NDIS_START + 87)
typedef struct _DOT11_HOPPING_PATTERN_ENTRY {
    ULONG uHoppingPatternIndex;
    ULONG uRandomTableFieldNumber;
} DOT11_HOPPING_PATTERN_ENTRY, *PDOT11_HOPPING_PATTERN_ENTRY;
typedef struct _DOT11_HOPPING_PATTERN_ENTRY_LIST {
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_HOPPING_PATTERN_ENTRY dot11HoppingPatternEntry[1];
} DOT11_HOPPING_PATTERN_ENTRY_LIST, *PDOT11_HOPPING_PATTERN_ENTRY_LIST;

#define OID_DOT11_RANDOM_TABLE_FIELD_NUMBER  (OID_DOT11_NDIS_START + 88)

#define OID_DOT11_WPA_TSC  (OID_DOT11_NDIS_START + 89)
typedef struct _DOT11_WPA_TSC {
    ULONG uReserved;
    DOT11_OFFLOAD_TYPE dot11OffloadType;
    HANDLE hOffload;
    DOT11_IV48_COUNTER dot11IV48Counter;
} DOT11_WPA_TSC, *PDOT11_WPA_TSC;

#define OID_DOT11_RSSI_RANGE  (OID_DOT11_NDIS_START + 90)
typedef struct _DOT11_RSSI_RANGE {
    DOT11_PHY_TYPE dot11PhyType;
    ULONG uRSSIMin;
    ULONG uRSSIMax;
} DOT11_RSSI_RANGE, *PDOT11_RSSI_RANGE;

#define OID_DOT11_RF_USAGE  (OID_DOT11_NDIS_START + 91)

#define OID_DOT11_NIC_SPECIFIC_EXTENSION  (OID_DOT11_NDIS_START + 92)
typedef struct _DOT11_NIC_SPECIFIC_EXTENSION {
    ULONG uBufferLength;
    ULONG uTotalBufferLength;
    UCHAR ucBuffer[1];
} DOT11_NIC_SPECIFIC_EXTENSION, *PDOT11_NIC_SPECIFIC_EXTENSION;

#define OID_DOT11_AP_JOIN_REQUEST  (OID_DOT11_NDIS_START + 93)
typedef struct _DOT11_AP_JOIN_REQUEST {
    ULONG uJoinFailureTimeout;
    DOT11_RATE_SET OperationalRateSet;
    ULONG uChCenterFrequency;
    DOT11_BSS_DESCRIPTION dot11BSSDescription;
} DOT11_AP_JOIN_REQUEST, *PDOT11_AP_JOIN_REQUEST;

#define OID_DOT11_ERP_PBCC_OPTION_IMPLEMENTED  (OID_DOT11_NDIS_START + 94)

#define OID_DOT11_ERP_PBCC_OPTION_ENABLED  (OID_DOT11_NDIS_START + 95)

#define OID_DOT11_DSSS_OFDM_OPTION_IMPLEMENTED  (OID_DOT11_NDIS_START + 96)

#define OID_DOT11_DSSS_OFDM_OPTION_ENABLED  (OID_DOT11_NDIS_START + 97)

#define OID_DOT11_SHORT_SLOT_TIME_OPTION_IMPLEMENTED  (OID_DOT11_NDIS_START + 98)

#define OID_DOT11_SHORT_SLOT_TIME_OPTION_ENABLED  (OID_DOT11_NDIS_START + 99)

#define OID_DOT11_MAX_MAC_ADDRESS_STATES  (OID_DOT11_NDIS_START + 100)

#define OID_DOT11_RECV_SENSITIVITY_LIST  (OID_DOT11_NDIS_START + 101)

typedef struct _DOT11_RECV_SENSITIVITY {
    UCHAR ucDataRate;
    LONG lRSSIMin;
    LONG lRSSIMax;
} DOT11_RECV_SENSITIVITY, *PDOT11_RECV_SENSITIVITY;

typedef struct _DOT11_RECV_SENSITIVITY_LIST {
    union {
  DOT11_PHY_TYPE dot11PhyType;
  ULONG uPhyId;
    };
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_RECV_SENSITIVITY dot11RecvSensitivity[1];
} DOT11_RECV_SENSITIVITY_LIST, *PDOT11_RECV_SENSITIVITY_LIST;

#define OID_DOT11_WME_IMPLEMENTED  (OID_DOT11_NDIS_START + 102)

#define OID_DOT11_WME_ENABLED  (OID_DOT11_NDIS_START + 103)

#define OID_DOT11_WME_AC_PARAMETERS  (OID_DOT11_NDIS_START + 104)
typedef enum _DOT11_AC_PARAM {
    dot11_AC_param_BE = 0,
    dot11_AC_param_BK = 1,
    dot11_AC_param_VI = 2,
    dot11_AC_param_VO = 3,
    dot11_AC_param_max
} DOT11_AC_PARAM, *PDOT11_AC_PARAM;

typedef struct _DOT11_WME_AC_PARAMETERS {
    UCHAR ucAccessCategoryIndex;
    UCHAR ucAIFSN;
    UCHAR ucECWmin;
    UCHAR ucECWmax;
    USHORT usTXOPLimit;
} DOT11_WME_AC_PARAMETERS, *PDOT11_WME_AC_PARAMETERS;

typedef struct _DOT11_WME_AC_PARAMTERS_LIST {
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_WME_AC_PARAMETERS dot11WMEACParameters[1];
} DOT11_WME_AC_PARAMETERS_LIST, *PDOT11_WME_AC_PARAMETERS_LIST;

#define OID_DOT11_WME_UPDATE_IE  (OID_DOT11_NDIS_START + 105)
typedef struct _DOT11_WME_UPDATE_IE {
    ULONG uParamElemMinBeaconIntervals;
    ULONG uWMEInfoElemOffset;
    ULONG uWMEInfoElemLength;
    ULONG uWMEParamElemOffset;
    ULONG uWMEParamElemLength;
    UCHAR ucBuffer[1];
} DOT11_WME_UPDATE_IE, *PDOT11_WME_UPDATE_IE;

#define OID_DOT11_QOS_TX_QUEUES_SUPPORTED  (OID_DOT11_NDIS_START + 106)

#define OID_DOT11_QOS_TX_DURATION  (OID_DOT11_NDIS_START + 107)
typedef struct _DOT11_QOS_TX_DURATION {
    ULONG uNominalMSDUSize;
    ULONG uMinPHYRate;
    ULONG uDuration;
} DOT11_QOS_TX_DURATION, *PDOT11_QOS_TX_DURATION;

#define OID_DOT11_QOS_TX_MEDIUM_TIME  (OID_DOT11_NDIS_START + 108)
typedef struct _DOT11_QOS_TX_MEDIUM_TIME {
    DOT11_MAC_ADDRESS dot11PeerAddress;
    UCHAR ucQoSPriority;
    ULONG uMediumTimeAdmited;
} DOT11_QOS_TX_MEDIUM_TIME, *PDOT11_QOS_TX_MEDIUM_TIME;

#define OID_DOT11_SUPPORTED_OFDM_FREQUENCY_LIST  (OID_DOT11_NDIS_START + 109)
typedef struct _DOT11_SUPPORTED_OFDM_FREQUENCY {
    ULONG uCenterFrequency;
} DOT11_SUPPORTED_OFDM_FREQUENCY, *PDOT11_SUPPORTED_OFDM_FREQUENCY;

typedef struct _DOT11_SUPPORTED_OFDM_FREQUENCY_LIST {
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_SUPPORTED_OFDM_FREQUENCY dot11SupportedOFDMFrequency[1];
} DOT11_SUPPORTED_OFDM_FREQUENCY_LIST, *PDOT11_SUPPORTED_OFDM_FREQUENCY_LIST;

#define OID_DOT11_SUPPORTED_DSSS_CHANNEL_LIST  (OID_DOT11_NDIS_START + 110)
typedef struct _DOT11_SUPPORTED_DSSS_CHANNEL {
    ULONG uChannel;
} DOT11_SUPPORTED_DSSS_CHANNEL, *PDOT11_SUPPORTED_DSSS_CHANNEL;

typedef struct _DOT11_SUPPORTED_DSSS_CHANNEL_LIST {
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_SUPPORTED_DSSS_CHANNEL dot11SupportedDSSSChannel[1];
} DOT11_SUPPORTED_DSSS_CHANNEL_LIST, *PDOT11_SUPPORTED_DSSS_CHANNEL_LIST;

typedef struct DOT11_BYTE_ARRAY {
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfBytes;
    ULONG uTotalNumOfBytes;
    UCHAR ucBuffer[1];
} DOT11_BYTE_ARRAY, *PDOT11_BYTE_ARRAY;

#define OID_DOT11_AUTO_CONFIG_ENABLED  NWF_DEFINE_OID(120,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
#define DOT11_PHY_AUTO_CONFIG_ENABLED_FLAG  0x00000001U
#define DOT11_MAC_AUTO_CONFIG_ENABLED_FLAG  0x00000002U

#define OID_DOT11_ENUM_BSS_LIST  NWF_DEFINE_OID(121,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
#define DOT11_BSS_ENTRY_BYTE_ARRAY_REVISION_1  1

typedef union DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO {
    ULONG uChCenterFrequency;
    struct {
        ULONG uHopPattern;
        ULONG uHopSet;
        ULONG uDwellTime;
    } FHSS;
} DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO, *PDOT11_BSS_ENTRY_PHY_SPECIFIC_INFO;

typedef struct DOT11_BSS_ENTRY {
    ULONG uPhyId;
    DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO PhySpecificInfo;
    DOT11_MAC_ADDRESS dot11BSSID;
    DOT11_BSS_TYPE dot11BSSType;
    LONG lRSSI;
    ULONG uLinkQuality;
    BOOLEAN bInRegDomain;
    USHORT usBeaconPeriod;
    ULONGLONG ullTimestamp;
    ULONGLONG ullHostTimestamp;
    USHORT usCapabilityInformation;
    ULONG uBufferLength;
    UCHAR ucBuffer[1];
} DOT11_BSS_ENTRY, *PDOT11_BSS_ENTRY;

#define OID_DOT11_FLUSH_BSS_LIST  NWF_DEFINE_OID(122,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_POWER_MGMT_REQUEST    NWF_DEFINE_OID(123,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
#define DOT11_POWER_SAVING_NO_POWER_SAVING  0
#define DOT11_POWER_SAVING_FAST_PSP   8
#define DOT11_POWER_SAVING_MAX_PSP    16
#define DOT11_POWER_SAVING_MAXIMUM_LEVEL    24

#define OID_DOT11_DESIRED_SSID_LIST  NWF_DEFINE_OID(124,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_SSID_LIST {
#define DOT11_SSID_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_SSID SSIDs[1];
} DOT11_SSID_LIST, *PDOT11_SSID_LIST;

#define OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST   NWF_DEFINE_OID(125,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_MAC_ADDRESS_LIST {
#define DOT11_MAC_ADDRESS_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_MAC_ADDRESS MacAddrs[1];
} DOT11_MAC_ADDRESS_LIST, *PDOT11_MAC_ADDRESS_LIST;

#define OID_DOT11_DESIRED_BSSID_LIST    NWF_DEFINE_OID(126,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_DESIRED_BSS_TYPE   NWF_DEFINE_OID(127,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_PMKID_LIST   NWF_DEFINE_OID(128,NWF_OPERATIONAL_OID,NWF_OPTIONAL_OID)
typedef UCHAR DOT11_PMKID_VALUE[16];
typedef struct DOT11_PMKID_ENTRY {
    DOT11_MAC_ADDRESS BSSID;
    DOT11_PMKID_VALUE PMKID;
    ULONG uFlags;
} DOT11_PMKID_ENTRY, *PDOT11_PMKID_ENTRY;
typedef struct DOT11_PMKID_LIST {
#define DOT11_PMKID_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_PMKID_ENTRY PMKIDs[1];
} DOT11_PMKID_LIST, *PDOT11_PMKID_LIST;

#define OID_DOT11_CONNECT_REQUEST    NWF_DEFINE_OID(129,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_EXCLUDE_UNENCRYPTED   NWF_DEFINE_OID(130,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_STATISTICS   NWF_DEFINE_OID(131,NWF_STATISTICS_OID,NWF_MANDATORY_OID)
#define DOT11_STATISTICS_UNKNOWN  (ULONGLONG)(-1LL)
typedef struct DOT11_PHY_FRAME_STATISTICS {
    ULONGLONG ullTransmittedFrameCount;
    ULONGLONG ullMulticastTransmittedFrameCount;
    ULONGLONG ullFailedCount;
    ULONGLONG ullRetryCount;
    ULONGLONG ullMultipleRetryCount;
    ULONGLONG ullMaxTXLifetimeExceededCount;
    ULONGLONG ullTransmittedFragmentCount;
    ULONGLONG ullRTSSuccessCount;
    ULONGLONG ullRTSFailureCount;
    ULONGLONG ullACKFailureCount;
    ULONGLONG ullReceivedFrameCount;
    ULONGLONG ullMulticastReceivedFrameCount;
    ULONGLONG ullPromiscuousReceivedFrameCount;
    ULONGLONG ullMaxRXLifetimeExceededCount;
    ULONGLONG ullFrameDuplicateCount;
    ULONGLONG ullReceivedFragmentCount;
    ULONGLONG ullPromiscuousReceivedFragmentCount;
    ULONGLONG ullFCSErrorCount;
} DOT11_PHY_FRAME_STATISTICS, *PDOT11_PHY_FRAME_STATISTICS;

typedef struct DOT11_MAC_FRAME_STATISTICS {
    ULONGLONG ullTransmittedFrameCount;
    ULONGLONG ullReceivedFrameCount;
    ULONGLONG ullTransmittedFailureFrameCount;
    ULONGLONG ullReceivedFailureFrameCount;
    ULONGLONG ullWEPExcludedCount;
    ULONGLONG ullTKIPLocalMICFailures;
    ULONGLONG ullTKIPReplays;
    ULONGLONG ullTKIPICVErrorCount;
    ULONGLONG ullCCMPReplays;
    ULONGLONG ullCCMPDecryptErrors;
    ULONGLONG ullWEPUndecryptableCount;
    ULONGLONG ullWEPICVErrorCount;
    ULONGLONG ullDecryptSuccessCount;
    ULONGLONG ullDecryptFailureCount;
} DOT11_MAC_FRAME_STATISTICS, *PDOT11_MAC_FRAME_STATISTICS;

typedef struct DOT11_STATISTICS {
#define DOT11_STATISTICS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONGLONG ullFourWayHandshakeFailures;
    ULONGLONG ullTKIPCounterMeasuresInvoked;
    ULONGLONG ullReserved;
    DOT11_MAC_FRAME_STATISTICS MacUcastCounters;
    DOT11_MAC_FRAME_STATISTICS MacMcastCounters;
    DOT11_PHY_FRAME_STATISTICS PhyCounters[1];
} DOT11_STATISTICS, *PDOT11_STATISTICS;

#define OID_DOT11_PRIVACY_EXEMPTION_LIST   NWF_DEFINE_OID(132,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_PRIVACY_EXEMPTION {
    USHORT usEtherType;
#define DOT11_EXEMPT_NO_EXEMPTION    0
#define DOT11_EXEMPT_ALWAYS    1
#define DOT11_EXEMPT_ON_KEY_MAPPING_KEY_UNAVAILABLE 2
    USHORT usExemptionActionType;
#define DOT11_EXEMPT_UNICAST  1
#define DOT11_EXEMPT_MULTICAST  2
#define DOT11_EXEMPT_BOTH  3
    USHORT usExemptionPacketType;
} DOT11_PRIVACY_EXEMPTION, *PDOT11_PRIVACY_EXEMPTION;

typedef struct DOT11_PRIVACY_EXEMPTION_LIST {
#define DOT11_PRIVACY_EXEMPTION_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_PRIVACY_EXEMPTION PrivacyExemptionEntries[1];
} DOT11_PRIVACY_EXEMPTION_LIST, *PDOT11_PRIVACY_EXEMPTION_LIST;

#define OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM  NWF_DEFINE_OID(133,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_AUTH_ALGORITHM_LIST {
#define DOT11_AUTH_ALGORITHM_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_AUTH_ALGORITHM AlgorithmIds[1];
} DOT11_AUTH_ALGORITHM_LIST, *PDOT11_AUTH_ALGORITHM_LIST;

#define OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR  NWF_DEFINE_OID(134,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_AUTH_CIPHER_PAIR_LIST {
#define DOT11_AUTH_CIPHER_PAIR_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_AUTH_CIPHER_PAIR AuthCipherPairs[1];
} DOT11_AUTH_CIPHER_PAIR_LIST, *PDOT11_AUTH_CIPHER_PAIR_LIST;

#define OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM  NWF_DEFINE_OID(135,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_CIPHER_ALGORITHM_LIST {
#define DOT11_CIPHER_ALGORITHM_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_CIPHER_ALGORITHM AlgorithmIds[1];
} DOT11_CIPHER_ALGORITHM_LIST, *PDOT11_CIPHER_ALGORITHM_LIST;

#define OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR    NWF_DEFINE_OID(136,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM    NWF_DEFINE_OID(137,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_CIPHER_DEFAULT_KEY_ID    NWF_DEFINE_OID(138,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_CIPHER_DEFAULT_KEY    NWF_DEFINE_OID(139,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_CIPHER_DEFAULT_KEY_VALUE {
#define DOT11_CIPHER_DEFAULT_KEY_VALUE_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uKeyIndex;
    DOT11_CIPHER_ALGORITHM AlgorithmId;
    DOT11_MAC_ADDRESS MacAddr;
    BOOLEAN bDelete;
    BOOLEAN bStatic;
    USHORT usKeyLength;
    UCHAR ucKey[1];
} DOT11_CIPHER_DEFAULT_KEY_VALUE, *PDOT11_CIPHER_DEFAULT_KEY_VALUE;

typedef struct DOT11_KEY_ALGO_TKIP_MIC {
    UCHAR ucIV48Counter[6];
    ULONG ulTKIPKeyLength;
    ULONG ulMICKeyLength;
    UCHAR ucTKIPMICKeys[1];
} DOT11_KEY_ALGO_TKIP_MIC, *PDOT11_KEY_ALGO_TKIP_MIC;

typedef struct DOT11_KEY_ALGO_CCMP {
    UCHAR ucIV48Counter[6];
    ULONG ulCCMPKeyLength;
    UCHAR ucCCMPKey[1];
} DOT11_KEY_ALGO_CCMP, *PDOT11_KEY_ALGO_CCMP;

#define OID_DOT11_CIPHER_KEY_MAPPING_KEY   NWF_DEFINE_OID(140,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef enum DOT11_DIRECTION {
    DOT11_DIR_INBOUND = 1,
    DOT11_DIR_OUTBOUND,
    DOT11_DIR_BOTH
} DOT11_DIRECTION, *PDOT11_DIRECTION;

#define DOT11_CIPHER_KEY_MAPPING_KEY_VALUE_BYTE_ARRAY_REVISION_1  1
typedef struct DOT11_CIPHER_KEY_MAPPING_KEY_VALUE {
    DOT11_MAC_ADDRESS PeerMacAddr;
    DOT11_CIPHER_ALGORITHM AlgorithmId;
    DOT11_DIRECTION Direction;
    BOOLEAN bDelete;
    BOOLEAN bStatic;
    USHORT usKeyLength;
    UCHAR ucKey[1];
} DOT11_CIPHER_KEY_MAPPING_KEY_VALUE, *PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE;

#define OID_DOT11_ENUM_ASSOCIATION_INFO    NWF_DEFINE_OID(141,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef enum _DOT11_ASSOCIATION_STATE {
    dot11_assoc_state_zero = 0,
    dot11_assoc_state_unauth_unassoc = 1,
    dot11_assoc_state_auth_unassoc = 2,
    dot11_assoc_state_auth_assoc = 3
} DOT11_ASSOCIATION_STATE, *PDOT11_ASSOCIATION_STATE;

typedef struct _DOT11_ASSOCIATION_INFO_EX {
    DOT11_MAC_ADDRESS PeerMacAddress;
    DOT11_MAC_ADDRESS BSSID;
    USHORT usCapabilityInformation;
    USHORT usListenInterval;
    UCHAR ucPeerSupportedRates[MAX_NUM_SUPPORTED_RATES_V2];
    USHORT usAssociationID;
    DOT11_ASSOCIATION_STATE dot11AssociationState;
    DOT11_POWER_MODE dot11PowerMode;
    LARGE_INTEGER liAssociationUpTime;
    ULONGLONG ullNumOfTxPacketSuccesses;
    ULONGLONG ullNumOfTxPacketFailures;
    ULONGLONG ullNumOfRxPacketSuccesses;
    ULONGLONG ullNumOfRxPacketFailures;
} DOT11_ASSOCIATION_INFO_EX, *PDOT11_ASSOCIATION_INFO_EX;

typedef struct DOT11_ASSOCIATION_INFO_LIST {
#define DOT11_ASSOCIATION_INFO_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_ASSOCIATION_INFO_EX dot11AssocInfo[1];
} DOT11_ASSOCIATION_INFO_LIST, *PDOT11_ASSOCIATION_INFO_LIST;

#define OID_DOT11_DISCONNECT_REQUEST  NWF_DEFINE_OID(142,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_UNICAST_USE_GROUP_ENABLED  NWF_DEFINE_OID(143,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_HARDWARE_PHY_STATE  NWF_DEFINE_OID(144,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_DESIRED_PHY_LIST  NWF_DEFINE_OID(145,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_PHY_ID_LIST {
#define DOT11_PHY_ID_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    ULONG dot11PhyId[1];
} DOT11_PHY_ID_LIST, *PDOT11_PHY_ID_LIST;
#define DOT11_PHY_ID_ANY  (0xffffffffU)

#define OID_DOT11_CURRENT_PHY_ID  NWF_DEFINE_OID(146,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_MEDIA_STREAMING_ENABLED  NWF_DEFINE_OID(147,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD  NWF_DEFINE_OID(148,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_ACTIVE_PHY_LIST  NWF_DEFINE_OID(149,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_EXTSTA_CAPABILITY  NWF_DEFINE_OID(150,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_EXTSTA_CAPABILITY {
#define DOT11_EXTSTA_CAPABILITY_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uScanSSIDListSize;
    ULONG uDesiredBSSIDListSize;
    ULONG uDesiredSSIDListSize;
    ULONG uExcludedMacAddressListSize;
    ULONG uPrivacyExemptionListSize;
    ULONG uKeyMappingTableSize;
    ULONG uDefaultKeyTableSize;
    ULONG uWEPKeyValueMaxLength;
    ULONG uPMKIDCacheSize;
    ULONG uMaxNumPerSTADefaultKeyTables;
} DOT11_EXTSTA_CAPABILITY, *PDOT11_EXTSTA_CAPABILITY;

#define OID_DOT11_DATA_RATE_MAPPING_TABLE  NWF_DEFINE_OID(151,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_DATA_RATE_MAPPING_ENTRY {
    UCHAR ucDataRateIndex;
    UCHAR ucDataRateFlag;
    USHORT usDataRateValue;
} DOT11_DATA_RATE_MAPPING_ENTRY, *PDOT11_DATA_RATE_MAPPING_ENTRY;

typedef struct _DOT11_DATA_RATE_MAPPING_TABLE {
#define DOT11_DATA_RATE_MAPPING_TABLE_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uDataRateMappingLength;
    DOT11_DATA_RATE_MAPPING_ENTRY DataRateMappingEntries[DOT11_RATE_SET_MAX_LENGTH];
} DOT11_DATA_RATE_MAPPING_TABLE, *PDOT11_DATA_RATE_MAPPING_TABLE;
#define DOT11_DATA_RATE_NON_STANDARD  0x01U
#define DOT11_DATA_RATE_INDEX_MASK  0x7fU

#define OID_DOT11_SUPPORTED_COUNTRY_OR_REGION_STRING  NWF_DEFINE_OID(152,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_COUNTRY_OR_REGION_STRING_LIST {
#define DOT11_COUNTRY_OR_REGION_STRING_LIST_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_COUNTRY_OR_REGION_STRING CountryOrRegionStrings[1];
} DOT11_COUNTRY_OR_REGION_STRING_LIST, *PDOT11_COUNTRY_OR_REGION_STRING_LIST;

#define OID_DOT11_DESIRED_COUNTRY_OR_REGION_STRING  NWF_DEFINE_OID(153,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_PORT_STATE_NOTIFICATION  NWF_DEFINE_OID(154,NWF_OPERATIONAL_OID,NWF_OPTIONAL_OID)
typedef struct DOT11_PORT_STATE_NOTIFICATION {
#define DOT11_PORT_STATE_NOTIFICATION_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS PeerMac;
    BOOLEAN bOpen;
} DOT11_PORT_STATE_NOTIFICATION, *PDOT11_PORT_STATE_NOTIFICATION;

#define OID_DOT11_IBSS_PARAMS  NWF_DEFINE_OID(155,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)
typedef struct DOT11_IBSS_PARAMS {
#define DOT11_IBSS_PARAMS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    BOOLEAN bJoinOnly;
    ULONG uIEsOffset;
    ULONG uIEsLength;
} DOT11_IBSS_PARAMS, *PDOT11_IBSS_PARAMS;

#define OID_DOT11_QOS_PARAMS   NWF_DEFINE_OID(156,NWF_OPERATIONAL_OID,NWF_OPTIONAL_OID)
typedef struct DOT11_QOS_PARAMS {
#define DOT11_QOS_PARAMS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
#define DOT11_QOS_PROTOCOL_FLAG_WMM  (0x01U)
#define DOT11_QOS_PROTOCOL_FLAG_11E  (0x02U)
    UCHAR ucEnabledQoSProtocolFlags;
} DOT11_QOS_PARAMS, *PDOT11_QOS_PARAMS;

#define OID_DOT11_SAFE_MODE_ENABLED  NWF_DEFINE_OID(157,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define OID_DOT11_HIDDEN_NETWORK_ENABLED   NWF_DEFINE_OID(158,NWF_OPERATIONAL_OID,NWF_MANDATORY_OID)

#define DOT11_MAX_NUM_OF_FRAGMENTS  16
#define DOT11_PRIORITY_CONTENTION  0
#define DOT11_PRIORITY_CONTENTION_FREE  1

#define DOT11_SERVICE_CLASS_REORDERABLE_MULTICAST  0
#define DOT11_SERVICE_CLASS_STRICTLY_ORDERED  1
#define DOT11_FLAGS_80211B_SHORT_PREAMBLE  0x00000001
#define DOT11_FLAGS_80211B_PBCC   0x00000002
#define DOT11_FLAGS_80211B_CHANNEL_AGILITY    0x00000004
#define DOT11_FLAGS_PS_ON   0x00000008
#define DOT11_FLAGS_80211G_DSSS_OFDM    0x00000010
#define DOT11_FLAGS_80211G_USE_PROTECTION  0x00000020
#define DOT11_FLAGS_80211G_NON_ERP_PRESENT    0x00000040
#define DOT11_FLAGS_80211G_BARKER_PREAMBLE_MODE  0x00000080
#define DOT11_WME_PACKET    0x00000100

typedef struct _DOT11_FRAGMENT_DESCRIPTOR {
    ULONG uOffset;
    ULONG uLength;
} DOT11_FRAGMENT_DESCRIPTOR, *PDOT11_FRAGMENT_DESCRIPTOR;

typedef struct _DOT11_PER_MSDU_COUNTERS {
    ULONG uTransmittedFragmentCount;
    ULONG uRetryCount;
    ULONG uRTSSuccessCount;
    ULONG uRTSFailureCount;
    ULONG uACKFailureCount;
} DOT11_PER_MSDU_COUNTERS, *PDOT11_PER_MSDU_COUNTERS;

typedef struct DOT11_PHY_ATTRIBUTES DOT11_PHY_ATTRIBUTES, *PDOT11_PHY_ATTRIBUTES;

typedef struct DOT11_HRDSSS_PHY_ATTRIBUTES {
    BOOLEAN bShortPreambleOptionImplemented;
    BOOLEAN bPBCCOptionImplemented;
    BOOLEAN bChannelAgilityPresent;
    ULONG uHRCCAModeSupported;
} DOT11_HRDSSS_PHY_ATTRIBUTES, *PDOT11_HRDSSS_PHY_ATTRIBUTES;

typedef struct DOT11_OFDM_PHY_ATTRIBUTES {
    ULONG uFrequencyBandsSupported;
} DOT11_OFDM_PHY_ATTRIBUTES, *PDOT11_OFDM_PHY_ATTRIBUTES;

typedef struct DOT11_ERP_PHY_ATTRIBUTES {
#ifdef __cplusplus
    DOT11_HRDSSS_PHY_ATTRIBUTES HRDSSSAttributes;
#else
  DOT11_HRDSSS_PHY_ATTRIBUTES;
#endif
    BOOLEAN bERPPBCCOptionImplemented;
    BOOLEAN bDSSSOFDMOptionImplemented;
    BOOLEAN bShortSlotTimeOptionImplemented;
} DOT11_ERP_PHY_ATTRIBUTES, *PDOT11_ERP_PHY_ATTRIBUTES;

struct DOT11_PHY_ATTRIBUTES {
#define DOT11_PHY_ATTRIBUTES_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    DOT11_PHY_TYPE PhyType;
    BOOLEAN bHardwarePhyState;
    BOOLEAN bSoftwarePhyState;
    BOOLEAN bCFPollable;
    ULONG uMPDUMaxLength;
    DOT11_TEMP_TYPE TempType;
    DOT11_DIVERSITY_SUPPORT DiversitySupport;
    union {
        DOT11_HRDSSS_PHY_ATTRIBUTES HRDSSSAttributes;
          DOT11_OFDM_PHY_ATTRIBUTES OFDMAttributes;
          DOT11_ERP_PHY_ATTRIBUTES ERPAttributes;
#ifdef __cplusplus
    } PhySpecificAttributes;
#else
    };
#endif
    ULONG uNumberSupportedPowerLevels;
    ULONG TxPowerLevels[8];
    ULONG uNumDataRateMappingEntries;
    DOT11_DATA_RATE_MAPPING_ENTRY DataRateMappingEntries[DOT11_RATE_SET_MAX_LENGTH];
    DOT11_SUPPORTED_DATA_RATES_VALUE_V2 SupportedDataRatesValue;
};

#define DOT11_EXTSTA_ATTRIBUTES_SAFEMODE_OID_SUPPORTED  0x1
#define DOT11_EXTSTA_ATTRIBUTES_SAFEMODE_CERTIFIED   0x2
#define DOT11_EXTSTA_ATTRIBUTES_SAFEMODE_RESERVED    0xC

#ifdef NDIS_SUPPORT_NDIS6
typedef struct DOT11_EXTSTA_ATTRIBUTES DOT11_EXTSTA_ATTRIBUTES, *PDOT11_EXTSTA_ATTRIBUTES;
struct DOT11_EXTSTA_ATTRIBUTES {
#define DOT11_EXTSTA_ATTRIBUTES_REVISION_1  1
#define DOT11_EXTSTA_ATTRIBUTES_REVISION_2  2
    NDIS_OBJECT_HEADER Header;
    ULONG uScanSSIDListSize;
    ULONG uDesiredBSSIDListSize;
    ULONG uDesiredSSIDListSize;
    ULONG uExcludedMacAddressListSize;
    ULONG uPrivacyExemptionListSize;
    ULONG uKeyMappingTableSize;
    ULONG uDefaultKeyTableSize;
    ULONG uWEPKeyValueMaxLength;
    ULONG uPMKIDCacheSize;
    ULONG uMaxNumPerSTADefaultKeyTables;
    BOOLEAN bStrictlyOrderedServiceClassImplemented;
    UCHAR ucSupportedQoSProtocolFlags;
    BOOLEAN bSafeModeImplemented;
    ULONG uNumSupportedCountryOrRegionStrings;
    PDOT11_COUNTRY_OR_REGION_STRING pSupportedCountryOrRegionStrings;
    ULONG uInfraNumSupportedUcastAlgoPairs;
    PDOT11_AUTH_CIPHER_PAIR pInfraSupportedUcastAlgoPairs;
    ULONG uInfraNumSupportedMcastAlgoPairs;
    PDOT11_AUTH_CIPHER_PAIR pInfraSupportedMcastAlgoPairs;
    ULONG uAdhocNumSupportedUcastAlgoPairs;
    PDOT11_AUTH_CIPHER_PAIR pAdhocSupportedUcastAlgoPairs;
    ULONG uAdhocNumSupportedMcastAlgoPairs;
    PDOT11_AUTH_CIPHER_PAIR pAdhocSupportedMcastAlgoPairs;
};
#endif /* NDIS_SUPPORT_NDIS6 */

#if (defined(_NDIS_) || defined(NDIS_WRAPPER))
#ifdef NDIS_SUPPORT_NDIS6
typedef struct _DOT11_SEND_CONTEXT {
#define DOT11_SEND_CONTEXT_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    PVOID pvReserved;
    ULONG uFlags;
    ULONG uPSLifetime;
    ULONG uDelayedSleepValue;
    UCHAR ucTXDataRates[8];
    BOOLEAN bIndicateAssociatedACKs;
    BOOLEAN bIndicateTXStatus;
    UCHAR ucPriority;
    BOOLEAN bDontFragment;
    ULONG dwExtendedStatus;
    HANDLE hIntegrityOffload;
    HANDLE hWEPOffload;
    UCHAR ucWPAMSDUPriority;
    UCHAR ucNumOfRWsOnPeer;
    USHORT usAID;
    PDOT11_PER_MSDU_COUNTERS pDot11PerMSDUCounters;
} DOT11_SEND_CONTEXT, *PDOT11_SEND_CONTEXT;

#define DOT11_SEND_CONTEXT_SIZE    \
    ((sizeof(DOT11_SEND_CONTEXT) +   \
   MEMORY_ALLOCATION_ALIGNMENT - 1) &  \
  ~(MEMORY_ALLOCATION_ALIGNMENT-1))

typedef struct _DOT11_SEND_EXTENSION_INFO {
    ULONG uVersion;
    NDIS_OBJECT_HEADER Header;
    PVOID pvReserved;
    ULONG uFlags;
    ULONG uPSLifetime;
    ULONG uDelayedSleepValue;
    UCHAR ucTXDataRates[8];
    BOOLEAN bIndicateAssociatedACKs;
    BOOLEAN bIndicateTXStatus;
    UCHAR ucPriority;
    BOOLEAN bDontFragment;
    ULONG dwExtendedStatus;
    HANDLE hIntegrityOffload;
    HANDLE hWEPOffload;
    UCHAR ucWPAMSDUPriority;
    UCHAR ucNumOfRWsOnPeer;
    USHORT usAID;
    PDOT11_PER_MSDU_COUNTERS pDot11PerMSDUCounters;
    USHORT usNumberOfFragments;
    DOT11_FRAGMENT_DESCRIPTOR Dot11FragmentDescriptors[1];
} DOT11_SEND_EXTENSION_INFO, *PDOT11_SEND_EXTENSION_INFO;

typedef enum _DOT11_ACK_POLICY {
    dot11_ack_policy_none = 0,
    dot11_ack_policy_acknowledge = 1,
    dot11_ack_policy_do_not_acknowledge = 2,
} DOT11_ACK_POLICY, *PDOT11_ACK_POLICY;

typedef struct _DOT11_SEND_EXTENSION_INFO_V2 {
    UCHAR ucQoSPriority:4;
    UCHAR ucAckPolicy:4;
    USHORT usExtendedTXDataRatesOffset;
    UCHAR ucNumOfExtendedTXDataRates;
    UCHAR ucBuffer[1];
} DOT11_SEND_EXTENSION_INFO_V2, *PDOT11_SEND_EXTENSION_INFO_V2;

typedef struct _DOT11_RECV_CONTEXT {
#define DOT11_RECV_CONTEXT_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    PVOID pvReserved;
    DOT11_PHY_TYPE dot11PhyType;
    ULONG uChCenterFrequency;
    LONG lRSSI;
    ULONG uRSSI;
    UCHAR ucPriority;
    UCHAR ucDataRate;
    UCHAR ucPeerMacAddress[6];
    ULONG dwExtendedStatus;
    HANDLE hWEPOffloadContext;
    HANDLE hAuthOffloadContext;
    USHORT usWEPAppliedMask;
    USHORT usWPAMSDUPriority;
    DOT11_IV48_COUNTER dot11LowestIV48Counter;
    USHORT usDot11LeftRWBitMap;
    DOT11_IV48_COUNTER dot11HighestIV48Counter;
    USHORT usDot11RightRWBitMap;
    USHORT usNumberOfMPDUsReceived;
} DOT11_RECV_CONTEXT, *PDOT11_RECV_CONTEXT;
#define DOT11_RECV_CONTEXT_SIZE    \
    ((sizeof(DOT11_RECV_CONTEXT) + \
   MEMORY_ALLOCATION_ALIGNMENT - 1) &  \
  ~(MEMORY_ALLOCATION_ALIGNMENT-1))
#else /* !NDIS_SUPPORT_NDIS6 */
typedef struct _DOT11_RECV_EXTENSION_INFO {
    ULONG uVersion;
    PVOID pvReserved;
    DOT11_PHY_TYPE dot11PhyType;
    ULONG uChCenterFrequency;
    LONG lRSSI;
    LONG lRSSIMin;
    LONG lRSSIMax;
    ULONG uRSSI;
    UCHAR ucPriority;
    UCHAR ucDataRate;
    UCHAR ucPeerMacAddress[6];
    ULONG dwExtendedStatus;
    HANDLE hWEPOffloadContext;
    HANDLE hAuthOffloadContext;
    USHORT usWEPAppliedMask;
    USHORT usWPAMSDUPriority;
    DOT11_IV48_COUNTER dot11LowestIV48Counter;
    USHORT usDot11LeftRWBitMap;
    DOT11_IV48_COUNTER dot11HighestIV48Counter;
    USHORT usDot11RightRWBitMap;
    USHORT usNumberOfMPDUsReceived;
    USHORT usNumberOfFragments;
    PVOID pNdisPackets[1];
} DOT11_RECV_EXTENSION_INFO, *PDOT11_RECV_EXTENSION_INFO;

typedef struct _DOT11_RECV_EXTENSION_INFO_V2 {
    ULONG uVersion;
    PVOID pvReserved;
    DOT11_PHY_TYPE dot11PhyType;
    ULONG uChCenterFrequency;
    LONG lRSSI;
    ULONG uRSSI;
    UCHAR ucPriority;
    UCHAR ucDataRate;
    UCHAR ucPeerMacAddress[6];
    ULONG dwExtendedStatus;
    HANDLE hWEPOffloadContext;
    HANDLE hAuthOffloadContext;
    USHORT usWEPAppliedMask;
    USHORT usWPAMSDUPriority;
    DOT11_IV48_COUNTER dot11LowestIV48Counter;
    USHORT usDot11LeftRWBitMap;
    DOT11_IV48_COUNTER dot11HighestIV48Counter;
    USHORT usDot11RightRWBitMap;
    USHORT usNumberOfMPDUsReceived;
    USHORT usNumberOfFragments;
    PVOID pNdisPackets[1];
} DOT11_RECV_EXTENSION_INFO_V2, *PDOT11_RECV_EXTENSION_INFO_V2;
#endif /* !NDIS_SUPPORT_NDIS6 */
#endif /* DICK */

#define DOT11_STATUS_SUCCESS   0x00000001
#define DOT11_STATUS_RETRY_LIMIT_EXCEEDED  0x00000002
#define DOT11_STATUS_UNSUPPORTED_PRIORITY  0x00000004
#define DOT11_STATUS_UNSUPPORTED_SERVICE_CLASS   0x00000008
#define DOT11_STATUS_UNAVAILABLE_PRIORITY  0x00000010
#define DOT11_STATUS_UNAVAILABLE_SERVICE_CLASS   0x00000020
#define DOT11_STATUS_XMIT_MSDU_TIMER_EXPIRED  0x00000040
#define DOT11_STATUS_UNAVAILABLE_BSS    0x00000080
#define DOT11_STATUS_EXCESSIVE_DATA_LENGTH    0x00000100
#define DOT11_STATUS_ENCRYPTION_FAILED  0x00000200
#define DOT11_STATUS_WEP_KEY_UNAVAILABLE   0x00000400
#define DOT11_STATUS_ICV_VERIFIED    0x00000800
#define DOT11_STATUS_PACKET_REASSEMBLED    0x00001000
#define DOT11_STATUS_PACKET_NOT_REASSEMBLED   0x00002000
#define DOT11_STATUS_GENERATE_AUTH_FAILED  0x00004000
#define DOT11_STATUS_AUTH_NOT_VERIFIED  0x00008000
#define DOT11_STATUS_AUTH_VERIFIED   0x00010000
#define DOT11_STATUS_AUTH_FAILED  0x00020000
#define DOT11_STATUS_PS_LIFETIME_EXPIRED   0x00040000

typedef struct _DOT11_STATUS_INDICATION {
    ULONG uStatusType;
    NDIS_STATUS ndisStatus;
} DOT11_STATUS_INDICATION, *PDOT11_STATUS_INDICATION;

#define DOT11_STATUS_RESET_CONFIRM    4

#define DOT11_STATUS_SCAN_CONFIRM    1
#define DOT11_STATUS_JOIN_CONFIRM    2
#define DOT11_STATUS_START_CONFIRM   3
#define DOT11_STATUS_AP_JOIN_CONFIRM    5
#define DOT11_STATUS_MPDU_MAX_LENGTH_CHANGED  6

#ifdef NDIS_SUPPORT_NDIS6
typedef struct DOT11_MPDU_MAX_LENGTH_INDICATION {
#define DOT11_MPDU_MAX_LENGTH_INDICATION_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uPhyId;
    ULONG uMPDUMaxLength;
} DOT11_MPDU_MAX_LENGTH_INDICATION, *PDOT11_MPDU_MAX_LENGTH_INDICATION;
#else /* !NDIS_SUPPORT_NDIS6 */
typedef struct DOT11_MPDU_MAX_LENGTH_INDICATION {
    ULONG uStatusType;
    ULONG uVersion;
    ULONG uPhyId;
    ULONG uMPDUMaxLength;
} DOT11_MPDU_MAX_LENGTH_INDICATION, *PDOT11_MPDU_MAX_LENGTH_INDICATION;
#endif /* !NDIS_SUPPORT_NDIS6 */

typedef struct DOT11_ASSOCIATION_START_PARAMETERS {
#define DOT11_ASSOCIATION_START_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS MacAddr;
    DOT11_SSID SSID;
    ULONG uIHVDataOffset, uIHVDataSize;
} DOT11_ASSOCIATION_START_PARAMETERS, *PDOT11_ASSOCIATION_START_PARAMETERS;

#define DOT11_ENCAP_RFC_1042  1
#define DOT11_ENCAP_802_1H    2
typedef struct DOT11_ENCAP_ENTRY {
    USHORT usEtherType;
    USHORT usEncapType;
} DOT11_ENCAP_ENTRY, *PDOT11_ENCAP_ENTRY;

typedef enum DOT11_DS_INFO {
    DOT11_DS_CHANGED,
    DOT11_DS_UNCHANGED,
    DOT11_DS_UNKNOWN
} DOT11_DS_INFO, *PDOT11_DS_INFO;

typedef ULONG DOT11_ASSOC_STATUS;

#define DOT11_ASSOC_STATUS_SUCCESS  0

#define DOT11_ASSOC_STATUS_FAILURE  0x00000001U

#define DOT11_ASSOC_STATUS_UNREACHABLE    0x00000002U

#define DOT11_ASSOC_STATUS_RADIO_OFF   0x00000003U

#define DOT11_ASSOC_STATUS_PHY_DISABLED   0x00000004U

#define DOT11_ASSOC_STATUS_CANCELLED   0x00000005U

#define DOT11_ASSOC_STATUS_CANDIDATE_LIST_EXHAUSTED   0x00000006U

#define DOT11_ASSOC_STATUS_DISASSOCIATED_BY_OS  0x00000007U

#define DOT11_ASSOC_STATUS_DISASSOCIATED_BY_ROAMING   0x00000008U

#define DOT11_ASSOC_STATUS_DISASSOCIATED_BY_RESET  0x00000009U

#define DOT11_ASSOC_STATUS_SYSTEM_ERROR   0x0000000aU

#define DOT11_ASSOC_STATUS_ROAMING_BETTER_AP_FOUND    0x0000000bU

#define DOT11_ASSOC_STATUS_ROAMING_ASSOCIATION_LOST   0x0000000cU

#define DOT11_ASSOC_STATUS_ROAMING_ADHOC  0x0000000dU

#define DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED    0x00010000U
#define DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED_START    DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED
#define DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED_END   0x0001ffffU

#define DOT11_ASSOC_STATUS_PEER_DISASSOCIATED   0x00020000U
#define DOT11_ASSOC_STATUS_PEER_DISASSOCIATED_START   DOT11_ASSOC_STATUS_PEER_DISASSOCIATED
#define DOT11_ASSOC_STATUS_PEER_DISASSOCIATED_END  0x0002ffffU

#define DOT11_ASSOC_STATUS_ASSOCIATION_RESPONSE    0x00030000U
#define DOT11_ASSOC_STATUS_ASSOCIATION_RESPONSE_START    DOT11_ASSOC_STATUS_ASSOCIATION_RESPONSE
#define DOT11_ASSOC_STATUS_ASSOCIATION_RESPONSE_END   0x0003ffffU

#define DOT11_ASSOC_STATUS_REASON_CODE_MASK  0xffffU

#define DOT11_ASSOC_STATUS_IHV_START   0x80000000U
#define DOT11_ASSOC_STATUS_IHV_END  0xffffffffU

typedef struct DOT11_ASSOCIATION_COMPLETION_PARAMETERS {
#define DOT11_ASSOCIATION_COMPLETION_PARAMETERS_REVISION_1  1
#define DOT11_ASSOCIATION_COMPLETION_PARAMETERS_REVISION_2  2
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS MacAddr;
    DOT11_ASSOC_STATUS uStatus;
    BOOLEAN bReAssocReq;
    BOOLEAN bReAssocResp;
    ULONG uAssocReqOffset, uAssocReqSize;
    ULONG uAssocRespOffset, uAssocRespSize;
    ULONG uBeaconOffset, uBeaconSize;
    ULONG uIHVDataOffset, uIHVDataSize;
    DOT11_AUTH_ALGORITHM AuthAlgo;
    DOT11_CIPHER_ALGORITHM UnicastCipher;
    DOT11_CIPHER_ALGORITHM MulticastCipher;
    ULONG uActivePhyListOffset, uActivePhyListSize;
    BOOLEAN bFourAddressSupported;
    BOOLEAN bPortAuthorized;
    UCHAR ucActiveQoSProtocol;
    DOT11_DS_INFO DSInfo;
    ULONG uEncapTableOffset, uEncapTableSize;
#if (NTDDI_VERSION >= NTDDI_WIN8)
    DOT11_CIPHER_ALGORITHM MulticastMgmtCipher;
    ULONG uAssocComebackTime;
#endif /* NTDDI_VERSION >= NTDDI_WIN8 */
} DOT11_ASSOCIATION_COMPLETION_PARAMETERS, *PDOT11_ASSOCIATION_COMPLETION_PARAMETERS;

typedef struct DOT11_CONNECTION_START_PARAMETERS {
#define DOT11_CONNECTION_START_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    DOT11_BSS_TYPE BSSType;

    DOT11_MAC_ADDRESS AdhocBSSID;
    DOT11_SSID AdhocSSID;
} DOT11_CONNECTION_START_PARAMETERS, *PDOT11_CONNECTION_START_PARAMETERS;

#define DOT11_CONNECTION_STATUS_SUCCESS  DOT11_ASSOC_STATUS_SUCCESS
#define DOT11_CONNECTION_STATUS_FAILURE  DOT11_ASSOC_STATUS_FAILURE
#define DOT11_CONNECTION_STATUS_CANDIDATE_LIST_EXHAUSTED  DOT11_ASSOC_STATUS_CANDIDATE_LIST_EXHAUSTED
#define DOT11_CONNECTION_STATUS_PHY_POWER_DOWN  DOT11_ASSOC_STATUS_RADIO_OFF
#define DOT11_CONNECTION_STATUS_CANCELLED  DOT11_ASSOC_STATUS_CANCELLED
#define DOT11_CONNECTION_STATUS_IHV_START  DOT11_ASSOC_STATUS_IHV_START
#define DOT11_CONNECTION_STATUS_IHV_END  DOT11_ASSOC_STATUS_IHV_END
typedef struct DOT11_CONNECTION_COMPLETION_PARAMETERS {
#define DOT11_CONNECTION_COMPLETION_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    DOT11_ASSOC_STATUS uStatus;
} DOT11_CONNECTION_COMPLETION_PARAMETERS, *PDOT11_CONNECTION_COMPLETION_PARAMETERS;

#define DOT11_ROAMING_REASON_BETTER_AP_FOUND  DOT11_ASSOC_STATUS_ROAMING_BETTER_AP_FOUND
#define DOT11_ROAMING_REASON_ASSOCIATION_LOST  DOT11_ASSOC_STATUS_ROAMING_ASSOCIATION_LOST
#define DOT11_ROAMING_REASON_ADHOC  DOT11_ASSOC_STATUS_ROAMING_ADHOC
#define DOT11_ROAMING_REASON_IHV_START  DOT11_ASSOC_STATUS_IHV_START
#define DOT11_ROAMING_REASON_IHV_END  DOT11_ASSOC_STATUS_IHV_END
typedef struct DOT11_ROAMING_START_PARAMETERS {
#define DOT11_ROAMING_START_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS AdhocBSSID;
    DOT11_SSID AdhocSSID;
    DOT11_ASSOC_STATUS uRoamingReason;
} DOT11_ROAMING_START_PARAMETERS, *PDOT11_ROAMING_START_PARAMETERS;

typedef struct DOT11_ROAMING_COMPLETION_PARAMETERS {
#define DOT11_ROAMING_COMPLETION_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    DOT11_ASSOC_STATUS uStatus;
} DOT11_ROAMING_COMPLETION_PARAMETERS, *PDOT11_ROAMING_COMPLETION_PARAMETERS;

#define DOT11_DISASSOC_REASON_OS  DOT11_ASSOC_STATUS_DISASSOCIATED_BY_OS
#define DOT11_DISASSOC_REASON_PEER_UNREACHABLE  DOT11_ASSOC_STATUS_UNREACHABLE
#define DOT11_DISASSOC_REASON_RADIO_OFF  DOT11_ASSOC_STATUS_RADIO_OFF
#define DOT11_DISASSOC_REASON_PHY_DISABLED  DOT11_ASSOC_STATUS_PHY_DISABLED
#define DOT11_DISASSOC_REASON_IHV_START  DOT11_ASSOC_STATUS_IHV_START
#define DOT11_DISASSOC_REASON_IHV_END  DOT11_ASSOC_STATUS_IHV_END
typedef struct DOT11_DISASSOCIATION_PARAMETERS {
#define DOT11_DISASSOCIATION_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS MacAddr;
    DOT11_ASSOC_STATUS uReason;
    ULONG uIHVDataOffset, uIHVDataSize;
} DOT11_DISASSOCIATION_PARAMETERS, *PDOT11_DISASSOCIATION_PARAMETERS;

typedef struct DOT11_TKIPMIC_FAILURE_PARAMETERS {
#define DOT11_TKIPMIC_FAILURE_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    BOOLEAN bDefaultKeyFailure;
    ULONG uKeyIndex;
    DOT11_MAC_ADDRESS PeerMac;
} DOT11_TKIPMIC_FAILURE_PARAMETERS, *PDOT11_TKIPMIC_FAILURE_PARAMETERS;

typedef struct DOT11_PMKID_CANDIDATE_LIST_PARAMETERS {
#define DOT11_PMKID_CANDIDATE_LIST_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uCandidateListSize;
    ULONG uCandidateListOffset;
} DOT11_PMKID_CANDIDATE_LIST_PARAMETERS, *PDOT11_PMKID_CANDIDATE_LIST_PARAMETERS;

typedef struct DOT11_BSSID_CANDIDATE {
    DOT11_MAC_ADDRESS BSSID;

#define DOT11_PMKID_CANDIDATE_PREAUTH_ENABLED   0x00000001U
    ULONG uFlags;
} DOT11_BSSID_CANDIDATE, *PDOT11_BSSID_CANDIDATE;

typedef struct DOT11_PHY_STATE_PARAMETERS {
#define DOT11_PHY_STATE_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uPhyId;
    BOOLEAN bHardwarePhyState;
    BOOLEAN bSoftwarePhyState;
} DOT11_PHY_STATE_PARAMETERS, *PDOT11_PHY_STATE_PARAMETERS;

typedef struct DOT11_LINK_QUALITY_ENTRY {
    DOT11_MAC_ADDRESS PeerMacAddr;
    UCHAR ucLinkQuality;
} DOT11_LINK_QUALITY_ENTRY, *PDOT11_LINK_QUALITY_ENTRY;

typedef struct DOT11_LINK_QUALITY_PARAMETERS {
#define DOT11_LINK_QUALITY_PARAMETERS_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uLinkQualityListSize;
    ULONG uLinkQualityListOffset;
} DOT11_LINK_QUALITY_PARAMETERS, *PDOT11_LINK_QUALITY_PARAMETERS;

typedef struct DOT11_EXTSTA_SEND_CONTEXT {
#define DOT11_EXTSTA_SEND_CONTEXT_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    USHORT usExemptionActionType;
    ULONG uPhyId;
    ULONG uDelayedSleepValue;
    PVOID pvMediaSpecificInfo;
    ULONG uSendFlags;
} DOT11_EXTSTA_SEND_CONTEXT, *PDOT11_EXTSTA_SEND_CONTEXT;

#define DOT11_RECV_FLAG_RAW_PACKET  0x00000001U
#define DOT11_RECV_FLAG_RAW_PACKET_FCS_FAILURE  0x00000002U
#define DOT11_RECV_FLAG_RAW_PACKET_TIMESTAMP  0x00000004U
typedef struct DOT11_EXTSTA_RECV_CONTEXT {
#define DOT11_EXTSTA_RECV_CONTEXT_REVISION_1  1
    NDIS_OBJECT_HEADER Header;
    ULONG uReceiveFlags;
    ULONG uPhyId;
    ULONG uChCenterFrequency;
    USHORT usNumberOfMPDUsReceived;
    LONG lRSSI;
    UCHAR ucDataRate;
    ULONG uSizeMediaSpecificInfo;
    PVOID pvMediaSpecificInfo;
    ULONGLONG ullTimestamp;
} DOT11_EXTSTA_RECV_CONTEXT, *PDOT11_EXTSTA_RECV_CONTEXT;

#define OID_DOT11_PRIVATE_OIDS_START  (OID_DOT11_NDIS_START + 1024)

#define OID_DOT11_CURRENT_ADDRESS  (OID_DOT11_PRIVATE_OIDS_START + 2)

#define OID_DOT11_PERMANENT_ADDRESS  (OID_DOT11_PRIVATE_OIDS_START + 3)

#define OID_DOT11_MULTICAST_LIST  (OID_DOT11_PRIVATE_OIDS_START + 4)

#define OID_DOT11_MAXIMUM_LIST_SIZE  (OID_DOT11_PRIVATE_OIDS_START + 5)

#define DEFINE_NWF_GUID(name,ord)   \
    DEFINE_GUID(name, 0x6cb9a43e+(ord), 0xc45f, 0x4039, 0x9f, 0xe6, 0xd0, 0x8c, 0xb0, 0x57, 0x18, 0x4c)

DEFINE_NWF_GUID(GUID_NWF_OFFLOAD_CAPABILITY, 0);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_OFFLOAD_CAPABILITY, 1);
DEFINE_NWF_GUID(GUID_NWF_WEP_OFFLOAD, 2);
DEFINE_NWF_GUID(GUID_NWF_WEP_UPLOAD, 3);
DEFINE_NWF_GUID(GUID_NWF_DEFAULT_WEP_OFFLOAD, 4);
DEFINE_NWF_GUID(GUID_NWF_DEFAULT_WEP_UPLOAD, 5);
DEFINE_NWF_GUID(GUID_NWF_MPDU_MAX_LENGTH, 6);
DEFINE_NWF_GUID(GUID_NWF_OPERATION_MODE_CAPABILITY, 7);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_OPERATION_MODE, 8);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_PACKET_FILTER, 9);
DEFINE_NWF_GUID(GUID_NWF_ATIM_WINDOW, 10);
DEFINE_NWF_GUID(GUID_NWF_SCAN_REQUEST, 11);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_PHY_TYPE, 12);
DEFINE_NWF_GUID(GUID_NWF_JOIN_REQUEST, 13);
DEFINE_NWF_GUID(GUID_NWF_START_REQUEST, 14);
DEFINE_NWF_GUID(GUID_NWF_UPDATE_IE, 15);
DEFINE_NWF_GUID(GUID_NWF_RESET_REQUEST, 16);
DEFINE_NWF_GUID(GUID_NWF_NIC_POWER_STATE, 17);
DEFINE_NWF_GUID(GUID_NWF_OPTIONAL_CAPABILITY, 18);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_OPTIONAL_CAPABILITY, 19);
DEFINE_NWF_GUID(GUID_NWF_STATION_ID, 20);
DEFINE_NWF_GUID(GUID_NWF_MEDIUM_OCCUPANCY_LIMIT, 21);
DEFINE_NWF_GUID(GUID_NWF_CF_POLLABLE, 22);
DEFINE_NWF_GUID(GUID_NWF_CFP_PERIOD, 23);
DEFINE_NWF_GUID(GUID_NWF_CFP_MAX_DURATION, 24);
DEFINE_NWF_GUID(GUID_NWF_POWER_MGMT_MODE, 25);
DEFINE_NWF_GUID(GUID_NWF_OPERATIONAL_RATE_SET, 26);
DEFINE_NWF_GUID(GUID_NWF_BEACON_PERIOD, 27);
DEFINE_NWF_GUID(GUID_NWF_DTIM_PERIOD, 28);
DEFINE_NWF_GUID(GUID_NWF_WEP_ICV_ERROR_COUNT, 29);
DEFINE_NWF_GUID(GUID_NWF_MAC_ADDRESS, 30);
DEFINE_NWF_GUID(GUID_NWF_RTS_THRESHOLD, 31);
DEFINE_NWF_GUID(GUID_NWF_SHORT_RETRY_LIMIT, 32);
DEFINE_NWF_GUID(GUID_NWF_LONG_RETRY_LIMIT, 33);
DEFINE_NWF_GUID(GUID_NWF_FRAGMENTATION_THRESHOLD, 34);
DEFINE_NWF_GUID(GUID_NWF_MAX_TRANSMIT_MSDU_LIFETIME, 35);
DEFINE_NWF_GUID(GUID_NWF_MAX_RECEIVE_LIFETIME, 36);
DEFINE_NWF_GUID(GUID_NWF_COUNTERS_ENTRY, 37);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_PHY_TYPES, 38);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_REG_DOMAIN, 39);
DEFINE_NWF_GUID(GUID_NWF_TEMP_TYPE, 40);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_TX_ANTENNA, 41);
DEFINE_NWF_GUID(GUID_NWF_DIVERSITY_SUPPORT, 42);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_RX_ANTENNA, 43);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_POWER_LEVELS, 44);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_TX_POWER_LEVEL, 45);
DEFINE_NWF_GUID(GUID_NWF_HOP_TIME, 46);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_CHANNEL_NUMBER, 47);
DEFINE_NWF_GUID(GUID_NWF_MAX_DWELL_TIME, 48);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_DWELL_TIME, 49);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_SET, 50);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_PATTERN, 51);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_INDEX, 52);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_CHANNEL, 53);
DEFINE_NWF_GUID(GUID_NWF_CCA_MODE_SUPPORTED, 54);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_CCA_MODE, 55);
DEFINE_NWF_GUID(GUID_NWF_ED_THRESHOLD, 56);
DEFINE_NWF_GUID(GUID_NWF_CCA_WATCHDOG_TIMER_MAX, 57);
DEFINE_NWF_GUID(GUID_NWF_CCA_WATCHDOG_COUNT_MAX, 58);
DEFINE_NWF_GUID(GUID_NWF_CCA_WATCHDOG_TIMER_MIN, 59);
DEFINE_NWF_GUID(GUID_NWF_CCA_WATCHDOG_COUNT_MIN, 60);
DEFINE_NWF_GUID(GUID_NWF_REG_DOMAINS_SUPPORT_VALUE, 61);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_TX_ANTENNA, 62);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_RX_ANTENNA, 63);
DEFINE_NWF_GUID(GUID_NWF_DIVERSITY_SELECTION_RX, 64);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_DATA_RATES_VALUE, 65);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_FREQUENCY, 66);
DEFINE_NWF_GUID(GUID_NWF_TI_THRESHOLD, 67);
DEFINE_NWF_GUID(GUID_NWF_FREQUENCY_BANDS_SUPPORTED, 68);
DEFINE_NWF_GUID(GUID_NWF_SHORT_PREAMBLE_OPTION_IMPLEMENTED, 69);
DEFINE_NWF_GUID(GUID_NWF_PBCC_OPTION_IMPLEMENTED, 70);
DEFINE_NWF_GUID(GUID_NWF_CHANNEL_AGILITY_PRESENT, 71);
DEFINE_NWF_GUID(GUID_NWF_CHANNEL_AGILITY_ENABLED, 72);
DEFINE_NWF_GUID(GUID_NWF_HR_CCA_MODE_SUPPORTED, 73);
DEFINE_NWF_GUID(GUID_NWF_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED, 74);
DEFINE_NWF_GUID(GUID_NWF_MULTI_DOMAIN_CAPABILITY_ENABLED, 75);
DEFINE_NWF_GUID(GUID_NWF_COUNTRY_STRING, 76);
DEFINE_NWF_GUID(GUID_NWF_MULTI_DOMAIN_CAPABILITY, 77);
DEFINE_NWF_GUID(GUID_NWF_EHCC_PRIME_RADIX, 78);
DEFINE_NWF_GUID(GUID_NWF_EHCC_NUMBER_OF_CHANNELS_FAMILY_INDEX, 79);
DEFINE_NWF_GUID(GUID_NWF_EHCC_CAPABILITY_IMPLEMENTED, 80);
DEFINE_NWF_GUID(GUID_NWF_EHCC_CAPABILITY_ENABLED, 81);
DEFINE_NWF_GUID(GUID_NWF_HOP_ALGORITHM_ADOPTED, 82);
DEFINE_NWF_GUID(GUID_NWF_RANDOM_TABLE_FLAG, 83);
DEFINE_NWF_GUID(GUID_NWF_NUMBER_OF_HOPPING_SETS, 84);
DEFINE_NWF_GUID(GUID_NWF_HOP_MODULUS, 85);
DEFINE_NWF_GUID(GUID_NWF_HOP_OFFSET, 86);
DEFINE_NWF_GUID(GUID_NWF_HOPPING_PATTERN, 87);
DEFINE_NWF_GUID(GUID_NWF_RANDOM_TABLE_FIELD_NUMBER, 88);
DEFINE_NWF_GUID(GUID_NWF_WPA_TSC, 89);
DEFINE_NWF_GUID(GUID_NWF_RSSI_RANGE, 90);
DEFINE_NWF_GUID(GUID_NWF_RF_USAGE, 91);
DEFINE_NWF_GUID(GUID_NWF_NIC_SPECIFIC_EXTENSION, 92);
DEFINE_NWF_GUID(GUID_NWF_AP_JOIN_REQUEST, 93);
DEFINE_NWF_GUID(GUID_NWF_ERP_PBCC_OPTION_IMPLEMENTED, 94);
DEFINE_NWF_GUID(GUID_NWF_ERP_PBCC_OPTION_ENABLED, 95);
DEFINE_NWF_GUID(GUID_NWF_DSSS_OFDM_OPTION_IMPLEMENTED, 96);
DEFINE_NWF_GUID(GUID_NWF_DSSS_OFDM_OPTION_ENABLED, 97);
DEFINE_NWF_GUID(GUID_NWF_SHORT_SLOT_TIME_OPTION_IMPLEMENTED, 98);
DEFINE_NWF_GUID(GUID_NWF_SHORT_SLOT_TIME_OPTION_ENABLED, 99);
DEFINE_NWF_GUID(GUID_NWF_MAX_MAC_ADDRESS_STATES, 100);
DEFINE_NWF_GUID(GUID_NWF_RECV_SENSITIVITY_LIST, 101);
DEFINE_NWF_GUID(GUID_NWF_WME_IMPLEMENTED, 102);
DEFINE_NWF_GUID(GUID_NWF_WME_ENABLED, 103);
DEFINE_NWF_GUID(GUID_NWF_WME_AC_PARAMETERS, 104);
DEFINE_NWF_GUID(GUID_NWF_WME_UPDATE_IE, 105);
DEFINE_NWF_GUID(GUID_NWF_QOS_TX_QUEUES_SUPPORTED, 106);
DEFINE_NWF_GUID(GUID_NWF_QOS_TX_DURATION, 107);
DEFINE_NWF_GUID(GUID_NWF_QOS_TX_MEDIUM_TIME, 108);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_OFDM_FREQUENCY_LIST, 109);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_DSSS_CHANNEL_LIST, 110);
DEFINE_NWF_GUID(GUID_NWF_AUTO_CONFIG_ENABLED, 120);
DEFINE_NWF_GUID(GUID_NWF_ENUM_BSS_LIST, 121);
DEFINE_NWF_GUID(GUID_NWF_FLUSH_BSS_LIST, 122);
DEFINE_NWF_GUID(GUID_NWF_POWER_MGMT_REQUEST, 123);
DEFINE_NWF_GUID(GUID_NWF_DESIRED_SSID_LIST, 124);
DEFINE_NWF_GUID(GUID_NWF_EXCLUDED_MAC_ADDRESS_LIST, 125);
DEFINE_NWF_GUID(GUID_NWF_DESIRED_BSSID_LIST, 126);
DEFINE_NWF_GUID(GUID_NWF_DESIRED_BSS_TYPE, 127);
DEFINE_NWF_GUID(GUID_NWF_PMKID_LIST, 128);
DEFINE_NWF_GUID(GUID_NWF_CONNECT_REQUEST, 129);
DEFINE_NWF_GUID(GUID_NWF_EXCLUDE_UNENCRYPTED, 130);
DEFINE_NWF_GUID(GUID_NWF_STATISTICS, 131);
DEFINE_NWF_GUID(GUID_NWF_PRIVACY_EXEMPTION_LIST, 132);
DEFINE_NWF_GUID(GUID_NWF_ENABLED_AUTHENTICATION_ALGORITHM, 133);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_UNICAST_ALGORITHM_PAIR, 134);
DEFINE_NWF_GUID(GUID_NWF_ENABLED_UNICAST_CIPHER_ALGORITHM, 135);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_MULTICAST_ALGORITHM_PAIR, 136);
DEFINE_NWF_GUID(GUID_NWF_ENABLED_MULTICAST_CIPHER_ALGORITHM, 137);
DEFINE_NWF_GUID(GUID_NWF_CIPHER_DEFAULT_KEY_ID, 138);
DEFINE_NWF_GUID(GUID_NWF_CIPHER_DEFAULT_KEY, 139);
DEFINE_NWF_GUID(GUID_NWF_CIPHER_KEY_MAPPING_KEY, 140);
DEFINE_NWF_GUID(GUID_NWF_ENUM_ASSOCIATION_INFO, 141);
DEFINE_NWF_GUID(GUID_NWF_DISCONNECT_REQUEST, 142);
DEFINE_NWF_GUID(GUID_NWF_UNICAST_USE_GROUP_ENABLED, 143);
DEFINE_NWF_GUID(GUID_NWF_PHY_STATE, 144);
DEFINE_NWF_GUID(GUID_NWF_DESIRED_PHY_LIST, 145);
DEFINE_NWF_GUID(GUID_NWF_CURRENT_PHY_ID, 146);
DEFINE_NWF_GUID(GUID_NWF_MEDIA_STREAMING_ENABLED, 147);
DEFINE_NWF_GUID(GUID_NWF_UNREACHABLE_DETECTION_THRESHOLD, 148);
DEFINE_NWF_GUID(GUID_NWF_ACTIVE_PHY_LIST, 149);
DEFINE_NWF_GUID(GUID_NWF_EXTSTA_CAPABILITY, 150);
DEFINE_NWF_GUID(GUID_NWF_DATA_RATE_MAPPING_TABLE, 151);
DEFINE_NWF_GUID(GUID_NWF_SUPPORTED_COUNTRY_OR_REGION_STRING, 152);
DEFINE_NWF_GUID(GUID_NWF_DESIRED_COUNTRY_OR_REGION_STRING, 153);
DEFINE_NWF_GUID(GUID_NWF_PORT_STATE_NOTIFICATION, 154);
DEFINE_NWF_GUID(GUID_NWF_IBSS_PARAMS, 155);
DEFINE_NWF_GUID(GUID_NWF_QOS_PARAMS, 156);
DEFINE_NWF_GUID(GUID_NWF_SAFE_MODE_ENABLED, 157);
DEFINE_NWF_GUID(GUID_NWF_HIDDEN_NETWORK_ENABLED, 158);

DEFINE_NWF_GUID(GUID_NWF_CURRENT_ADDRESS, 1024 + 2);
DEFINE_NWF_GUID(GUID_NWF_PERMANENT_ADDRESS, 1024 + 3);
DEFINE_NWF_GUID(GUID_NWF_MULTICAST_LIST, 1024 + 4);
DEFINE_NWF_GUID(GUID_NWF_MAXIMUM_LIST_SIZE, 1024 + 5);

#endif /* NTDDI_VERSION > NTDDI_VISTA */


#ifdef NWF_EXTAP_SUPPORTED

#define DOT11_EXTAP_ATTRIBUTES_REVISION_1  1
#define NDIS_SIZEOF_DOT11_EXTAP_ATTRIBUTES_REVISION_1  sizeof(DOT11_EXTAP_ATTRIBUTES)
#define DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS_REVISION_1  1
#define DOT11_STOP_AP_PARAMETERS_REVISION_1  1
#define DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS_REVISION_1  1
#define DOT11_CAN_SUSTAIN_AP_PARAMETERS_REVISION_1  1
#define DOT11_INCOMING_ASSOC_STARTED_PARAMETERS_REVISION_1  1
#define DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS_REVISION_1  1
#define DOT11_AVAILABLE_CHANNEL_LIST_REVISION_1 1
#define DOT11_AVAILABLE_FREQUENCY_LIST_REVISION_1 1
#define DOT11_DISASSOCIATE_PEER_REQUEST_REVISION_1 1
#define DOT11_INCOMING_ASSOC_DECISION_REVISION_1 1
#define DOT11_ADDITIONAL_IE_REVISION_1 1
#define DOT11_EXTAP_SEND_CONTEXT_REVISION_1  1
#define DOT11_EXTAP_RECV_CONTEXT_REVISION_1  1
#define DOT11_PEER_INFO_LIST_REVISION_1  1

#define DOT11_ASSOC_ERROR_SOURCE_OS  0x0
#define DOT11_ASSOC_ERROR_SOURCE_REMOTE  0x01
#define DOT11_ASSOC_ERROR_SOURCE_OTHER  0xFF

#define DOT11_STOP_AP_REASON_FREQUENCY_NOT_AVAILABLE  0x1
#define DOT11_STOP_AP_REASON_CHANNEL_NOT_AVAILABLE  0x2
#define DOT11_STOP_AP_REASON_AP_ACTIVE  0x3

#define DOT11_STOP_AP_REASON_IHV_START  0xFF000000
#define DOT11_STOP_AP_REASON_IHV_END  0xFFFFFFFF

#define DOT11_CAN_SUSTAIN_AP_REASON_IHV_START   0xFF000000
#define DOT11_CAN_SUSTAIN_AP_REASON_IHV_END     0xFFFFFFFF

#define NWF_EXTAP_OID  (0x03U) 

#define OID_DOT11_WPS_ENABLED                    NWF_DEFINE_OID(0x01,NWF_EXTAP_OID,NWF_MANDATORY_OID)
#define OID_DOT11_START_AP_REQUEST               NWF_DEFINE_OID(0x02,NWF_EXTAP_OID,NWF_MANDATORY_OID)
#define OID_DOT11_AVAILABLE_CHANNEL_LIST         NWF_DEFINE_OID(0x03,NWF_EXTAP_OID,NWF_MANDATORY_OID)
#define OID_DOT11_AVAILABLE_FREQUENCY_LIST       NWF_DEFINE_OID(0x04,NWF_EXTAP_OID,NWF_MANDATORY_OID)
#define OID_DOT11_DISASSOCIATE_PEER_REQUEST      NWF_DEFINE_OID(0x05,NWF_EXTAP_OID,NWF_MANDATORY_OID)
#define OID_DOT11_INCOMING_ASSOCIATION_DECISION  NWF_DEFINE_OID(0x06,NWF_EXTAP_OID,NWF_MANDATORY_OID)
#define OID_DOT11_ADDITIONAL_IE                  NWF_DEFINE_OID(0x07,NWF_EXTAP_OID,NWF_MANDATORY_OID)
#define OID_DOT11_ENUM_PEER_INFO                 NWF_DEFINE_OID(0x08,NWF_EXTAP_OID,NWF_MANDATORY_OID)

typedef struct _DOT11_EXTAP_ATTRIBUTES {
    NDIS_OBJECT_HEADER Header;
    ULONG uScanSSIDListSize;
    ULONG uDesiredSSIDListSize;
    ULONG uPrivacyExemptionListSize;
    ULONG uAssociationTableSize;
    ULONG uDefaultKeyTableSize;
    ULONG uWEPKeyValueMaxLength;
    BOOLEAN bStrictlyOrderedServiceClassImplemented;
    ULONG uNumSupportedCountryOrRegionStrings;
    PDOT11_COUNTRY_OR_REGION_STRING pSupportedCountryOrRegionStrings;
    ULONG uInfraNumSupportedUcastAlgoPairs;
    PDOT11_AUTH_CIPHER_PAIR pInfraSupportedUcastAlgoPairs;
    ULONG uInfraNumSupportedMcastAlgoPairs;
    PDOT11_AUTH_CIPHER_PAIR pInfraSupportedMcastAlgoPairs;
} DOT11_EXTAP_ATTRIBUTES, *PDOT11_EXTAP_ATTRIBUTES;

typedef struct _DOT11_INCOMING_ASSOC_STARTED_PARAMETERS {
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS PeerMacAddr;
} DOT11_INCOMING_ASSOC_STARTED_PARAMETERS, *PDOT11_INCOMING_ASSOC_STARTED_PARAMETERS;

typedef struct _DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS {
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS PeerMacAddr;
    BOOLEAN bReAssocReq;
    ULONG uAssocReqOffset;
    ULONG uAssocReqSize;
} DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS, *PDOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS;

typedef struct _DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS {
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS PeerMacAddr;
    ULONG uStatus;
    UCHAR ucErrorSource;
    BOOLEAN bReAssocReq;
    BOOLEAN bReAssocResp;
    ULONG uAssocReqOffset;
    ULONG uAssocReqSize;
    ULONG uAssocRespOffset;
    ULONG uAssocRespSize;
    DOT11_AUTH_ALGORITHM AuthAlgo;
    DOT11_CIPHER_ALGORITHM UnicastCipher;
    DOT11_CIPHER_ALGORITHM MulticastCipher;
    ULONG uActivePhyListOffset;
    ULONG uActivePhyListSize;
    ULONG uBeaconOffset;
    ULONG uBeaconSize;
} DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS, *PDOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS;

typedef struct _DOT11_STOP_AP_PARAMETERS {
    NDIS_OBJECT_HEADER Header;
    ULONG ulReason;
} DOT11_STOP_AP_PARAMETERS, *PDOT11_STOP_AP_PARAMETERS;

typedef struct _DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS {
    NDIS_OBJECT_HEADER Header;
    ULONG ulPhyId;
    union {
        ULONG ulChannel;
        ULONG ulFrequency;
    };
} DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS, *PDOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS;

typedef struct _DOT11_CAN_SUSTAIN_AP_PARAMETERS {
    NDIS_OBJECT_HEADER Header;
    ULONG ulReason;
} DOT11_CAN_SUSTAIN_AP_PARAMETERS, *PDOT11_CAN_SUSTAIN_AP_PARAMETERS;

typedef struct _DOT11_AVAILABLE_CHANNEL_LIST {
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    ULONG uChannelNumber[1];
} DOT11_AVAILABLE_CHANNEL_LIST, *PDOT11_AVAILABLE_CHANNEL_LIST;

typedef struct _DOT11_AVAILABLE_FREQUENCY_LIST {
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    ULONG uFrequencyValue[1];
} DOT11_AVAILABLE_FREQUENCY_LIST, *PDOT11_AVAILABLE_FREQUENCY_LIST;

typedef struct _DOT11_DISASSOCIATE_PEER_REQUEST {
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS PeerMacAddr;
    USHORT usReason;
} DOT11_DISASSOCIATE_PEER_REQUEST, *PDOT11_DISASSOCIATE_PEER_REQUEST;

typedef struct _DOT11_INCOMING_ASSOC_DECISION {
    NDIS_OBJECT_HEADER Header;
    DOT11_MAC_ADDRESS PeerMacAddr;
    BOOLEAN bAccept;
    USHORT usReasonCode;
    ULONG uAssocResponseIEsOffset;
    ULONG uAssocResponseIEsLength;
} DOT11_INCOMING_ASSOC_DECISION, *PDOT11_INCOMING_ASSOC_DECISION;

typedef struct _DOT11_ADDITIONAL_IE {
    NDIS_OBJECT_HEADER Header;
    ULONG uBeaconIEsOffset;
    ULONG uBeaconIEsLength;
    ULONG uResponseIEsOffset;
    ULONG uResponseIEsLength;
} DOT11_ADDITIONAL_IE, *PDOT11_ADDITIONAL_IE;

typedef struct DOT11_EXTSTA_SEND_CONTEXT DOT11_EXTAP_SEND_CONTEXT, *PDOT11_EXTAP_SEND_CONTEXT;
typedef struct DOT11_EXTSTA_RECV_CONTEXT DOT11_EXTAP_RECV_CONTEXT, *PDOT11_EXTAP_RECV_CONTEXT;

typedef struct _DOT11_PEER_STATISTICS {
    ULONGLONG ullDecryptSuccessCount;
    ULONGLONG ullDecryptFailureCount;
    ULONGLONG ullTxPacketSuccessCount;
    ULONGLONG ullTxPacketFailureCount;
    ULONGLONG ullRxPacketSuccessCount;
    ULONGLONG ullRxPacketFailureCount;
} DOT11_PEER_STATISTICS, *PDOT11_PEER_STATISTICS;

typedef struct _DOT11_PEER_INFO {
    DOT11_MAC_ADDRESS MacAddress;
    USHORT usCapabilityInformation;
    DOT11_AUTH_ALGORITHM AuthAlgo;
    DOT11_CIPHER_ALGORITHM UnicastCipherAlgo;
    DOT11_CIPHER_ALGORITHM MulticastCipherAlgo;
    BOOLEAN bWpsEnabled;
    USHORT usListenInterval;
    UCHAR ucSupportedRates[MAX_NUM_SUPPORTED_RATES_V2];
    USHORT usAssociationID;
    DOT11_ASSOCIATION_STATE AssociationState;
    DOT11_POWER_MODE PowerMode;
    LARGE_INTEGER liAssociationUpTime;
    DOT11_PEER_STATISTICS Statistics;
} DOT11_PEER_INFO, *PDOT11_PEER_INFO;

typedef struct _DOT11_PEER_INFO_LIST {
    NDIS_OBJECT_HEADER Header;
    ULONG uNumOfEntries;
    ULONG uTotalNumOfEntries;
    DOT11_PEER_INFO PeerInfo[1];
} DOT11_PEER_INFO_LIST, *PDOT11_PEER_INFO_LIST;

#endif /* NWF_EXTAP_SUPPORTED */


#ifdef NWF_VWIFI_SUPPORTED

#define DOT11_VWIFI_COMBINATION_REVISION_1  1
#define DOT11_SIZEOF_VWIFI_COMBINATION_REVISION_1  sizeof(DOT11_VWIFI_COMBINATION)
#define DOT11_VWIFI_COMBINATION_REVISION_2  2
#define DOT11_SIZEOF_VWIFI_COMBINATION_REVISION_2  sizeof(DOT11_VWIFI_COMBINATION_V2)
#define DOT11_VWIFI_ATTRIBUTES_REVISION_1  1

#define NWF_VWIFI_OID  (0x04U) 

#define OID_DOT11_CREATE_MAC                  NWF_DEFINE_OID(0x01,NWF_VWIFI_OID,NWF_MANDATORY_OID)
#define OID_DOT11_DELETE_MAC                  NWF_DEFINE_OID(0x02,NWF_VWIFI_OID,NWF_MANDATORY_OID)
#define OID_DOT11_PREFERRED_MAC               NWF_DEFINE_OID(0x03,NWF_VWIFI_OID,NWF_MANDATORY_OID)
#define OID_DOT11_VIRTUAL_STATION_CAPABILITY  NWF_DEFINE_OID(0x04,NWF_VWIFI_OID,NWF_OPTIONAL_OID)

typedef struct _DOT11_VWIFI_COMBINATION {
    NDIS_OBJECT_HEADER Header;
    ULONG uNumInfrastructure;
    ULONG uNumAdhoc;
    ULONG uNumSoftAP;
} DOT11_VWIFI_COMBINATION, *PDOT11_VWIFI_COMBINATION;

typedef struct _DOT11_VWIFI_COMBINATION_V2 {
    NDIS_OBJECT_HEADER Header;
    ULONG uNumInfrastructure;
    ULONG uNumAdhoc;
    ULONG uNumSoftAP;
    ULONG uNumVirtualStation;
} DOT11_VWIFI_COMBINATION_V2, *PDOT11_VWIFI_COMBINATION_V2;

typedef struct DOT11_VWIFI_ATTRIBUTES {
    NDIS_OBJECT_HEADER Header;
    ULONG uTotalNumOfEntries;
    DOT11_VWIFI_COMBINATION Combinations[1];
} DOT11_VWIFI_ATTRIBUTES, *PDOT11_VWIFI_ATTRIBUTES;

typedef struct DOT11_MAC_INFO {
    ULONG uReserved;
    ULONG uNdisPortNumber;
    DOT11_MAC_ADDRESS MacAddr;
} DOT11_MAC_INFO, *PDOT11_MAC_INFO;

#endif /* NWF_VWIFI_SUPPORTED */

#if __POCC__ >= 290
#pragma warn(pop)
#endif

#endif /* _WINDOT11_H */
