Repository: retep998/winapi-rs (language: rust)

Issue:
Native Wifi / Wlanapi
[MSDN Native Wifi Reference](https://msdn.microsoft.com/en-us/library/windows/desktop/ms706275(v=vs.85).aspx) -> `Wlanapi.h` etc.

Is this missing and wanted?


Discussion / hints:
Is it missing? Yes.
Is it wanted? I don't know who wants it, but I am assuming that you probably want it given that you filed this issue.
If y'all will allow me to chime in, I would love to have this implemented.

I am currently writing an application that aims to use Wifi Direct. I'm willing to contribute some code as needed, though I'm somewhat of a Rust n00b and haven't wrote Windows FFI bindings in Rust before.

Fix patch:
diff --git a/Cargo.toml b/Cargo.toml
index de10da64c..8736720cd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -111,9 +111,11 @@ usb = []
 usbiodef = []
 usbspec = []
 windef = []
+windot11 = []
 windowsx = []
 winerror = []
 winusbio = []
+wlantypes = []
 wmistr = []
 wnnc = []
 ws2def = []
@@ -125,6 +127,7 @@ corecrt = []
 #um
 accctrl = []
 aclapi = []
+adhoc = []
 appmgmt = []
 audioclient = []
 audiosessiontypes = []
@@ -207,6 +210,7 @@ dmksctl = []
 dmusicc = []
 docobj = []
 documenttarget = []
+dot1x = []
 dpa_dsa = []
 dpapi = []
 dsgetdc = []
@@ -223,6 +227,7 @@ dxfile = []
 dxgidebug = []
 dxva2api = []
 dxvahd = []
+eaptypes = []
 endpointvolume = []
 errhandlingapi = []
 evntcons = []
@@ -244,6 +249,7 @@ jobapi = []
 jobapi2 = []
 knownfolders = []
 ktmw32 = []
+l2cmn = []
 libloaderapi = []
 lmaccess = []
 lmalert = []
@@ -400,6 +406,10 @@ wintrust = []
 winusb = []
 winuser = []
 winver = []
+wlanapi = []
+wlanihv = []
+wlanihvtypes = []
+wlclient = []
 wow64apiset = []
 wpdmtpextensions = []
 ws2bth = []
diff --git a/build.rs b/build.rs
index eaae6cb46..b6c39ff28 100644
--- a/build.rs
+++ b/build.rs
@@ -65,7 +65,7 @@ const DATA: &'static [(&'static str, &'static [&'static str], &'static [&'static
     ("mswsockdef", &["minwindef", "winnt", "ws2def"], &[]),
     ("netioapi", &["basetsd", "guiddef", "ifdef", "ipifcons", "minwindef", "nldef", "ntddndis", "ntdef", "ws2def", "ws2ipdef"], &["iphlpapi"]),
     ("nldef", &["basetsd", "minwindef", "ntdef"], &[]),
-    ("ntddndis", &["ifdef"], &[]),
+    ("ntddndis", &["ifdef", "minwindef"], &[]),
     ("ntddscsi", &["basetsd", "minwindef", "ntdef", "winioctl", "winnt"], &[]),
     ("ntddser", &["devpropdef"], &[]),
     ("ntdef", &["basetsd", "guiddef"], &[]),
@@ -86,9 +86,11 @@ const DATA: &'static [(&'static str, &'static [&'static str], &'static [&'static
     ("usbiodef", &["guiddef", "minwindef", "winioctl", "winnt"], &[]),
     ("usbspec", &["basetsd", "guiddef", "minwindef", "winnt"], &[]),
     ("windef", &["minwindef", "winnt"], &[]),
+    ("windot11", &["basetsd", "minwindef", "ntddndis", "winnt", "wlantypes"], &[]),
     ("windowsx", &["minwindef"], &[]),
     ("winerror", &["minwindef", "wtypesbase"], &[]),
     ("winusbio", &["minwindef", "usb"], &[]),
+    ("wlantypes", &["basetsd", "minwindef"], &[]),
     ("wmistr", &["basetsd", "guiddef", "minwindef", "winnt"], &[]),
     ("wnnc", &["minwindef"], &[]),
     ("ws2def", &["basetsd", "guiddef", "inaddr", "minwindef", "vcruntime", "winnt"], &[]),
@@ -100,6 +102,7 @@ const DATA: &'static [(&'static str, &'static [&'static str], &'static [&'static
     // um
     ("accctrl", &["guiddef", "minwindef", "winbase", "winnt"], &[]),
     ("aclapi", &["accctrl", "guiddef", "minwindef", "winnt"], &["advapi32"]),
+    ("adhoc", &["guiddef", "minwindef", "unknwnbase", "winnt"], &[]),
     ("appmgmt", &["guiddef", "minwindef", "winnt"], &["advapi32"]),
     ("audioclient", &["audiosessiontypes", "basetsd", "guiddef", "minwindef", "mmreg", "strmif", "unknwnbase", "winerror", "winnt", "wtypesbase"], &[]),
     ("audiosessiontypes", &["minwindef"], &[]),
@@ -182,6 +185,7 @@ const DATA: &'static [(&'static str, &'static [&'static str], &'static [&'static
     ("dmusicc", &[], &[]),
     ("docobj", &["guiddef", "minwindef", "oaidl", "unknwnbase", "winnt"], &[]),
     ("documenttarget", &["basetsd", "guiddef", "ntdef", "unknwnbase"], &[]),
+    ("dot1x", &["eaptypes", "guiddef", "l2cmn", "minwindef", "winnt"], &[]),
     ("dpa_dsa", &["basetsd", "minwindef", "winnt"], &["comctl32"]),
     ("dpapi", &["minwindef", "wincrypt", "windef", "winnt"], &["crypt32"]),
     ("dsgetdc", &["guiddef", "minwindef", "ntsecapi", "winnt", "ws2def"], &["netapi32"]),
@@ -198,6 +202,7 @@ const DATA: &'static [(&'static str, &'static [&'static str], &'static [&'static
     ("dxgidebug", &["basetsd", "guiddef", "minwindef", "unknwnbase", "winnt"], &["dxgi"]),
     ("dxva2api", &["basetsd", "d3d9", "d3d9types", "guiddef", "minwindef", "unknwnbase", "windef", "winnt"], &["dxva2"]),
     ("dxvahd", &["d3d9", "d3d9types", "guiddef", "minwindef", "unknwnbase", "windef", "winnt"], &["dxva2"]),
+    ("eaptypes", &["guiddef", "minwindef", "winnt"], &[]),
     ("endpointvolume", &["basetsd", "guiddef", "minwindef", "unknwnbase", "winnt"], &[]),
     ("errhandlingapi", &["basetsd", "minwindef", "winnt"], &["kernel32"]),
     ("evntcons", &["basetsd", "evntprov", "evntrace", "guiddef", "minwindef", "winnt"], &["advapi32"]),
@@ -220,6 +225,7 @@ const DATA: &'static [(&'static str, &'static [&'static str], &'static [&'static
     ("jobapi2", &["basetsd", "minwinbase", "minwindef", "ntdef", "winnt"], &["kernel32"]),
     ("knownfolders", &[], &[]),
     ("ktmw32", &["guiddef", "minwinbase", "minwindef", "winnt"], &["ktmw32"]),
+    ("l2cmn", &["guiddef", "minwindef", "winnt"], &[]),
     ("libloaderapi", &["basetsd", "minwindef", "winnt"], &["kernel32", "user32"]),
     ("lmaccess", &["basetsd", "lmcons", "minwindef", "winnt"], &["netapi32"]),
     ("lmalert", &["lmcons", "minwindef", "winnt"], &["netapi32"]),
@@ -377,6 +383,10 @@ const DATA: &'static [(&'static str, &'static [&'static str], &'static [&'static
     ("winusb", &["minwinbase", "minwindef", "usb", "usbspec", "winnt", "winusbio"], &["winusb"]),
     ("winuser", &["basetsd", "guiddef", "limits", "minwinbase", "minwindef", "vadefs", "windef", "wingdi", "winnt"], &["user32"]),
     ("winver", &["minwindef", "winnt"], &["kernel32", "version"]),
+    ("wlanapi", &["devpropdef", "eaptypes", "guiddef", "l2cmn", "minwindef", "windef", "windot11", "winnt", "wlantypes"], &["wlanapi"]),
+    ("wlanihv", &["basetsd", "dot1x", "eaptypes", "guiddef", "l2cmn", "minwindef", "windot11", "winnt", "winuser", "wlanihvtypes", "wlantypes", "wlclient"], &[]),
+    ("wlanihvtypes", &["eaptypes", "guiddef", "minwindef", "winnt", "wlantypes"], &[]),
+    ("wlclient", &["guiddef", "minwindef", "windot11", "winnt"], &[]),
     ("wow64apiset", &["minwindef", "winnt"], &["kernel32"]),
     ("wpdmtpextensions", &["wtypes"], &[]),
     ("ws2bth", &["bthdef", "bthsdpdef", "guiddef", "minwindef", "winnt", "ws2def"], &[]),
diff --git a/src/shared/mod.rs b/src/shared/mod.rs
index b75105613..0709db7d7 100644
--- a/src/shared/mod.rs
+++ b/src/shared/mod.rs
@@ -77,9 +77,11 @@ pub mod guiddef;
 #[cfg(feature = "usbiodef")] pub mod usbiodef;
 #[cfg(feature = "usbspec")] pub mod usbspec;
 #[cfg(feature = "windef")] pub mod windef;
+#[cfg(feature = "windot11")] pub mod windot11;
 #[cfg(feature = "windowsx")] pub mod windowsx;
 #[cfg(feature = "winerror")] pub mod winerror;
 #[cfg(feature = "winusbio")] pub mod winusbio;
+#[cfg(feature = "wlantypes")] pub mod wlantypes;
 #[cfg(feature = "wmistr")] pub mod wmistr;
 #[cfg(feature = "wnnc")] pub mod wnnc;
 #[cfg(feature = "ws2def")] pub mod ws2def;
diff --git a/src/shared/ntddndis.rs b/src/shared/ntddndis.rs
index ee0f83f1c..a3112088d 100644
--- a/src/shared/ntddndis.rs
+++ b/src/shared/ntddndis.rs
@@ -3,15 +3,24 @@
 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
 // All files in the project carrying such notice may not be copied, modified, or distributed
 // except according to those terms.
+use ctypes::c_int;
 use shared::ifdef::IF_MAX_STRING_SIZE;
-pub const NDIS_IF_MAX_STRING_SIZE: usize = IF_MAX_STRING_SIZE;
+use shared::minwindef::{UCHAR, USHORT};
+//290
+STRUCT!{struct NDIS_OBJECT_HEADER {
+    Type: UCHAR,
+    Revision: UCHAR,
+    Size: USHORT,
+}}
+pub type PNDIS_OBJECT_HEADER = *mut NDIS_OBJECT_HEADER;
+//2274
 ENUM!{enum NDIS_MEDIUM {
     NdisMedium802_3 = 0,
     NdisMedium802_5 = 1,
     NdisMediumFddi = 2,
     NdisMediumWan = 3,
     NdisMediumLocalTalk = 4,
-    NdisMediumDix = 5, // defined for convenience, not a real medium
+    NdisMediumDix = 5,
     NdisMediumArcnetRaw = 6,
     NdisMediumArcnet878_2 = 7,
     NdisMediumAtm = 8,
@@ -26,7 +35,7 @@ ENUM!{enum NDIS_MEDIUM {
     NdisMediumLoopback = 17,
     NdisMediumWiMAX = 18,
     NdisMediumIP = 19,
-    NdisMediumMax = 20, // Not a real medium, defined as an upper-bound
+    NdisMediumMax = 20,
 }}
 pub type PNDIS_MEDIUM = *mut NDIS_MEDIUM;
 ENUM!{enum NDIS_PHYSICAL_MEDIUM {
@@ -35,7 +44,7 @@ ENUM!{enum NDIS_PHYSICAL_MEDIUM {
     NdisPhysicalMediumCableModem = 2,
     NdisPhysicalMediumPhoneLine = 3,
     NdisPhysicalMediumPowerLine = 4,
-    NdisPhysicalMediumDSL = 5, // includes ADSL and UADSL (G.Lite)
+    NdisPhysicalMediumDSL = 5,
     NdisPhysicalMediumFibreChannel = 6,
     NdisPhysicalMedium1394 = 7,
     NdisPhysicalMediumWirelessWan = 8,
@@ -53,3 +62,14 @@ ENUM!{enum NDIS_PHYSICAL_MEDIUM {
     NdisPhysicalMediumMax = 20, // Not a real physical type, defined as an upper-bound
 }}
 pub type PNDIS_PHYSICAL_MEDIUM = *mut NDIS_PHYSICAL_MEDIUM;
+//2691
+pub type NDIS_STATUS = c_int;
+pub type PNDIS_STATUS = *mut c_int;
+//2736
+pub const NDIS_PACKET_TYPE_DIRECTED: u32 = 0x00000001;
+pub const NDIS_PACKET_TYPE_MULTICAST: u32 = 0x00000002;
+pub const NDIS_PACKET_TYPE_ALL_MULTICAST: u32 = 0x00000004;
+pub const NDIS_PACKET_TYPE_BROADCAST: u32 = 0x00000008;
+pub const NDIS_PACKET_TYPE_PROMISCUOUS: u32 = 0x00000020;
+//2835
+pub const NDIS_IF_MAX_STRING_SIZE: usize = IF_MAX_STRING_SIZE;
diff --git a/src/shared/windot11.rs b/src/shared/windot11.rs
new file mode 100644
index 000000000..4e483047f
--- /dev/null
+++ b/src/shared/windot11.rs
@@ -0,0 +1,2853 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+//! Definitions for native 802.11 miniport driver specifications.
+use shared::basetsd::UINT8;
+use shared::minwindef::{UCHAR, ULONG, USHORT};
+use shared::ntddndis::{
+    NDIS_OBJECT_HEADER, NDIS_PACKET_TYPE_ALL_MULTICAST, NDIS_PACKET_TYPE_BROADCAST,
+    NDIS_PACKET_TYPE_DIRECTED, NDIS_PACKET_TYPE_MULTICAST, NDIS_PACKET_TYPE_PROMISCUOUS,
+    NDIS_STATUS,
+};
+use shared::wlantypes::{
+    DOT11_AUTH_ALGORITHM, DOT11_AUTH_CIPHER_PAIR, DOT11_BSS_TYPE, DOT11_CIPHER_ALGORITHM,
+    DOT11_SSID, PDOT11_AUTH_CIPHER_PAIR,
+};
+use um::winnt::{BOOLEAN, HANDLE, LARGE_INTEGER, LONG, PVOID, ULONGLONG};
+pub type DOT11_MAC_ADDRESS = [UCHAR; 6];
+pub type PDOT11_MAC_ADDRESS = *mut DOT11_MAC_ADDRESS;
+STRUCT!{struct DOT11_BSSID_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    BSSIDs: [DOT11_MAC_ADDRESS; 1],
+}}
+pub type PDOT11_BSSID_LIST = *mut DOT11_BSSID_LIST;
+pub const DOT11_BSSID_LIST_REVISION_1: UCHAR = 1;
+pub const DOT11_HESSID_LENGTH: usize = 6;
+pub type DOT11_HESSID = [UCHAR; DOT11_HESSID_LENGTH];
+pub type PDOT11_HESSID = *mut DOT11_HESSID;
+ENUM!{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_vht = 8,
+    dot11_phy_type_dmg = 9,
+    dot11_phy_type_IHV_start = 0x80000000,
+    dot11_phy_type_IHV_end = 0xffffffff,
+}}
+pub type PDOT11_PHY_TYPE = *mut DOT11_PHY_TYPE;
+pub const DOT11_RATE_SET_MAX_LENGTH: usize = 126;
+STRUCT!{struct DOT11_RATE_SET {
+    uRateSetLength: ULONG,
+    ucRateSet: [UCHAR; DOT11_RATE_SET_MAX_LENGTH],
+}}
+pub type PDOT11_RATE_SET = *mut DOT11_RATE_SET;
+pub type DOT11_COUNTRY_OR_REGION_STRING = [UCHAR; 3];
+pub type PDOT11_COUNTRY_OR_REGION_STRING = *mut DOT11_COUNTRY_OR_REGION_STRING;
+pub type DOT11_DIALOG_TOKEN = UCHAR;
+pub type DOT11_WFD_STATUS_CODE = UCHAR;
+pub type DOT11_WFD_MINOR_REASON_CODE = UCHAR;
+pub type DOT11_WFD_SERVICE_HASH = [UCHAR; 6];
+pub const DOT11_WFD_SERVICE_NAME_MAX_LENGTH: usize = 255;
+pub const DOT11_WFD_APS2_SERVICE_TYPE_MAX_LENGTH: usize = 21;
+pub const DOT11_WFD_ASP2_INSTANCE_NAME_MAX_LENGTH: usize = 63;
+pub const DOT11_WFD_SERVICE_INFORMATION_MAX_LENGTH: usize = 65535;
+pub const DOT11_MAX_REQUESTED_SERVICE_INFORMATION_LENGTH: usize = 255;
+pub const DOT11_WFD_SESSION_INFO_MAX_LENGTH: usize = 144;
+STRUCT!{struct DOT11_WFD_SESSION_INFO {
+    uSessionInfoLength: USHORT,
+    ucSessionInfo: [UCHAR; DOT11_WFD_SESSION_INFO_MAX_LENGTH],
+}}
+pub type PDOT11_WFD_SESSION_INFO = *mut DOT11_WFD_SESSION_INFO;
+pub const NDIS_PACKET_TYPE_MEDIA_SPECIFIC_MASK: u32 = 0x0fff0000;
+pub const NDIS_PACKET_TYPE_802_11_DIRECTED_DATA: u32 = NDIS_PACKET_TYPE_DIRECTED;
+pub const NDIS_PACKET_TYPE_802_11_BROADCAST_DATA: u32 = NDIS_PACKET_TYPE_BROADCAST;
+pub const NDIS_PACKET_TYPE_802_11_MULTICAST_DATA: u32 = NDIS_PACKET_TYPE_MULTICAST;
+pub const NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_DATA: u32 = NDIS_PACKET_TYPE_ALL_MULTICAST;
+pub const NDIS_PACKET_TYPE_802_11_PROMISCUOUS_DATA: u32 = NDIS_PACKET_TYPE_PROMISCUOUS;
+pub const NDIS_PACKET_TYPE_802_11_RAW_DATA: u32 = 0x00010000;
+pub const NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT: u32 = 0x00020000;
+pub const NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT: u32 = 0x00040000;
+pub const NDIS_PACKET_TYPE_802_11_MULTICAST_MGMT: u32 = 0x00080000;
+pub const NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_MGMT: u32 = 0x00100000;
+pub const NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT: u32 = 0x00200000;
+pub const NDIS_PACKET_TYPE_802_11_RAW_MGMT: u32 = 0x00400000;
+pub const NDIS_PACKET_TYPE_802_11_DIRECTED_CTRL: u32 = 0x00800000;
+pub const NDIS_PACKET_TYPE_802_11_BROADCAST_CTRL: u32 = 0x01000000;
+pub const NDIS_PACKET_TYPE_802_11_PROMISCUOUS_CTRL: u32 = 0x02000000;
+pub const NDIS_PACKET_TYPE_ALL_802_11_FILTERS: u32 = 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;
+pub const DOT11_MAX_PDU_SIZE: i32 = 2346;
+pub const DOT11_MIN_PDU_SIZE: i32 = 256;
+pub const DOT11_MAX_NUM_DEFAULT_KEY: i32 = 4;
+pub const DOT11_MAX_NUM_DEFAULT_KEY_MFP: i32 = DOT11_MAX_NUM_DEFAULT_KEY + 2;
+pub const OID_DOT11_NDIS_START: u32 = 0x0D010300;
+pub const NWF_MANDATORY_OID: u32 = 0x01;
+pub const NWF_OPTIONAL_OID: u32 = 0x02;
+pub const NWF_OPERATIONAL_OID: u32 = 0x01;
+pub const NWF_STATISTICS_OID: u32 = 0x02;
+#[inline]
+pub fn NWF_DEFINE_OID(Seq: u32, o: u32, m: u32) -> u32 {
+    0x0E000000 | (o << 16) | (m << 8) | Seq
+}
+macro_rules! NWF_DEFINE_OID {
+    ($Seq:expr, $o:expr, $m:expr) => { 0x0E000000 | $o << 16 | $m << 8 | $Seq };
+}
+pub const OID_DOT11_OFFLOAD_CAPABILITY: u32 = OID_DOT11_NDIS_START + 0;
+pub const DOT11_HW_WEP_SUPPORTED_TX: u32 = 0x00000001;
+pub const DOT11_HW_WEP_SUPPORTED_RX: u32 = 0x00000002;
+pub const DOT11_HW_FRAGMENTATION_SUPPORTED: u32 = 0x00000004;
+pub const DOT11_HW_DEFRAGMENTATION_SUPPORTED: u32 = 0x00000008;
+pub const DOT11_HW_MSDU_AUTH_SUPPORTED_TX: u32 = 0x00000010;
+pub const DOT11_HW_MSDU_AUTH_SUPPORTED_RX: u32 = 0x00000020;
+pub const DOT11_CONF_ALGO_WEP_RC4: u32 = 0x00000001;
+pub const DOT11_CONF_ALGO_TKIP: u32 = 0x00000002;
+pub const DOT11_AUTH_ALGO_MICHAEL: u32 = 0x00000001;
+STRUCT!{struct DOT11_OFFLOAD_CAPABILITY {
+    uReserved: ULONG,
+    uFlags: ULONG,
+    uSupportedWEPAlgorithms: ULONG,
+    uNumOfReplayWindows: ULONG,
+    uMaxWEPKeyMappingLength: ULONG,
+    uSupportedAuthAlgorithms: ULONG,
+    uMaxAuthKeyMappingLength: ULONG,
+}}
+pub type PDOT11_OFFLOAD_CAPABILITY = *mut DOT11_OFFLOAD_CAPABILITY;
+pub const OID_DOT11_CURRENT_OFFLOAD_CAPABILITY: u32 = OID_DOT11_NDIS_START + 1;
+STRUCT!{struct DOT11_CURRENT_OFFLOAD_CAPABILITY {
+    uReserved: ULONG,
+    uFlags: ULONG,
+}}
+pub type PDOT11_CURRENT_OFFLOAD_CAPABILITY = *mut DOT11_CURRENT_OFFLOAD_CAPABILITY;
+pub const OID_DOT11_WEP_OFFLOAD: u32 = OID_DOT11_NDIS_START + 2;
+ENUM!{enum DOT11_OFFLOAD_TYPE {
+    dot11_offload_type_wep = 1,
+    dot11_offload_type_auth = 2,
+}}
+pub type PDOT11_OFFLOAD_TYPE = *mut DOT11_OFFLOAD_TYPE;
+STRUCT!{struct DOT11_IV48_COUNTER {
+    uIV32Counter: ULONG,
+    usIV16Counter: USHORT,
+}}
+pub type PDOT11_IV48_COUNTER = *mut DOT11_IV48_COUNTER;
+STRUCT!{struct DOT11_WEP_OFFLOAD {
+    uReserved: ULONG,
+    hOffloadContext: HANDLE,
+    hOffload: HANDLE,
+    dot11OffloadType: DOT11_OFFLOAD_TYPE,
+    dwAlgorithm: ULONG,
+    bRowIsOutbound: BOOLEAN,
+    bUseDefault: BOOLEAN,
+    uFlags: ULONG,
+    ucMacAddress: [UCHAR; 6],
+    uNumOfRWsOnPeer: ULONG,
+    uNumOfRWsOnMe: ULONG,
+    dot11IV48Counters: [DOT11_IV48_COUNTER; 16],
+    usDot11RWBitMaps: [USHORT; 16],
+    usKeyLength: USHORT,
+    ucKey: [UCHAR; 1],
+}}
+pub type PDOT11_WEP_OFFLOAD = *mut DOT11_WEP_OFFLOAD;
+pub const OID_DOT11_WEP_UPLOAD: u32 = OID_DOT11_NDIS_START + 3;
+STRUCT!{struct DOT11_WEP_UPLOAD {
+    uReserved: ULONG,
+    dot11OffloadType: DOT11_OFFLOAD_TYPE,
+    hOffload: HANDLE,
+    uNumOfRWsUsed: ULONG,
+    dot11IV48Counters: [DOT11_IV48_COUNTER; 16],
+    usDot11RWBitMaps: [USHORT; 16],
+}}
+pub type PDOT11_WEP_UPLOAD = *mut DOT11_WEP_UPLOAD;
+pub const OID_DOT11_DEFAULT_WEP_OFFLOAD: u32 = OID_DOT11_NDIS_START + 4;
+ENUM!{enum DOT11_KEY_DIRECTION {
+    dot11_key_direction_both = 1,
+    dot11_key_direction_inbound = 2,
+    dot11_key_direction_outbound = 3,
+}}
+pub type PDOT11_KEY_DIRECTION = *mut DOT11_KEY_DIRECTION;
+STRUCT!{struct DOT11_DEFAULT_WEP_OFFLOAD {
+    uReserved: ULONG,
+    hOffloadContext: HANDLE,
+    hOffload: HANDLE,
+    dwIndex: ULONG,
+    dot11OffloadType: DOT11_OFFLOAD_TYPE,
+    dwAlgorithm: ULONG,
+    uFlags: ULONG,
+    dot11KeyDirection: DOT11_KEY_DIRECTION,
+    ucMacAddress: [UCHAR; 6],
+    uNumOfRWsOnMe: ULONG,
+    dot11IV48Counters: [DOT11_IV48_COUNTER; 16],
+    usDot11RWBitMaps: [USHORT; 16],
+    usKeyLength: USHORT,
+    ucKey: [UCHAR; 1],
+}}
+pub type PDOT11_DEFAULT_WEP_OFFLOAD = *mut DOT11_DEFAULT_WEP_OFFLOAD;
+pub const OID_DOT11_DEFAULT_WEP_UPLOAD: u32 = OID_DOT11_NDIS_START + 5;
+STRUCT!{struct DOT11_DEFAULT_WEP_UPLOAD {
+    uReserved: ULONG,
+    dot11OffloadType: DOT11_OFFLOAD_TYPE,
+    hOffload: HANDLE,
+    uNumOfRWsUsed: ULONG,
+    dot11IV48Counters: [DOT11_IV48_COUNTER; 16],
+    usDot11RWBitMaps: [USHORT; 16],
+}}
+pub type PDOT11_DEFAULT_WEP_UPLOAD = *mut DOT11_DEFAULT_WEP_UPLOAD;
+pub const OID_DOT11_MPDU_MAX_LENGTH: u32 = OID_DOT11_NDIS_START + 6;
+pub const OID_DOT11_OPERATION_MODE_CAPABILITY: u32 = OID_DOT11_NDIS_START + 7;
+pub const DOT11_OPERATION_MODE_UNKNOWN: ULONG = 0x00000000;
+pub const DOT11_OPERATION_MODE_STATION: ULONG = 0x00000001;
+pub const DOT11_OPERATION_MODE_AP: ULONG = 0x00000002;
+pub const DOT11_OPERATION_MODE_EXTENSIBLE_STATION: ULONG = 0x00000004;
+pub const DOT11_OPERATION_MODE_EXTENSIBLE_AP: ULONG = 0x00000008;
+pub const DOT11_OPERATION_MODE_WFD_DEVICE: ULONG = 0x00000010;
+pub const DOT11_OPERATION_MODE_WFD_GROUP_OWNER: ULONG = 0x00000020;
+pub const DOT11_OPERATION_MODE_WFD_CLIENT: ULONG = 0x00000040;
+pub const DOT11_OPERATION_MODE_MANUFACTURING: ULONG = 0x40000000;
+pub const DOT11_OPERATION_MODE_NETWORK_MONITOR: ULONG = 0x80000000;
+STRUCT!{struct DOT11_OPERATION_MODE_CAPABILITY {
+    uReserved: ULONG,
+    uMajorVersion: ULONG,
+    uMinorVersion: ULONG,
+    uNumOfTXBuffers: ULONG,
+    uNumOfRXBuffers: ULONG,
+    uOpModeCapability: ULONG,
+}}
+pub type PDOT11_OPERATION_MODE_CAPABILITY = *mut DOT11_OPERATION_MODE_CAPABILITY;
+pub const OID_DOT11_CURRENT_OPERATION_MODE: u32 = OID_DOT11_NDIS_START + 8;
+STRUCT!{struct DOT11_CURRENT_OPERATION_MODE {
+    uReserved: ULONG,
+    uCurrentOpMode: ULONG,
+}}
+pub type PDOT11_CURRENT_OPERATION_MODE = *mut DOT11_CURRENT_OPERATION_MODE;
+pub const OID_DOT11_CURRENT_PACKET_FILTER: u32 = OID_DOT11_NDIS_START + 9;
+pub const DOT11_PACKET_TYPE_DIRECTED_CTRL: u32 = 0x00000001;
+pub const DOT11_PACKET_TYPE_DIRECTED_MGMT: u32 = 0x00000002;
+pub const DOT11_PACKET_TYPE_DIRECTED_DATA: u32 = 0x00000004;
+pub const DOT11_PACKET_TYPE_MULTICAST_CTRL: u32 = 0x00000008;
+pub const DOT11_PACKET_TYPE_MULTICAST_MGMT: u32 = 0x00000010;
+pub const DOT11_PACKET_TYPE_MULTICAST_DATA: u32 = 0x00000020;
+pub const DOT11_PACKET_TYPE_BROADCAST_CTRL: u32 = 0x00000040;
+pub const DOT11_PACKET_TYPE_BROADCAST_MGMT: u32 = 0x00000080;
+pub const DOT11_PACKET_TYPE_BROADCAST_DATA: u32 = 0x00000100;
+pub const DOT11_PACKET_TYPE_PROMISCUOUS_CTRL: u32 = 0x00000200;
+pub const DOT11_PACKET_TYPE_PROMISCUOUS_MGMT: u32 = 0x00000400;
+pub const DOT11_PACKET_TYPE_PROMISCUOUS_DATA: u32 = 0x00000800;
+pub const DOT11_PACKET_TYPE_ALL_MULTICAST_CTRL: u32 = 0x00001000;
+pub const DOT11_PACKET_TYPE_ALL_MULTICAST_MGMT: u32 = 0x00002000;
+pub const DOT11_PACKET_TYPE_ALL_MULTICAST_DATA: u32 = 0x00004000;
+pub const DOT11_PACKET_TYPE_RESERVED: u32 = !(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);
+pub const OID_DOT11_ATIM_WINDOW: u32 = OID_DOT11_NDIS_START + 10;
+pub const OID_DOT11_SCAN_REQUEST: u32 = OID_DOT11_NDIS_START + 11;
+ENUM!{enum DOT11_SCAN_TYPE {
+    dot11_scan_type_active = 1,
+    dot11_scan_type_passive = 2,
+    dot11_scan_type_auto = 3,
+    dot11_scan_type_forced = 0x80000000,
+}}
+pub type PDOT11_SCAN_TYPE = *mut DOT11_SCAN_TYPE;
+STRUCT!{struct DOT11_SCAN_REQUEST {
+    dot11BSSType: DOT11_BSS_TYPE,
+    dot11BSSID: DOT11_MAC_ADDRESS,
+    dot11SSID: DOT11_SSID,
+    dot11ScanType: DOT11_SCAN_TYPE,
+    bRestrictedScan: BOOLEAN,
+    bUseRequestIE: BOOLEAN,
+    uRequestIDsOffset: ULONG,
+    uNumOfRequestIDs: ULONG,
+    uPhyTypesOffset: ULONG,
+    uNumOfPhyTypes: ULONG,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+    ucBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_SCAN_REQUEST = *mut DOT11_SCAN_REQUEST;
+ENUM!{enum CH_DESCRIPTION_TYPE {
+    ch_description_type_logical = 1,
+    ch_description_type_center_frequency = 2,
+    ch_description_type_phy_specific = 3,
+}}
+pub type PCH_DESCRIPTION_TYPE = *mut CH_DESCRIPTION_TYPE;
+STRUCT!{struct DOT11_PHY_TYPE_INFO {
+    dot11PhyType: DOT11_PHY_TYPE,
+    bUseParameters: BOOLEAN,
+    uProbeDelay: ULONG,
+    uMinChannelTime: ULONG,
+    uMaxChannelTime: ULONG,
+    ChDescriptionType: CH_DESCRIPTION_TYPE,
+    uChannelListSize: ULONG,
+    ucChannelListBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_PHY_TYPE_INFO = *mut DOT11_PHY_TYPE_INFO;
+STRUCT!{struct DOT11_SCAN_REQUEST_V2 {
+    dot11BSSType: DOT11_BSS_TYPE,
+    dot11BSSID: DOT11_MAC_ADDRESS,
+    dot11ScanType: DOT11_SCAN_TYPE,
+    bRestrictedScan: BOOLEAN,
+    udot11SSIDsOffset: ULONG,
+    uNumOfdot11SSIDs: ULONG,
+    bUseRequestIE: BOOLEAN,
+    uRequestIDsOffset: ULONG,
+    uNumOfRequestIDs: ULONG,
+    uPhyTypeInfosOffset: ULONG,
+    uNumOfPhyTypeInfos: ULONG,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+    ucBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_SCAN_REQUEST_V2 = *mut DOT11_SCAN_REQUEST_V2;
+pub const OID_DOT11_CURRENT_PHY_TYPE: u32 = OID_DOT11_NDIS_START + 12;
+STRUCT!{struct DOT11_PHY_TYPE_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11PhyType: [DOT11_PHY_TYPE; 1],
+}}
+pub type PDOT11_PHY_TYPE_LIST = *mut DOT11_PHY_TYPE_LIST;
+pub const DOT11_PHY_TYPE_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_JOIN_REQUEST: u32 = OID_DOT11_NDIS_START + 13;
+pub const DOT11_CAPABILITY_INFO_ESS: USHORT = 0x0001;
+pub const DOT11_CAPABILITY_INFO_IBSS: USHORT = 0x0002;
+pub const DOT11_CAPABILITY_INFO_CF_POLLABLE: USHORT = 0x0004;
+pub const DOT11_CAPABILITY_INFO_CF_POLL_REQ: USHORT = 0x0008;
+pub const DOT11_CAPABILITY_INFO_PRIVACY: USHORT = 0x0010;
+pub const DOT11_CAPABILITY_SHORT_PREAMBLE: USHORT = 0x0020;
+pub const DOT11_CAPABILITY_PBCC: USHORT = 0x0040;
+pub const DOT11_CAPABILITY_CHANNEL_AGILITY: USHORT = 0x0080;
+pub const DOT11_CAPABILITY_SHORT_SLOT_TIME: USHORT = 0x0400;
+pub const DOT11_CAPABILITY_DSSSOFDM: USHORT = 0x2000;
+STRUCT!{struct DOT11_BSS_DESCRIPTION {
+    uReserved: ULONG,
+    dot11BSSID: DOT11_MAC_ADDRESS,
+    dot11BSSType: DOT11_BSS_TYPE,
+    usBeaconPeriod: USHORT,
+    ullTimestamp: ULONGLONG,
+    usCapabilityInformation: USHORT,
+    uBufferLength: ULONG,
+    ucBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_BSS_DESCRIPTION = *mut DOT11_BSS_DESCRIPTION;
+STRUCT!{struct DOT11_JOIN_REQUEST {
+    uJoinFailureTimeout: ULONG,
+    OperationalRateSet: DOT11_RATE_SET,
+    uChCenterFrequency: ULONG,
+    dot11BSSDescription: DOT11_BSS_DESCRIPTION,
+}}
+pub type PDOT11_JOIN_REQUEST = *mut DOT11_JOIN_REQUEST;
+pub const OID_DOT11_START_REQUEST: u32 = OID_DOT11_NDIS_START + 14;
+STRUCT!{struct DOT11_START_REQUEST {
+    uStartFailureTimeout: ULONG,
+    OperationalRateSet: DOT11_RATE_SET,
+    uChCenterFrequency: ULONG,
+    dot11BSSDescription: DOT11_BSS_DESCRIPTION,
+}}
+pub type PDOT11_START_REQUEST = *mut DOT11_START_REQUEST;
+pub const OID_DOT11_UPDATE_IE: u32 = OID_DOT11_NDIS_START + 15;
+ENUM!{enum DOT11_UPDATE_IE_OP {
+    dot11_update_ie_op_create_replace = 1,
+    dot11_update_ie_op_delete = 2,
+}}
+pub type PDOT11_UPDATE_IE_OP = *mut DOT11_UPDATE_IE_OP;
+STRUCT!{struct DOT11_UPDATE_IE {
+    dot11UpdateIEOp: DOT11_UPDATE_IE_OP,
+    uBufferLength: ULONG,
+    ucBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_UPDATE_IE = *mut DOT11_UPDATE_IE;
+pub const OID_DOT11_RESET_REQUEST: u32 = OID_DOT11_NDIS_START + 16;
+ENUM!{enum DOT11_RESET_TYPE {
+    dot11_reset_type_phy = 1,
+    dot11_reset_type_mac = 2,
+    dot11_reset_type_phy_and_mac = 3,
+}}
+pub type PDOT11_RESET_TYPE = *mut DOT11_RESET_TYPE;
+STRUCT!{struct DOT11_RESET_REQUEST {
+    dot11ResetType: DOT11_RESET_TYPE,
+    dot11MacAddress: DOT11_MAC_ADDRESS,
+    bSetDefaultMIB: BOOLEAN,
+}}
+pub type PDOT11_RESET_REQUEST = *mut DOT11_RESET_REQUEST;
+pub const OID_DOT11_NIC_POWER_STATE: u32 = OID_DOT11_NDIS_START + 17;
+pub const OID_DOT11_OPTIONAL_CAPABILITY: u32 = OID_DOT11_NDIS_START + 18;
+STRUCT!{struct DOT11_OPTIONAL_CAPABILITY {
+    uReserved: ULONG,
+    bDot11PCF: BOOLEAN,
+    bDot11PCFMPDUTransferToPC: BOOLEAN,
+    bStrictlyOrderedServiceClass: BOOLEAN,
+}}
+pub type PDOT11_OPTIONAL_CAPABILITY = *mut DOT11_OPTIONAL_CAPABILITY;
+pub const OID_DOT11_CURRENT_OPTIONAL_CAPABILITY: u32 = OID_DOT11_NDIS_START + 19;
+STRUCT!{struct DOT11_CURRENT_OPTIONAL_CAPABILITY {
+    uReserved: ULONG,
+    bDot11CFPollable: BOOLEAN,
+    bDot11PCF: BOOLEAN,
+    bDot11PCFMPDUTransferToPC: BOOLEAN,
+    bStrictlyOrderedServiceClass: BOOLEAN,
+}}
+pub type PDOT11_CURRENT_OPTIONAL_CAPABILITY = *mut DOT11_CURRENT_OPTIONAL_CAPABILITY;
+pub const OID_DOT11_STATION_ID: u32 = OID_DOT11_NDIS_START + 20;
+pub const OID_DOT11_MEDIUM_OCCUPANCY_LIMIT: u32 = OID_DOT11_NDIS_START + 21;
+pub const OID_DOT11_CF_POLLABLE: u32 = OID_DOT11_NDIS_START + 22;
+pub const OID_DOT11_CFP_PERIOD: u32 = OID_DOT11_NDIS_START + 23;
+pub const OID_DOT11_CFP_MAX_DURATION: u32 = OID_DOT11_NDIS_START + 24;
+pub const OID_DOT11_POWER_MGMT_MODE: u32 = OID_DOT11_NDIS_START + 25;
+ENUM!{enum DOT11_POWER_MODE {
+    dot11_power_mode_unknown = 0,
+    dot11_power_mode_active = 1,
+    dot11_power_mode_powersave = 2,
+}}
+pub type PDOT11_POWER_MODE = *mut DOT11_POWER_MODE;
+pub const DOT11_POWER_SAVE_LEVEL_MAX_PSP: ULONG = 1;
+pub const DOT11_POWER_SAVE_LEVEL_FAST_PSP: ULONG = 2;
+STRUCT!{struct DOT11_POWER_MGMT_MODE {
+    dot11PowerMode: DOT11_POWER_MODE,
+    uPowerSaveLevel: ULONG,
+    usListenInterval: USHORT,
+    usAID: USHORT,
+    bReceiveDTIMs: BOOLEAN,
+}}
+pub type PDOT11_POWER_MGMT_MODE = *mut DOT11_POWER_MGMT_MODE;
+pub const OID_DOT11_OPERATIONAL_RATE_SET: u32 = OID_DOT11_NDIS_START + 26;
+pub const OID_DOT11_BEACON_PERIOD: u32 = OID_DOT11_NDIS_START + 27;
+pub const OID_DOT11_DTIM_PERIOD: u32 = OID_DOT11_NDIS_START + 28;
+pub const OID_DOT11_WEP_ICV_ERROR_COUNT: u32 = OID_DOT11_NDIS_START + 29;
+pub const OID_DOT11_MAC_ADDRESS: u32 = OID_DOT11_NDIS_START + 30;
+pub const OID_DOT11_RTS_THRESHOLD: u32 = OID_DOT11_NDIS_START + 31;
+pub const OID_DOT11_SHORT_RETRY_LIMIT: u32 = OID_DOT11_NDIS_START + 32;
+pub const OID_DOT11_LONG_RETRY_LIMIT: u32 = OID_DOT11_NDIS_START + 33;
+pub const OID_DOT11_FRAGMENTATION_THRESHOLD: u32 = OID_DOT11_NDIS_START + 34;
+pub const OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME: u32 = OID_DOT11_NDIS_START + 35;
+pub const OID_DOT11_MAX_RECEIVE_LIFETIME: u32 = OID_DOT11_NDIS_START + 36;
+pub const OID_DOT11_COUNTERS_ENTRY: u32 = OID_DOT11_NDIS_START + 37;
+STRUCT!{struct DOT11_COUNTERS_ENTRY {
+    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: ULONG,
+}}
+pub type PDOT11_COUNTERS_ENTRY = *mut DOT11_COUNTERS_ENTRY;
+pub const OID_DOT11_SUPPORTED_PHY_TYPES: u32 = OID_DOT11_NDIS_START + 38;
+STRUCT!{struct DOT11_SUPPORTED_PHY_TYPES {
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11PHYType: [DOT11_PHY_TYPE; 1],
+}}
+pub type PDOT11_SUPPORTED_PHY_TYPES = *mut DOT11_SUPPORTED_PHY_TYPES;
+pub const OID_DOT11_CURRENT_REG_DOMAIN: u32 = OID_DOT11_NDIS_START + 39;
+pub const DOT11_REG_DOMAIN_OTHER: ULONG = 0x00000000;
+pub const DOT11_REG_DOMAIN_FCC: ULONG = 0x00000010;
+pub const DOT11_REG_DOMAIN_DOC: ULONG = 0x00000020;
+pub const DOT11_REG_DOMAIN_ETSI: ULONG = 0x00000030;
+pub const DOT11_REG_DOMAIN_SPAIN: ULONG = 0x00000031;
+pub const DOT11_REG_DOMAIN_FRANCE: ULONG = 0x00000032;
+pub const DOT11_REG_DOMAIN_MKK: ULONG = 0x00000040;
+pub const OID_DOT11_TEMP_TYPE: u32 = OID_DOT11_NDIS_START + 40;
+ENUM!{enum DOT11_TEMP_TYPE {
+    dot11_temp_type_unknown = 0,
+    dot11_temp_type_1 = 1,
+    dot11_temp_type_2 = 2,
+}}
+pub type PDOT11_TEMP_TYPE = *mut DOT11_TEMP_TYPE;
+pub const OID_DOT11_CURRENT_TX_ANTENNA: u32 = OID_DOT11_NDIS_START + 41;
+pub const OID_DOT11_DIVERSITY_SUPPORT: u32 = OID_DOT11_NDIS_START + 42;
+ENUM!{enum DOT11_DIVERSITY_SUPPORT {
+    dot11_diversity_support_unknown = 0,
+    dot11_diversity_support_fixedlist = 1,
+    dot11_diversity_support_notsupported = 2,
+    dot11_diversity_support_dynamic = 3,
+}}
+pub type PDOT11_DIVERSITY_SUPPORT = *mut DOT11_DIVERSITY_SUPPORT;
+pub const OID_DOT11_CURRENT_RX_ANTENNA: u32 = OID_DOT11_NDIS_START + 43;
+pub const OID_DOT11_SUPPORTED_POWER_LEVELS: u32 = OID_DOT11_NDIS_START + 44;
+STRUCT!{struct DOT11_SUPPORTED_POWER_LEVELS {
+    uNumOfSupportedPowerLevels: ULONG,
+    uTxPowerLevelValues: [ULONG; 8],
+}}
+pub type PDOT11_SUPPORTED_POWER_LEVELS = *mut DOT11_SUPPORTED_POWER_LEVELS;
+pub const OID_DOT11_CURRENT_TX_POWER_LEVEL: u32 = OID_DOT11_NDIS_START + 45;
+pub const OID_DOT11_HOP_TIME: u32 = OID_DOT11_NDIS_START + 46;
+pub const OID_DOT11_CURRENT_CHANNEL_NUMBER: u32 = OID_DOT11_NDIS_START + 47;
+pub const OID_DOT11_MAX_DWELL_TIME: u32 = OID_DOT11_NDIS_START + 48;
+pub const OID_DOT11_CURRENT_DWELL_TIME: u32 = OID_DOT11_NDIS_START + 49;
+pub const OID_DOT11_CURRENT_SET: u32 = OID_DOT11_NDIS_START + 50;
+pub const OID_DOT11_CURRENT_PATTERN: u32 = OID_DOT11_NDIS_START + 51;
+pub const OID_DOT11_CURRENT_INDEX: u32 = OID_DOT11_NDIS_START + 52;
+pub const OID_DOT11_CURRENT_CHANNEL: u32 = OID_DOT11_NDIS_START + 53;
+pub const OID_DOT11_CCA_MODE_SUPPORTED: u32 = OID_DOT11_NDIS_START + 54;
+pub const DOT11_CCA_MODE_ED_ONLY: ULONG = 0x00000001;
+pub const DOT11_CCA_MODE_CS_ONLY: ULONG = 0x00000002;
+pub const DOT11_CCA_MODE_ED_and_CS: ULONG = 0x00000004;
+pub const DOT11_CCA_MODE_CS_WITH_TIMER: ULONG = 0x00000008;
+pub const DOT11_CCA_MODE_HRCS_AND_ED: ULONG = 0x00000010;
+pub const OID_DOT11_CURRENT_CCA_MODE: u32 = OID_DOT11_NDIS_START + 55;
+pub const OID_DOT11_ED_THRESHOLD: u32 = OID_DOT11_NDIS_START + 56;
+pub const OID_DOT11_CCA_WATCHDOG_TIMER_MAX: u32 = OID_DOT11_NDIS_START + 57;
+pub const OID_DOT11_CCA_WATCHDOG_COUNT_MAX: u32 = OID_DOT11_NDIS_START + 58;
+pub const OID_DOT11_CCA_WATCHDOG_TIMER_MIN: u32 = OID_DOT11_NDIS_START + 59;
+pub const OID_DOT11_CCA_WATCHDOG_COUNT_MIN: u32 = OID_DOT11_NDIS_START + 60;
+pub const OID_DOT11_REG_DOMAINS_SUPPORT_VALUE: u32 = OID_DOT11_NDIS_START + 61;
+STRUCT!{struct DOT11_REG_DOMAIN_VALUE {
+    uRegDomainsSupportIndex: ULONG,
+    uRegDomainsSupportValue: ULONG,
+}}
+pub type PDOT11_REG_DOMAIN_VALUE = *mut DOT11_REG_DOMAIN_VALUE;
+STRUCT!{struct DOT11_REG_DOMAINS_SUPPORT_VALUE {
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11RegDomainValue: [DOT11_REG_DOMAIN_VALUE; 1],
+}}
+pub type PDOT11_REG_DOMAINS_SUPPORT_VALUE = *mut DOT11_REG_DOMAINS_SUPPORT_VALUE;
+pub const OID_DOT11_SUPPORTED_TX_ANTENNA: u32 = OID_DOT11_NDIS_START + 62;
+STRUCT!{struct DOT11_SUPPORTED_ANTENNA {
+    uAntennaListIndex: ULONG,
+    bSupportedAntenna: BOOLEAN,
+}}
+pub type PDOT11_SUPPORTED_ANTENNA = *mut DOT11_SUPPORTED_ANTENNA;
+STRUCT!{struct DOT11_SUPPORTED_ANTENNA_LIST {
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11SupportedAntenna: [DOT11_SUPPORTED_ANTENNA; 1],
+}}
+pub type PDOT11_SUPPORTED_ANTENNA_LIST = *mut DOT11_SUPPORTED_ANTENNA_LIST;
+pub const OID_DOT11_SUPPORTED_RX_ANTENNA: u32 = OID_DOT11_NDIS_START + 63;
+pub const OID_DOT11_DIVERSITY_SELECTION_RX: u32 = OID_DOT11_NDIS_START + 64;
+STRUCT!{struct DOT11_DIVERSITY_SELECTION_RX {
+    uAntennaListIndex: ULONG,
+    bDiversitySelectionRX: BOOLEAN,
+}}
+pub type PDOT11_DIVERSITY_SELECTION_RX = *mut DOT11_DIVERSITY_SELECTION_RX;
+STRUCT!{struct DOT11_DIVERSITY_SELECTION_RX_LIST {
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11DiversitySelectionRx: [DOT11_DIVERSITY_SELECTION_RX; 1],
+}}
+pub type PDOT11_DIVERSITY_SELECTION_RX_LIST = *mut DOT11_DIVERSITY_SELECTION_RX_LIST;
+pub const OID_DOT11_SUPPORTED_DATA_RATES_VALUE: u32 = OID_DOT11_NDIS_START + 65;
+pub const MAX_NUM_SUPPORTED_RATES: usize = 8;
+pub const MAX_NUM_SUPPORTED_RATES_V2: usize = 255;
+STRUCT!{struct DOT11_SUPPORTED_DATA_RATES_VALUE {
+    ucSupportedTxDataRatesValue: [UCHAR; MAX_NUM_SUPPORTED_RATES],
+    ucSupportedRxDataRatesValue: [UCHAR; MAX_NUM_SUPPORTED_RATES],
+}}
+pub type PDOT11_SUPPORTED_DATA_RATES_VALUE = *mut DOT11_SUPPORTED_DATA_RATES_VALUE;
+STRUCT!{struct DOT11_SUPPORTED_DATA_RATES_VALUE_V2 {
+    ucSupportedTxDataRatesValue: [UCHAR; MAX_NUM_SUPPORTED_RATES_V2],
+    ucSupportedRxDataRatesValue: [UCHAR; MAX_NUM_SUPPORTED_RATES_V2],
+}}
+pub type PDOT11_SUPPORTED_DATA_RATES_VALUE_V2 = *mut DOT11_SUPPORTED_DATA_RATES_VALUE_V2;
+pub type DOT11_SUPPORTED_DATA_RATES_VALUE_V1 = DOT11_SUPPORTED_DATA_RATES_VALUE_V2;
+pub type PDOT11_SUPPORTED_DATA_RATES_VALUE_V1 = *mut DOT11_SUPPORTED_DATA_RATES_VALUE_V2;
+pub const OID_DOT11_CURRENT_FREQUENCY: u32 = OID_DOT11_NDIS_START + 66;
+pub const OID_DOT11_TI_THRESHOLD: u32 = OID_DOT11_NDIS_START + 67;
+pub const OID_DOT11_FREQUENCY_BANDS_SUPPORTED: u32 = OID_DOT11_NDIS_START + 68;
+pub const DOT11_FREQUENCY_BANDS_LOWER: u32 = 0x00000001;
+pub const DOT11_FREQUENCY_BANDS_MIDDLE: u32 = 0x00000002;
+pub const DOT11_FREQUENCY_BANDS_UPPER: u32 = 0x00000004;
+pub const OID_DOT11_SHORT_PREAMBLE_OPTION_IMPLEMENTED: u32 = OID_DOT11_NDIS_START + 69;
+pub const OID_DOT11_PBCC_OPTION_IMPLEMENTED: u32 = OID_DOT11_NDIS_START + 70;
+pub const OID_DOT11_CHANNEL_AGILITY_PRESENT: u32 = OID_DOT11_NDIS_START + 71;
+pub const OID_DOT11_CHANNEL_AGILITY_ENABLED: u32 = OID_DOT11_NDIS_START + 72;
+pub const OID_DOT11_HR_CCA_MODE_SUPPORTED: u32 = OID_DOT11_NDIS_START + 73;
+pub const DOT11_HR_CCA_MODE_ED_ONLY: ULONG = 0x00000001;
+pub const DOT11_HR_CCA_MODE_CS_ONLY: ULONG = 0x00000002;
+pub const DOT11_HR_CCA_MODE_CS_AND_ED: ULONG = 0x00000004;
+pub const DOT11_HR_CCA_MODE_CS_WITH_TIMER: ULONG = 0x00000008;
+pub const DOT11_HR_CCA_MODE_HRCS_AND_ED: ULONG = 0x00000010;
+pub const OID_DOT11_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED: u32 = OID_DOT11_NDIS_START + 74;
+pub const OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED: u32 = OID_DOT11_NDIS_START + 75;
+pub const OID_DOT11_COUNTRY_STRING: u32 = OID_DOT11_NDIS_START + 76;
+STRUCT!{struct DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY {
+    uMultiDomainCapabilityIndex: ULONG,
+    uFirstChannelNumber: ULONG,
+    uNumberOfChannels: ULONG,
+    lMaximumTransmitPowerLevel: LONG,
+}}
+pub type PDOT11_MULTI_DOMAIN_CAPABILITY_ENTRY = *mut DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY;
+STRUCT!{struct DOT11_MD_CAPABILITY_ENTRY_LIST {
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11MDCapabilityEntry: [DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY; 1],
+}}
+pub type PDOT11_MD_CAPABILITY_ENTRY_LIST = *mut DOT11_MD_CAPABILITY_ENTRY_LIST;
+pub const OID_DOT11_MULTI_DOMAIN_CAPABILITY: u32 = OID_DOT11_NDIS_START + 77;
+pub const OID_DOT11_EHCC_PRIME_RADIX: u32 = OID_DOT11_NDIS_START + 78;
+pub const OID_DOT11_EHCC_NUMBER_OF_CHANNELS_FAMILY_INDEX: u32 = OID_DOT11_NDIS_START + 79;
+pub const OID_DOT11_EHCC_CAPABILITY_IMPLEMENTED: u32 = OID_DOT11_NDIS_START + 80;
+pub const OID_DOT11_EHCC_CAPABILITY_ENABLED: u32 = OID_DOT11_NDIS_START + 81;
+pub const OID_DOT11_HOP_ALGORITHM_ADOPTED: u32 = OID_DOT11_NDIS_START + 82;
+ENUM!{enum DOT11_HOP_ALGO_ADOPTED {
+    dot11_hop_algo_current = 0,
+    dot11_hop_algo_hop_index = 1,
+    dot11_hop_algo_hcc = 2,
+}}
+pub type PDOT11_HOP_ALGO_ADOPTED = *mut DOT11_HOP_ALGO_ADOPTED;
+pub const OID_DOT11_RANDOM_TABLE_FLAG: u32 = OID_DOT11_NDIS_START + 83;
+pub const OID_DOT11_NUMBER_OF_HOPPING_SETS: u32 = OID_DOT11_NDIS_START + 84;
+pub const OID_DOT11_HOP_MODULUS: u32 = OID_DOT11_NDIS_START + 85;
+pub const OID_DOT11_HOP_OFFSET: u32 = OID_DOT11_NDIS_START + 86;
+pub const OID_DOT11_HOPPING_PATTERN: u32 = OID_DOT11_NDIS_START + 87;
+STRUCT!{struct DOT11_HOPPING_PATTERN_ENTRY {
+    uHoppingPatternIndex: ULONG,
+    uRandomTableFieldNumber: ULONG,
+}}
+pub type PDOT11_HOPPING_PATTERN_ENTRY = *mut DOT11_HOPPING_PATTERN_ENTRY;
+STRUCT!{struct DOT11_HOPPING_PATTERN_ENTRY_LIST {
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11HoppingPatternEntry: [DOT11_HOPPING_PATTERN_ENTRY; 1],
+}}
+pub type PDOT11_HOPPING_PATTERN_ENTRY_LIST = *mut DOT11_HOPPING_PATTERN_ENTRY_LIST;
+pub const OID_DOT11_RANDOM_TABLE_FIELD_NUMBER: u32 = OID_DOT11_NDIS_START + 88;
+pub const OID_DOT11_WPA_TSC: u32 = OID_DOT11_NDIS_START + 89;
+STRUCT!{struct DOT11_WPA_TSC {
+    uReserved: ULONG,
+    dot11OffloadType: DOT11_OFFLOAD_TYPE,
+    hOffload: HANDLE,
+    dot11IV48Counter: DOT11_IV48_COUNTER,
+}}
+pub type PDOT11_WPA_TSC = *mut DOT11_WPA_TSC;
+pub const OID_DOT11_RSSI_RANGE: u32 = OID_DOT11_NDIS_START + 90;
+STRUCT!{struct DOT11_RSSI_RANGE {
+    dot11PhyType: DOT11_PHY_TYPE,
+    uRSSIMin: ULONG,
+    uRSSIMax: ULONG,
+}}
+pub type PDOT11_RSSI_RANGE = *mut DOT11_RSSI_RANGE;
+pub const OID_DOT11_RF_USAGE: u32 = OID_DOT11_NDIS_START + 91;
+pub const OID_DOT11_NIC_SPECIFIC_EXTENSION: u32 = OID_DOT11_NDIS_START + 92;
+STRUCT!{struct DOT11_NIC_SPECIFIC_EXTENSION {
+    uBufferLength: ULONG,
+    uTotalBufferLength: ULONG,
+    ucBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_NIC_SPECIFIC_EXTENSION = *mut DOT11_NIC_SPECIFIC_EXTENSION;
+pub const OID_DOT11_AP_JOIN_REQUEST: u32 = OID_DOT11_NDIS_START + 93;
+STRUCT!{struct DOT11_AP_JOIN_REQUEST {
+    uJoinFailureTimeout: ULONG,
+    OperationalRateSet: DOT11_RATE_SET,
+    uChCenterFrequency: ULONG,
+    dot11BSSDescription: DOT11_BSS_DESCRIPTION,
+}}
+pub type PDOT11_AP_JOIN_REQUEST = *mut DOT11_AP_JOIN_REQUEST;
+pub const OID_DOT11_ERP_PBCC_OPTION_IMPLEMENTED: u32 = OID_DOT11_NDIS_START + 94;
+pub const OID_DOT11_ERP_PBCC_OPTION_ENABLED: u32 = OID_DOT11_NDIS_START + 95;
+pub const OID_DOT11_DSSS_OFDM_OPTION_IMPLEMENTED: u32 = OID_DOT11_NDIS_START + 96;
+pub const OID_DOT11_DSSS_OFDM_OPTION_ENABLED: u32 = OID_DOT11_NDIS_START + 97;
+pub const OID_DOT11_SHORT_SLOT_TIME_OPTION_IMPLEMENTED: u32 = OID_DOT11_NDIS_START + 98;
+pub const OID_DOT11_SHORT_SLOT_TIME_OPTION_ENABLED: u32 = OID_DOT11_NDIS_START + 99;
+pub const OID_DOT11_MAX_MAC_ADDRESS_STATES: u32 = OID_DOT11_NDIS_START + 100;
+pub const OID_DOT11_RECV_SENSITIVITY_LIST: u32 = OID_DOT11_NDIS_START + 101;
+STRUCT!{struct DOT11_RECV_SENSITIVITY {
+    ucDataRate: UCHAR,
+    lRSSIMin: LONG,
+    lRSSIMax: LONG,
+}}
+pub type PDOT11_RECV_SENSITIVITY = *mut DOT11_RECV_SENSITIVITY;
+UNION!{union DOT11_RECV_SENSITIVITY_LIST_u {
+    [u32; 1],
+    dot11PhyType dot11PhyType_mut: DOT11_PHY_TYPE,
+    uPhyId uPhyId_mut: ULONG,
+}}
+STRUCT!{struct DOT11_RECV_SENSITIVITY_LIST {
+    u: DOT11_RECV_SENSITIVITY_LIST_u,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11RecvSensitivity: [DOT11_RECV_SENSITIVITY; 1],
+}}
+pub type PDOT11_RECV_SENSITIVITY_LIST = *mut DOT11_RECV_SENSITIVITY_LIST;
+pub const OID_DOT11_WME_IMPLEMENTED: u32 = OID_DOT11_NDIS_START + 102;
+pub const OID_DOT11_WME_ENABLED: u32 = OID_DOT11_NDIS_START + 103;
+pub const OID_DOT11_WME_AC_PARAMETERS: u32 = OID_DOT11_NDIS_START + 104;
+ENUM!{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 = 4,
+}}
+pub type PDOT11_AC_PARAM = *mut DOT11_AC_PARAM;
+STRUCT!{struct DOT11_WME_AC_PARAMETERS {
+    ucAccessCategoryIndex: UCHAR,
+    ucAIFSN: UCHAR,
+    ucECWmin: UCHAR,
+    ucECWmax: UCHAR,
+    usTXOPLimit: USHORT,
+}}
+pub type PDOT11_WME_AC_PARAMETERS = *mut DOT11_WME_AC_PARAMETERS;
+STRUCT!{struct DOT11_WME_AC_PARAMETERS_LIST {
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11WMEACParameters: [DOT11_WME_AC_PARAMETERS; 1],
+}}
+pub type PDOT11_WME_AC_PARAMETERS_LIST = *mut DOT11_WME_AC_PARAMETERS_LIST;
+pub const OID_DOT11_WME_UPDATE_IE: u32 = OID_DOT11_NDIS_START + 105;
+STRUCT!{struct DOT11_WME_UPDATE_IE {
+    uParamElemMinBeaconIntervals: ULONG,
+    uWMEInfoElemOffset: ULONG,
+    uWMEInfoElemLength: ULONG,
+    uWMEParamElemOffset: ULONG,
+    uWMEParamElemLength: ULONG,
+    ucBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_WME_UPDATE_IE = *mut DOT11_WME_UPDATE_IE;
+pub const OID_DOT11_QOS_TX_QUEUES_SUPPORTED: u32 = OID_DOT11_NDIS_START + 106;
+pub const OID_DOT11_QOS_TX_DURATION: u32 = OID_DOT11_NDIS_START + 107;
+STRUCT!{struct DOT11_QOS_TX_DURATION {
+    uNominalMSDUSize: ULONG,
+    uMinPHYRate: ULONG,
+    uDuration: ULONG,
+}}
+pub type PDOT11_QOS_TX_DURATION = *mut DOT11_QOS_TX_DURATION;
+pub const OID_DOT11_QOS_TX_MEDIUM_TIME: u32 = OID_DOT11_NDIS_START + 108;
+STRUCT!{struct DOT11_QOS_TX_MEDIUM_TIME {
+    dot11PeerAddress: DOT11_MAC_ADDRESS,
+    ucQoSPriority: UCHAR,
+    uMediumTimeAdmited: ULONG,
+}}
+pub type PDOT11_QOS_TX_MEDIUM_TIME = *mut DOT11_QOS_TX_MEDIUM_TIME;
+pub const OID_DOT11_SUPPORTED_OFDM_FREQUENCY_LIST: u32 = OID_DOT11_NDIS_START + 109;
+STRUCT!{struct DOT11_SUPPORTED_OFDM_FREQUENCY {
+    uCenterFrequency: ULONG,
+}}
+pub type PDOT11_SUPPORTED_OFDM_FREQUENCY = *mut DOT11_SUPPORTED_OFDM_FREQUENCY;
+STRUCT!{struct DOT11_SUPPORTED_OFDM_FREQUENCY_LIST {
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11SupportedOFDMFrequency: [DOT11_SUPPORTED_OFDM_FREQUENCY; 1],
+}}
+pub type PDOT11_SUPPORTED_OFDM_FREQUENCY_LIST = *mut DOT11_SUPPORTED_OFDM_FREQUENCY_LIST;
+pub const OID_DOT11_SUPPORTED_DSSS_CHANNEL_LIST: u32 = OID_DOT11_NDIS_START + 110;
+STRUCT!{struct DOT11_SUPPORTED_DSSS_CHANNEL {
+    uChannel: ULONG,
+}}
+pub type PDOT11_SUPPORTED_DSSS_CHANNEL = *mut DOT11_SUPPORTED_DSSS_CHANNEL;
+STRUCT!{struct DOT11_SUPPORTED_DSSS_CHANNEL_LIST {
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11SupportedDSSSChannel: [DOT11_SUPPORTED_DSSS_CHANNEL; 1],
+}}
+pub type PDOT11_SUPPORTED_DSSS_CHANNEL_LIST = *mut DOT11_SUPPORTED_DSSS_CHANNEL_LIST;
+STRUCT!{struct DOT11_BYTE_ARRAY {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfBytes: ULONG,
+    uTotalNumOfBytes: ULONG,
+    ucBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_BYTE_ARRAY = *mut DOT11_BYTE_ARRAY;
+pub const OID_DOT11_AUTO_CONFIG_ENABLED: u32 =
+    NWF_DEFINE_OID!(120, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const DOT11_PHY_AUTO_CONFIG_ENABLED_FLAG: ULONG = 0x00000001;
+pub const DOT11_MAC_AUTO_CONFIG_ENABLED_FLAG: ULONG = 0x00000002;
+pub const OID_DOT11_ENUM_BSS_LIST: u32 =
+    NWF_DEFINE_OID!(121, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const DOT11_BSS_ENTRY_BYTE_ARRAY_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO_FHSS {
+    uHopPattern: ULONG,
+    uHopSet: ULONG,
+    uDwellTime: ULONG,
+}}
+UNION!{union DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO {
+    [u32; 3],
+    uChCenterFrequency uChCenterFrequency_mut: ULONG,
+    FHSS FHSS_mut: DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO_FHSS,
+}}
+pub type PDOT11_BSS_ENTRY_PHY_SPECIFIC_INFO = *mut DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO;
+STRUCT!{struct DOT11_BSS_ENTRY {
+    uPhyId: ULONG,
+    PhySpecificInfo: DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO,
+    dot11BSSID: DOT11_MAC_ADDRESS,
+    dot11BSSType: DOT11_BSS_TYPE,
+    lRSSI: LONG,
+    uLinkQuality: ULONG,
+    bInRegDomain: BOOLEAN,
+    usBeaconPeriod: USHORT,
+    ullTimestamp: ULONGLONG,
+    ullHostTimestamp: ULONGLONG,
+    usCapabilityInformation: USHORT,
+    uBufferLength: ULONG,
+    ucBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_BSS_ENTRY = *mut DOT11_BSS_ENTRY;
+pub const OID_DOT11_FLUSH_BSS_LIST: u32 =
+    NWF_DEFINE_OID!(122, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_POWER_MGMT_REQUEST: u32 =
+    NWF_DEFINE_OID!(123, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const DOT11_POWER_SAVING_NO_POWER_SAVING: ULONG = 0;
+pub const DOT11_POWER_SAVING_FAST_PSP: ULONG = 8;
+pub const DOT11_POWER_SAVING_MAX_PSP: ULONG = 16;
+pub const DOT11_POWER_SAVING_MAXIMUM_LEVEL: ULONG = 24;
+pub const OID_DOT11_DESIRED_SSID_LIST: u32 =
+    NWF_DEFINE_OID!(124, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_SSID_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    SSIDs: [DOT11_SSID; 1],
+}}
+pub type PDOT11_SSID_LIST = *mut DOT11_SSID_LIST;
+pub const DOT11_SSID_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST: u32 =
+    NWF_DEFINE_OID!(125, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_MAC_ADDRESS_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    MacAddrs: [DOT11_MAC_ADDRESS; 1],
+}}
+pub type PDOT11_MAC_ADDRESS_LIST = *mut DOT11_MAC_ADDRESS_LIST;
+pub const DOT11_MAC_ADDRESS_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_DESIRED_BSSID_LIST: u32 =
+    NWF_DEFINE_OID!(126, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_DESIRED_BSS_TYPE: u32 =
+    NWF_DEFINE_OID!(127, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_PMKID_LIST: u32 = NWF_DEFINE_OID!(128, NWF_OPERATIONAL_OID, NWF_OPTIONAL_OID);
+pub type DOT11_PMKID_VALUE = [UCHAR; 16];
+STRUCT!{struct DOT11_PMKID_ENTRY {
+    BSSID: DOT11_MAC_ADDRESS,
+    PMKID: DOT11_PMKID_VALUE,
+    uFlags: ULONG,
+}}
+pub type PDOT11_PMKID_ENTRY = *mut DOT11_PMKID_ENTRY;
+STRUCT!{struct DOT11_PMKID_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    PMKIDs: [DOT11_PMKID_ENTRY; 1],
+}}
+pub type PDOT11_PMKID_LIST = *mut DOT11_PMKID_LIST;
+pub const DOT11_PMKID_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_CONNECT_REQUEST: u32 =
+    NWF_DEFINE_OID!(129, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_EXCLUDE_UNENCRYPTED: u32 =
+    NWF_DEFINE_OID!(130, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_STATISTICS: u32 =
+    NWF_DEFINE_OID!(131, NWF_STATISTICS_OID, NWF_MANDATORY_OID);
+pub const DOT11_STATISTICS_UNKNOWN: ULONGLONG = -1i64 as u64;
+STRUCT!{struct DOT11_PHY_FRAME_STATISTICS {
+    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: ULONGLONG,
+}}
+pub type PDOT11_PHY_FRAME_STATISTICS = *mut DOT11_PHY_FRAME_STATISTICS;
+STRUCT!{struct DOT11_MAC_FRAME_STATISTICS {
+    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: ULONGLONG,
+}}
+pub type PDOT11_MAC_FRAME_STATISTICS = *mut DOT11_MAC_FRAME_STATISTICS;
+STRUCT!{struct DOT11_STATISTICS {
+    Header: NDIS_OBJECT_HEADER,
+    ullFourWayHandshakeFailures: ULONGLONG,
+    ullTKIPCounterMeasuresInvoked: ULONGLONG,
+    ullReserved: ULONGLONG,
+    MacUcastCounters: DOT11_MAC_FRAME_STATISTICS,
+    MacMcastCounters: DOT11_MAC_FRAME_STATISTICS,
+    PhyCounters: [DOT11_PHY_FRAME_STATISTICS; 1],
+}}
+pub type PDOT11_STATISTICS = *mut DOT11_STATISTICS;
+pub const DOT11_STATISTICS_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_PRIVACY_EXEMPTION_LIST: u32 =
+    NWF_DEFINE_OID!(132, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_PRIVACY_EXEMPTION {
+    usEtherType: USHORT,
+    usExemptionActionType: USHORT,
+    usExemptionPacketType: USHORT,
+}}
+pub type PDOT11_PRIVACY_EXEMPTION = *mut DOT11_PRIVACY_EXEMPTION;
+pub const DOT11_EXEMPT_NO_EXEMPTION: USHORT = 0;
+pub const DOT11_EXEMPT_ALWAYS: USHORT = 1;
+pub const DOT11_EXEMPT_ON_KEY_MAPPING_KEY_UNAVAILABLE: USHORT = 2;
+pub const DOT11_EXEMPT_UNICAST: USHORT = 1;
+pub const DOT11_EXEMPT_MULTICAST: USHORT = 2;
+pub const DOT11_EXEMPT_BOTH: USHORT = 3;
+STRUCT!{struct DOT11_PRIVACY_EXEMPTION_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    PrivacyExemptionEntries: [DOT11_PRIVACY_EXEMPTION; 1],
+}}
+pub type PDOT11_PRIVACY_EXEMPTION_LIST = *mut DOT11_PRIVACY_EXEMPTION_LIST;
+pub const DOT11_PRIVACY_EXEMPTION_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM: u32 =
+    NWF_DEFINE_OID!(133, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_AUTH_ALGORITHM_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    AlgorithmIds: [DOT11_AUTH_ALGORITHM; 1],
+}}
+pub type PDOT11_AUTH_ALGORITHM_LIST = *mut DOT11_AUTH_ALGORITHM_LIST;
+pub const DOT11_AUTH_ALGORITHM_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR: u32 =
+    NWF_DEFINE_OID!(134, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_AUTH_CIPHER_PAIR_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    AuthCipherPairs: [DOT11_AUTH_CIPHER_PAIR; 1],
+}}
+pub type PDOT11_AUTH_CIPHER_PAIR_LIST = *mut DOT11_AUTH_CIPHER_PAIR_LIST;
+pub const DOT11_AUTH_CIPHER_PAIR_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM: u32 =
+    NWF_DEFINE_OID!(135, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_CIPHER_ALGORITHM_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    AlgorithmIds: [DOT11_CIPHER_ALGORITHM; 1],
+}}
+pub type PDOT11_CIPHER_ALGORITHM_LIST = *mut DOT11_CIPHER_ALGORITHM_LIST;
+pub const DOT11_CIPHER_ALGORITHM_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR: u32 =
+    NWF_DEFINE_OID!(136, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM: u32 =
+    NWF_DEFINE_OID!(137, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_CIPHER_DEFAULT_KEY_ID: u32 =
+    NWF_DEFINE_OID!(138, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_CIPHER_DEFAULT_KEY: u32 =
+    NWF_DEFINE_OID!(139, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_CIPHER_DEFAULT_KEY_VALUE {
+    Header: NDIS_OBJECT_HEADER,
+    uKeyIndex: ULONG,
+    AlgorithmId: DOT11_CIPHER_ALGORITHM,
+    MacAddr: DOT11_MAC_ADDRESS,
+    bDelete: BOOLEAN,
+    bStatic: BOOLEAN,
+    usKeyLength: USHORT,
+    ucKey: [UCHAR; 1],
+}}
+pub type PDOT11_CIPHER_DEFAULT_KEY_VALUE = *mut DOT11_CIPHER_DEFAULT_KEY_VALUE;
+pub const DOT11_CIPHER_DEFAULT_KEY_VALUE_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_KEY_ALGO_TKIP_MIC {
+    ucIV48Counter: [UCHAR; 6],
+    ulTKIPKeyLength: ULONG,
+    ulMICKeyLength: ULONG,
+    ucTKIPMICKeys: [UCHAR; 1],
+}}
+pub type PDOT11_KEY_ALGO_TKIP_MIC = *mut DOT11_KEY_ALGO_TKIP_MIC;
+STRUCT!{struct DOT11_KEY_ALGO_CCMP {
+    ucIV48Counter: [UCHAR; 6],
+    ulCCMPKeyLength: ULONG,
+    ucCCMPKey: [UCHAR; 1],
+}}
+pub type PDOT11_KEY_ALGO_CCMP = *mut DOT11_KEY_ALGO_CCMP;
+STRUCT!{struct DOT11_KEY_ALGO_GCMP {
+    ucIV48Counter: [UCHAR; 6],
+    ulGCMPKeyLength: ULONG,
+    ucGCMPKey: [UCHAR; 1],
+}}
+pub type PDOT11_KEY_ALGO_GCMP = *mut DOT11_KEY_ALGO_GCMP;
+STRUCT!{struct DOT11_KEY_ALGO_BIP {
+    ucIPN: [UCHAR; 6],
+    ulBIPKeyLength: ULONG,
+    ucBIPKey: [UCHAR; 1],
+}}
+pub type PDOT11_KEY_ALGO_BIP = *mut DOT11_KEY_ALGO_BIP;
+pub const OID_DOT11_CIPHER_KEY_MAPPING_KEY: u32 =
+    NWF_DEFINE_OID!(140, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+ENUM!{enum DOT11_DIRECTION {
+    DOT11_DIR_INBOUND = 1,
+    DOT11_DIR_OUTBOUND = 2,
+    DOT11_DIR_BOTH = 3,
+}}
+pub type PDOT11_DIRECTION = *mut DOT11_DIRECTION;
+pub const DOT11_CIPHER_KEY_MAPPING_KEY_VALUE_BYTE_ARRAY_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_CIPHER_KEY_MAPPING_KEY_VALUE {
+    PeerMacAddr: DOT11_MAC_ADDRESS,
+    AlgorithmId: DOT11_CIPHER_ALGORITHM,
+    Direction: DOT11_DIRECTION,
+    bDelete: BOOLEAN,
+    bStatic: BOOLEAN,
+    usKeyLength: USHORT,
+    ucKey: [UCHAR; 1],
+}}
+pub type PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE = *mut DOT11_CIPHER_KEY_MAPPING_KEY_VALUE;
+pub const OID_DOT11_ENUM_ASSOCIATION_INFO: u32 =
+    NWF_DEFINE_OID!(141, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+ENUM!{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,
+}}
+pub type PDOT11_ASSOCIATION_STATE = *mut DOT11_ASSOCIATION_STATE;
+STRUCT!{struct DOT11_ASSOCIATION_INFO_EX {
+    PeerMacAddress: DOT11_MAC_ADDRESS,
+    BSSID: DOT11_MAC_ADDRESS,
+    usCapabilityInformation: USHORT,
+    usListenInterval: USHORT,
+    ucPeerSupportedRates: [UCHAR; 255],
+    usAssociationID: USHORT,
+    dot11AssociationState: DOT11_ASSOCIATION_STATE,
+    dot11PowerMode: DOT11_POWER_MODE,
+    liAssociationUpTime: LARGE_INTEGER,
+    ullNumOfTxPacketSuccesses: ULONGLONG,
+    ullNumOfTxPacketFailures: ULONGLONG,
+    ullNumOfRxPacketSuccesses: ULONGLONG,
+    ullNumOfRxPacketFailures: ULONGLONG,
+}}
+pub type PDOT11_ASSOCIATION_INFO_EX = *mut DOT11_ASSOCIATION_INFO_EX;
+STRUCT!{struct DOT11_ASSOCIATION_INFO_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11AssocInfo: [DOT11_ASSOCIATION_INFO_EX; 1],
+}}
+pub type PDOT11_ASSOCIATION_INFO_LIST = *mut DOT11_ASSOCIATION_INFO_LIST;
+pub const DOT11_ASSOCIATION_INFO_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_DISCONNECT_REQUEST: u32 =
+    NWF_DEFINE_OID!(142, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_UNICAST_USE_GROUP_ENABLED: u32 =
+    NWF_DEFINE_OID!(143, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_HARDWARE_PHY_STATE: u32 =
+    NWF_DEFINE_OID!(144, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_DESIRED_PHY_LIST: u32 =
+    NWF_DEFINE_OID!(145, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_PHY_ID_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    dot11PhyId: [ULONG; 1],
+}}
+pub type PDOT11_PHY_ID_LIST = *mut DOT11_PHY_ID_LIST;
+pub const DOT11_PHY_ID_LIST_REVISION_1: UCHAR = 1;
+pub const DOT11_PHY_ID_ANY: ULONG = 0xffffffff;
+pub const OID_DOT11_CURRENT_PHY_ID: u32 =
+    NWF_DEFINE_OID!(146, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_MEDIA_STREAMING_ENABLED: u32 =
+    NWF_DEFINE_OID!(147, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD: u32 =
+    NWF_DEFINE_OID!(148, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_ACTIVE_PHY_LIST: u32 =
+    NWF_DEFINE_OID!(149, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_EXTSTA_CAPABILITY: u32 =
+    NWF_DEFINE_OID!(150, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_EXTSTA_CAPABILITY {
+    Header: NDIS_OBJECT_HEADER,
+    uScanSSIDListSize: ULONG,
+    uDesiredBSSIDListSize: ULONG,
+    uDesiredSSIDListSize: ULONG,
+    uExcludedMacAddressListSize: ULONG,
+    uPrivacyExemptionListSize: ULONG,
+    uKeyMappingTableSize: ULONG,
+    uDefaultKeyTableSize: ULONG,
+    uWEPKeyValueMaxLength: ULONG,
+    uPMKIDCacheSize: ULONG,
+    uMaxNumPerSTADefaultKeyTables: ULONG,
+}}
+pub type PDOT11_EXTSTA_CAPABILITY = *mut DOT11_EXTSTA_CAPABILITY;
+pub const DOT11_EXTSTA_CAPABILITY_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_DATA_RATE_MAPPING_TABLE: u32 =
+    NWF_DEFINE_OID!(151, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_DATA_RATE_MAPPING_ENTRY {
+    ucDataRateIndex: UCHAR,
+    ucDataRateFlag: UCHAR,
+    usDataRateValue: USHORT,
+}}
+pub type PDOT11_DATA_RATE_MAPPING_ENTRY = *mut DOT11_DATA_RATE_MAPPING_ENTRY;
+STRUCT!{struct DOT11_DATA_RATE_MAPPING_TABLE {
+    Header: NDIS_OBJECT_HEADER,
+    uDataRateMappingLength: ULONG,
+    DataRateMappingEntries: [DOT11_DATA_RATE_MAPPING_ENTRY; DOT11_RATE_SET_MAX_LENGTH],
+}}
+pub type PDOT11_DATA_RATE_MAPPING_TABLE = *mut DOT11_DATA_RATE_MAPPING_TABLE;
+pub const DOT11_DATA_RATE_MAPPING_TABLE_REVISION_1: UCHAR = 1;
+pub const DOT11_DATA_RATE_NON_STANDARD: UCHAR = 0x01;
+pub const DOT11_DATA_RATE_INDEX_MASK: UCHAR = 0x7f;
+pub const OID_DOT11_SUPPORTED_COUNTRY_OR_REGION_STRING: u32 =
+    NWF_DEFINE_OID!(152, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_COUNTRY_OR_REGION_STRING_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    CountryOrRegionStrings: [DOT11_COUNTRY_OR_REGION_STRING; 1],
+}}
+pub type PDOT11_COUNTRY_OR_REGION_STRING_LIST = *mut DOT11_COUNTRY_OR_REGION_STRING_LIST;
+pub const DOT11_COUNTRY_OR_REGION_STRING_LIST_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_DESIRED_COUNTRY_OR_REGION_STRING: u32 =
+    NWF_DEFINE_OID!(153, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_PORT_STATE_NOTIFICATION: u32 =
+    NWF_DEFINE_OID!(154, NWF_OPERATIONAL_OID, NWF_OPTIONAL_OID);
+STRUCT!{struct DOT11_PORT_STATE_NOTIFICATION {
+    Header: NDIS_OBJECT_HEADER,
+    PeerMac: DOT11_MAC_ADDRESS,
+    bOpen: BOOLEAN,
+}}
+pub type PDOT11_PORT_STATE_NOTIFICATION = *mut DOT11_PORT_STATE_NOTIFICATION;
+pub const DOT11_PORT_STATE_NOTIFICATION_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_IBSS_PARAMS: u32 =
+    NWF_DEFINE_OID!(155, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_IBSS_PARAMS {
+    Header: NDIS_OBJECT_HEADER,
+    bJoinOnly: BOOLEAN,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_IBSS_PARAMS = *mut DOT11_IBSS_PARAMS;
+pub const DOT11_IBSS_PARAMS_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_QOS_PARAMS: u32 = NWF_DEFINE_OID!(156, NWF_OPERATIONAL_OID, NWF_OPTIONAL_OID);
+STRUCT!{struct DOT11_QOS_PARAMS {
+    Header: NDIS_OBJECT_HEADER,
+    ucEnabledQoSProtocolFlags: UCHAR,
+}}
+pub type PDOT11_QOS_PARAMS = *mut DOT11_QOS_PARAMS;
+pub const DOT11_QOS_PARAMS_REVISION_1: UCHAR = 1;
+pub const DOT11_QOS_PROTOCOL_FLAG_WMM: UCHAR = 0x01;
+pub const DOT11_QOS_PROTOCOL_FLAG_11E: UCHAR = 0x02;
+pub const OID_DOT11_SAFE_MODE_ENABLED: u32 =
+    NWF_DEFINE_OID!(157, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_HIDDEN_NETWORK_ENABLED: u32 =
+    NWF_DEFINE_OID!(158, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_ASSOCIATION_PARAMS: u32 =
+    NWF_DEFINE_OID!(159, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_ASSOCIATION_PARAMS {
+    Header: NDIS_OBJECT_HEADER,
+    BSSID: DOT11_MAC_ADDRESS,
+    uAssocRequestIEsOffset: ULONG,
+    uAssocRequestIEsLength: ULONG,
+}}
+pub type PDOT11_ASSOCIATION_PARAMS = *mut DOT11_ASSOCIATION_PARAMS;
+pub const DOT11_ASSOCIATION_PARAMS_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_SAFE_MODE_HT_ENABLED: u32 =
+    NWF_DEFINE_OID!(160, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
+pub const DOT11_MAX_NUM_OF_FRAGMENTS: USHORT = 16;
+pub const DOT11_PRIORITY_CONTENTION: i32 = 0;
+pub const DOT11_PRIORITY_CONTENTION_FREE: i32 = 1;
+pub const DOT11_SERVICE_CLASS_REORDERABLE_MULTICAST: i32 = 0;
+pub const DOT11_SERVICE_CLASS_STRICTLY_ORDERED: i32 = 1;
+pub const DOT11_FLAGS_80211B_SHORT_PREAMBLE: u32 = 0x00000001;
+pub const DOT11_FLAGS_80211B_PBCC: u32 = 0x00000002;
+pub const DOT11_FLAGS_80211B_CHANNEL_AGILITY: u32 = 0x00000004;
+pub const DOT11_FLAGS_PS_ON: u32 = 0x00000008;
+pub const DOT11_FLAGS_80211G_DSSS_OFDM: u32 = 0x00000010;
+pub const DOT11_FLAGS_80211G_USE_PROTECTION: u32 = 0x00000020;
+pub const DOT11_FLAGS_80211G_NON_ERP_PRESENT: u32 = 0x00000040;
+pub const DOT11_FLAGS_80211G_BARKER_PREAMBLE_MODE: u32 = 0x00000080;
+pub const DOT11_WME_PACKET: u32 = 0x00000100;
+STRUCT!{struct DOT11_FRAGMENT_DESCRIPTOR {
+    uOffset: ULONG,
+    uLength: ULONG,
+}}
+pub type PDOT11_FRAGMENT_DESCRIPTOR = *mut DOT11_FRAGMENT_DESCRIPTOR;
+STRUCT!{struct DOT11_PER_MSDU_COUNTERS {
+    uTransmittedFragmentCount: ULONG,
+    uRetryCount: ULONG,
+    uRTSSuccessCount: ULONG,
+    uRTSFailureCount: ULONG,
+    uACKFailureCount: ULONG,
+}}
+pub type PDOT11_PER_MSDU_COUNTERS = *mut DOT11_PER_MSDU_COUNTERS;
+STRUCT!{struct DOT11_HRDSSS_PHY_ATTRIBUTES {
+    bShortPreambleOptionImplemented: BOOLEAN,
+    bPBCCOptionImplemented: BOOLEAN,
+    bChannelAgilityPresent: BOOLEAN,
+    uHRCCAModeSupported: ULONG,
+}}
+pub type PDOT11_HRDSSS_PHY_ATTRIBUTES = *mut DOT11_HRDSSS_PHY_ATTRIBUTES;
+STRUCT!{struct DOT11_OFDM_PHY_ATTRIBUTES {
+    uFrequencyBandsSupported: ULONG,
+}}
+pub type PDOT11_OFDM_PHY_ATTRIBUTES = *mut DOT11_OFDM_PHY_ATTRIBUTES;
+STRUCT!{struct DOT11_ERP_PHY_ATTRIBUTES {
+    HRDSSSAttributes: DOT11_HRDSSS_PHY_ATTRIBUTES,
+    bERPPBCCOptionImplemented: BOOLEAN,
+    bDSSSOFDMOptionImplemented: BOOLEAN,
+    bShortSlotTimeOptionImplemented: BOOLEAN,
+}}
+pub type PDOT11_ERP_PHY_ATTRIBUTES = *mut DOT11_ERP_PHY_ATTRIBUTES;
+pub const DOT11_PHY_ATTRIBUTES_REVISION_1: UCHAR = 1;
+UNION!{union DOT11_PHY_ATTRIBUTES_u {
+    [u32; 3],
+    HRDSSSAttributes HRDSSSAttributes_mut: DOT11_HRDSSS_PHY_ATTRIBUTES,
+    OFDMAttributes OFDMAttributes_mut: DOT11_OFDM_PHY_ATTRIBUTES,
+    ERPAttributes ERPAttributes_mut: DOT11_ERP_PHY_ATTRIBUTES,
+}}
+STRUCT!{struct DOT11_PHY_ATTRIBUTES {
+    Header: NDIS_OBJECT_HEADER,
+    PhyType: DOT11_PHY_TYPE,
+    bHardwarePhyState: BOOLEAN,
+    bSoftwarePhyState: BOOLEAN,
+    bCFPollable: BOOLEAN,
+    uMPDUMaxLength: ULONG,
+    TempType: DOT11_TEMP_TYPE,
+    DiversitySupport: DOT11_DIVERSITY_SUPPORT,
+    u: DOT11_PHY_ATTRIBUTES_u,
+    uNumberSupportedPowerLevels: ULONG,
+    TxPowerLevels: [ULONG; 8],
+    uNumDataRateMappingEntries: ULONG,
+    DataRateMappingEntries: [DOT11_DATA_RATE_MAPPING_ENTRY; DOT11_RATE_SET_MAX_LENGTH],
+    SupportedDataRatesValue: DOT11_SUPPORTED_DATA_RATES_VALUE_V2,
+}}
+pub type PDOT11_PHY_ATTRIBUTES = *mut DOT11_PHY_ATTRIBUTES;
+pub const DOT11_EXTSTA_ATTRIBUTES_SAFEMODE_OID_SUPPORTED: UINT8 = 0x1;
+pub const DOT11_EXTSTA_ATTRIBUTES_SAFEMODE_CERTIFIED: UINT8 = 0x2;
+pub const DOT11_EXTSTA_ATTRIBUTES_SAFEMODE_RESERVED: UINT8 = 0xC;
+pub const DOT11_EXTSTA_ATTRIBUTES_REVISION_1: UCHAR = 1;
+pub const DOT11_EXTSTA_ATTRIBUTES_REVISION_2: UCHAR = 2;
+pub const DOT11_EXTSTA_ATTRIBUTES_REVISION_3: UCHAR = 3;
+pub const DOT11_EXTSTA_ATTRIBUTES_REVISION_4: UCHAR = 4;
+STRUCT!{struct DOT11_EXTSTA_ATTRIBUTES {
+    Header: NDIS_OBJECT_HEADER,
+    uScanSSIDListSize: ULONG,
+    uDesiredBSSIDListSize: ULONG,
+    uDesiredSSIDListSize: ULONG,
+    uExcludedMacAddressListSize: ULONG,
+    uPrivacyExemptionListSize: ULONG,
+    uKeyMappingTableSize: ULONG,
+    uDefaultKeyTableSize: ULONG,
+    uWEPKeyValueMaxLength: ULONG,
+    uPMKIDCacheSize: ULONG,
+    uMaxNumPerSTADefaultKeyTables: ULONG,
+    bStrictlyOrderedServiceClassImplemented: BOOLEAN,
+    ucSupportedQoSProtocolFlags: UCHAR,
+    bSafeModeImplemented: BOOLEAN,
+    uNumSupportedCountryOrRegionStrings: ULONG,
+    pSupportedCountryOrRegionStrings: PDOT11_COUNTRY_OR_REGION_STRING,
+    uInfraNumSupportedUcastAlgoPairs: ULONG,
+    pInfraSupportedUcastAlgoPairs: PDOT11_AUTH_CIPHER_PAIR,
+    uInfraNumSupportedMcastAlgoPairs: ULONG,
+    pInfraSupportedMcastAlgoPairs: PDOT11_AUTH_CIPHER_PAIR,
+    uAdhocNumSupportedUcastAlgoPairs: ULONG,
+    pAdhocSupportedUcastAlgoPairs: PDOT11_AUTH_CIPHER_PAIR,
+    uAdhocNumSupportedMcastAlgoPairs: ULONG,
+    pAdhocSupportedMcastAlgoPairs: PDOT11_AUTH_CIPHER_PAIR,
+    bAutoPowerSaveMode: BOOLEAN,
+    uMaxNetworkOffloadListSize: ULONG,
+    bMFPCapable: BOOLEAN,
+    uInfraNumSupportedMcastMgmtAlgoPairs: ULONG,
+    pInfraSupportedMcastMgmtAlgoPairs: PDOT11_AUTH_CIPHER_PAIR,
+    bNeighborReportSupported: BOOLEAN,
+    bAPChannelReportSupported: BOOLEAN,
+    bActionFramesSupported: BOOLEAN,
+    bANQPQueryOffloadSupported: BOOLEAN,
+    bHESSIDConnectionSupported: BOOLEAN,
+}}
+pub type PDOT11_EXTSTA_ATTRIBUTES = *mut DOT11_EXTSTA_ATTRIBUTES;
+STRUCT!{struct DOT11_RECV_EXTENSION_INFO {
+    uVersion: ULONG,
+    pvReserved: PVOID,
+    dot11PhyType: DOT11_PHY_TYPE,
+    uChCenterFrequency: ULONG,
+    lRSSI: LONG,
+    lRSSIMin: LONG,
+    lRSSIMax: LONG,
+    uRSSI: ULONG,
+    ucPriority: UCHAR,
+    ucDataRate: UCHAR,
+    ucPeerMacAddress: [UCHAR; 6],
+    dwExtendedStatus: ULONG,
+    hWEPOffloadContext: HANDLE,
+    hAuthOffloadContext: HANDLE,
+    usWEPAppliedMask: USHORT,
+    usWPAMSDUPriority: USHORT,
+    dot11LowestIV48Counter: DOT11_IV48_COUNTER,
+    usDot11LeftRWBitMap: USHORT,
+    dot11HighestIV48Counter: DOT11_IV48_COUNTER,
+    usDot11RightRWBitMap: USHORT,
+    usNumberOfMPDUsReceived: USHORT,
+    usNumberOfFragments: USHORT,
+    pNdisPackets: [PVOID; 1],
+}}
+pub type PDOT11_RECV_EXTENSION_INFO = *mut DOT11_RECV_EXTENSION_INFO;
+STRUCT!{struct DOT11_RECV_EXTENSION_INFO_V2 {
+    uVersion: ULONG,
+    pvReserved: PVOID,
+    dot11PhyType: DOT11_PHY_TYPE,
+    uChCenterFrequency: ULONG,
+    lRSSI: LONG,
+    uRSSI: ULONG,
+    ucPriority: UCHAR,
+    ucDataRate: UCHAR,
+    ucPeerMacAddress: [UCHAR; 6],
+    dwExtendedStatus: ULONG,
+    hWEPOffloadContext: HANDLE,
+    hAuthOffloadContext: HANDLE,
+    usWEPAppliedMask: USHORT,
+    usWPAMSDUPriority: USHORT,
+    dot11LowestIV48Counter: DOT11_IV48_COUNTER,
+    usDot11LeftRWBitMap: USHORT,
+    dot11HighestIV48Counter: DOT11_IV48_COUNTER,
+    usDot11RightRWBitMap: USHORT,
+    usNumberOfMPDUsReceived: USHORT,
+    usNumberOfFragments: USHORT,
+    pNdisPackets: [PVOID; 1],
+}}
+pub type PDOT11_RECV_EXTENSION_INFO_V2 = *mut DOT11_RECV_EXTENSION_INFO_V2;
+pub const DOT11_STATUS_SUCCESS: NDIS_STATUS = 0x00000001;
+pub const DOT11_STATUS_RETRY_LIMIT_EXCEEDED: NDIS_STATUS = 0x00000002;
+pub const DOT11_STATUS_UNSUPPORTED_PRIORITY: NDIS_STATUS = 0x00000004;
+pub const DOT11_STATUS_UNSUPPORTED_SERVICE_CLASS: NDIS_STATUS = 0x00000008;
+pub const DOT11_STATUS_UNAVAILABLE_PRIORITY: NDIS_STATUS = 0x00000010;
+pub const DOT11_STATUS_UNAVAILABLE_SERVICE_CLASS: NDIS_STATUS = 0x00000020;
+pub const DOT11_STATUS_XMIT_MSDU_TIMER_EXPIRED: NDIS_STATUS = 0x00000040;
+pub const DOT11_STATUS_UNAVAILABLE_BSS: NDIS_STATUS = 0x00000080;
+pub const DOT11_STATUS_EXCESSIVE_DATA_LENGTH: NDIS_STATUS = 0x00000100;
+pub const DOT11_STATUS_ENCRYPTION_FAILED: NDIS_STATUS = 0x00000200;
+pub const DOT11_STATUS_WEP_KEY_UNAVAILABLE: NDIS_STATUS = 0x00000400;
+pub const DOT11_STATUS_ICV_VERIFIED: NDIS_STATUS = 0x00000800;
+pub const DOT11_STATUS_PACKET_REASSEMBLED: NDIS_STATUS = 0x00001000;
+pub const DOT11_STATUS_PACKET_NOT_REASSEMBLED: NDIS_STATUS = 0x00002000;
+pub const DOT11_STATUS_GENERATE_AUTH_FAILED: NDIS_STATUS = 0x00004000;
+pub const DOT11_STATUS_AUTH_NOT_VERIFIED: NDIS_STATUS = 0x00008000;
+pub const DOT11_STATUS_AUTH_VERIFIED: NDIS_STATUS = 0x00010000;
+pub const DOT11_STATUS_AUTH_FAILED: NDIS_STATUS = 0x00020000;
+pub const DOT11_STATUS_PS_LIFETIME_EXPIRED: NDIS_STATUS = 0x00040000;
+STRUCT!{struct DOT11_STATUS_INDICATION {
+    uStatusType: ULONG,
+    ndisStatus: NDIS_STATUS,
+}}
+pub type PDOT11_STATUS_INDICATION = *mut DOT11_STATUS_INDICATION;
+pub const DOT11_STATUS_RESET_CONFIRM: ULONG = 4;
+pub const DOT11_STATUS_SCAN_CONFIRM: ULONG = 1;
+pub const DOT11_STATUS_JOIN_CONFIRM: ULONG = 2;
+pub const DOT11_STATUS_START_CONFIRM: ULONG = 3;
+pub const DOT11_STATUS_AP_JOIN_CONFIRM: ULONG = 5;
+pub const DOT11_STATUS_MPDU_MAX_LENGTH_CHANGED: ULONG = 6;
+STRUCT!{struct DOT11_MPDU_MAX_LENGTH_INDICATION {
+    Header: NDIS_OBJECT_HEADER,
+    uPhyId: ULONG,
+    uMPDUMaxLength: ULONG,
+}}
+pub type PDOT11_MPDU_MAX_LENGTH_INDICATION = *mut DOT11_MPDU_MAX_LENGTH_INDICATION;
+pub const DOT11_MPDU_MAX_LENGTH_INDICATION_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_ASSOCIATION_START_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    MacAddr: DOT11_MAC_ADDRESS,
+    SSID: DOT11_SSID,
+    uIHVDataOffset: ULONG,
+    uIHVDataSize: ULONG,
+}}
+pub type PDOT11_ASSOCIATION_START_PARAMETERS = *mut DOT11_ASSOCIATION_START_PARAMETERS;
+pub const DOT11_ASSOCIATION_START_PARAMETERS_REVISION_1: UCHAR = 1;
+pub const DOT11_ENCAP_RFC_1042: USHORT = 1;
+pub const DOT11_ENCAP_802_1H: USHORT = 2;
+STRUCT!{struct DOT11_ENCAP_ENTRY {
+    usEtherType: USHORT,
+    usEncapType: USHORT,
+}}
+pub type PDOT11_ENCAP_ENTRY = *mut DOT11_ENCAP_ENTRY;
+ENUM!{enum DOT11_DS_INFO {
+    DOT11_DS_CHANGED = 0,
+    DOT11_DS_UNCHANGED = 1,
+    DOT11_DS_UNKNOWN = 2,
+}}
+pub type PDOT11_DS_INFO = *mut DOT11_DS_INFO;
+pub type DOT11_ASSOC_STATUS = ULONG;
+pub const DOT11_ASSOC_STATUS_SUCCESS: DOT11_ASSOC_STATUS = 0;
+pub const DOT11_ASSOC_STATUS_FAILURE: DOT11_ASSOC_STATUS = 0x00000001;
+pub const DOT11_ASSOC_STATUS_UNREACHABLE: DOT11_ASSOC_STATUS = 0x00000002;
+pub const DOT11_ASSOC_STATUS_RADIO_OFF: DOT11_ASSOC_STATUS = 0x00000003;
+pub const DOT11_ASSOC_STATUS_PHY_DISABLED: DOT11_ASSOC_STATUS = 0x00000004;
+pub const DOT11_ASSOC_STATUS_CANCELLED: DOT11_ASSOC_STATUS = 0x00000005;
+pub const DOT11_ASSOC_STATUS_CANDIDATE_LIST_EXHAUSTED: DOT11_ASSOC_STATUS = 0x00000006;
+pub const DOT11_ASSOC_STATUS_DISASSOCIATED_BY_OS: DOT11_ASSOC_STATUS = 0x00000007;
+pub const DOT11_ASSOC_STATUS_DISASSOCIATED_BY_ROAMING: DOT11_ASSOC_STATUS = 0x00000008;
+pub const DOT11_ASSOC_STATUS_DISASSOCIATED_BY_RESET: DOT11_ASSOC_STATUS = 0x00000009;
+pub const DOT11_ASSOC_STATUS_SYSTEM_ERROR: DOT11_ASSOC_STATUS = 0x0000000a;
+pub const DOT11_ASSOC_STATUS_ROAMING_BETTER_AP_FOUND: DOT11_ASSOC_STATUS = 0x0000000b;
+pub const DOT11_ASSOC_STATUS_ROAMING_ASSOCIATION_LOST: DOT11_ASSOC_STATUS = 0x0000000c;
+pub const DOT11_ASSOC_STATUS_ROAMING_ADHOC: DOT11_ASSOC_STATUS = 0x0000000d;
+pub const DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED: DOT11_ASSOC_STATUS = 0x00010000;
+pub const DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED_START: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED;
+pub const DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED_END: DOT11_ASSOC_STATUS = 0x0001ffff;
+pub const DOT11_ASSOC_STATUS_PEER_DISASSOCIATED: DOT11_ASSOC_STATUS = 0x00020000;
+pub const DOT11_ASSOC_STATUS_PEER_DISASSOCIATED_START: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_PEER_DISASSOCIATED;
+pub const DOT11_ASSOC_STATUS_PEER_DISASSOCIATED_END: DOT11_ASSOC_STATUS = 0x0002ffff;
+pub const DOT11_ASSOC_STATUS_ASSOCIATION_RESPONSE: DOT11_ASSOC_STATUS = 0x00030000;
+pub const DOT11_ASSOC_STATUS_ASSOCIATION_RESPONSE_START: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_ASSOCIATION_RESPONSE;
+pub const DOT11_ASSOC_STATUS_ASSOCIATION_RESPONSE_END: DOT11_ASSOC_STATUS = 0x0003ffff;
+pub const DOT11_ASSOC_STATUS_REASON_CODE_MASK: DOT11_ASSOC_STATUS = 0xffff;
+pub const DOT11_ASSOC_STATUS_IHV_START: DOT11_ASSOC_STATUS = 0x80000000;
+pub const DOT11_ASSOC_STATUS_IHV_END: DOT11_ASSOC_STATUS = 0xffffffff;
+STRUCT!{struct DOT11_ASSOCIATION_COMPLETION_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    MacAddr: DOT11_MAC_ADDRESS,
+    uStatus: DOT11_ASSOC_STATUS,
+    bReAssocReq: BOOLEAN,
+    bReAssocResp: BOOLEAN,
+    uAssocReqOffset: ULONG,
+    uAssocReqSize: ULONG,
+    uAssocRespOffset: ULONG,
+    uAssocRespSize: ULONG,
+    uBeaconOffset: ULONG,
+    uBeaconSize: ULONG,
+    uIHVDataOffset: ULONG,
+    uIHVDataSize: ULONG,
+    AuthAlgo: DOT11_AUTH_ALGORITHM,
+    UnicastCipher: DOT11_CIPHER_ALGORITHM,
+    MulticastCipher: DOT11_CIPHER_ALGORITHM,
+    uActivePhyListOffset: ULONG,
+    uActivePhyListSize: ULONG,
+    bFourAddressSupported: BOOLEAN,
+    bPortAuthorized: BOOLEAN,
+    ucActiveQoSProtocol: UCHAR,
+    DSInfo: DOT11_DS_INFO,
+    uEncapTableOffset: ULONG,
+    uEncapTableSize: ULONG,
+    MulticastMgmtCipher: DOT11_CIPHER_ALGORITHM,
+    uAssocComebackTime: ULONG,
+}}
+pub type PDOT11_ASSOCIATION_COMPLETION_PARAMETERS = *mut DOT11_ASSOCIATION_COMPLETION_PARAMETERS;
+pub const DOT11_ASSOCIATION_COMPLETION_PARAMETERS_REVISION_1: UCHAR = 1;
+pub const DOT11_ASSOCIATION_COMPLETION_PARAMETERS_REVISION_2: UCHAR = 2;
+STRUCT!{struct DOT11_CONNECTION_START_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    BSSType: DOT11_BSS_TYPE,
+    AdhocBSSID: DOT11_MAC_ADDRESS,
+    AdhocSSID: DOT11_SSID,
+}}
+pub type PDOT11_CONNECTION_START_PARAMETERS = *mut DOT11_CONNECTION_START_PARAMETERS;
+pub const DOT11_CONNECTION_START_PARAMETERS_REVISION_1: UCHAR = 1;
+pub const DOT11_CONNECTION_STATUS_SUCCESS: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_SUCCESS;
+pub const DOT11_CONNECTION_STATUS_FAILURE: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_FAILURE;
+pub const DOT11_CONNECTION_STATUS_CANDIDATE_LIST_EXHAUSTED: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_CANDIDATE_LIST_EXHAUSTED;
+pub const DOT11_CONNECTION_STATUS_PHY_POWER_DOWN: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_RADIO_OFF;
+pub const DOT11_CONNECTION_STATUS_CANCELLED: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_CANCELLED;
+pub const DOT11_CONNECTION_STATUS_IHV_START: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_IHV_START;
+pub const DOT11_CONNECTION_STATUS_IHV_END: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_IHV_END;
+STRUCT!{struct DOT11_CONNECTION_COMPLETION_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    uStatus: DOT11_ASSOC_STATUS,
+}}
+pub type PDOT11_CONNECTION_COMPLETION_PARAMETERS = *mut DOT11_CONNECTION_COMPLETION_PARAMETERS;
+pub const DOT11_CONNECTION_COMPLETION_PARAMETERS_REVISION_1: UCHAR = 1;
+pub const DOT11_ROAMING_REASON_BETTER_AP_FOUND: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_ROAMING_BETTER_AP_FOUND;
+pub const DOT11_ROAMING_REASON_ASSOCIATION_LOST: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_ROAMING_ASSOCIATION_LOST;
+pub const DOT11_ROAMING_REASON_ADHOC: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_ROAMING_ADHOC;
+pub const DOT11_ROAMING_REASON_IHV_START: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_IHV_START;
+pub const DOT11_ROAMING_REASON_IHV_END: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_IHV_END;
+STRUCT!{struct DOT11_ROAMING_START_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    AdhocBSSID: DOT11_MAC_ADDRESS,
+    AdhocSSID: DOT11_SSID,
+    uRoamingReason: DOT11_ASSOC_STATUS,
+}}
+pub type PDOT11_ROAMING_START_PARAMETERS = *mut DOT11_ROAMING_START_PARAMETERS;
+pub const DOT11_ROAMING_START_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_ROAMING_COMPLETION_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    uStatus: DOT11_ASSOC_STATUS,
+}}
+pub type PDOT11_ROAMING_COMPLETION_PARAMETERS = *mut DOT11_ROAMING_COMPLETION_PARAMETERS;
+pub const DOT11_ROAMING_COMPLETION_PARAMETERS_REVISION_1: UCHAR = 1;
+pub const DOT11_DISASSOC_REASON_OS: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_DISASSOCIATED_BY_OS;
+pub const DOT11_DISASSOC_REASON_PEER_UNREACHABLE: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_UNREACHABLE;
+pub const DOT11_DISASSOC_REASON_PEER_DEAUTHENTICATED: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED;
+pub const DOT11_DISASSOC_REASON_PEER_DISASSOCIATED: DOT11_ASSOC_STATUS =
+    DOT11_ASSOC_STATUS_PEER_DISASSOCIATED;
+pub const DOT11_DISASSOC_REASON_RADIO_OFF: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_RADIO_OFF;
+pub const DOT11_DISASSOC_REASON_PHY_DISABLED: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_PHY_DISABLED;
+pub const DOT11_DISASSOC_REASON_IHV_START: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_IHV_START;
+pub const DOT11_DISASSOC_REASON_IHV_END: DOT11_ASSOC_STATUS = DOT11_ASSOC_STATUS_IHV_END;
+STRUCT!{struct DOT11_DISASSOCIATION_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    MacAddr: DOT11_MAC_ADDRESS,
+    uReason: DOT11_ASSOC_STATUS,
+    uIHVDataOffset: ULONG,
+    uIHVDataSize: ULONG,
+}}
+pub type PDOT11_DISASSOCIATION_PARAMETERS = *mut DOT11_DISASSOCIATION_PARAMETERS;
+pub const DOT11_DISASSOCIATION_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_TKIPMIC_FAILURE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    bDefaultKeyFailure: BOOLEAN,
+    uKeyIndex: ULONG,
+    PeerMac: DOT11_MAC_ADDRESS,
+}}
+pub type PDOT11_TKIPMIC_FAILURE_PARAMETERS = *mut DOT11_TKIPMIC_FAILURE_PARAMETERS;
+pub const DOT11_TKIPMIC_FAILURE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_PMKID_CANDIDATE_LIST_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    uCandidateListSize: ULONG,
+    uCandidateListOffset: ULONG,
+}}
+pub type PDOT11_PMKID_CANDIDATE_LIST_PARAMETERS = *mut DOT11_PMKID_CANDIDATE_LIST_PARAMETERS;
+pub const DOT11_PMKID_CANDIDATE_LIST_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_BSSID_CANDIDATE {
+    BSSID: DOT11_MAC_ADDRESS,
+    uFlags: ULONG,
+}}
+pub type PDOT11_BSSID_CANDIDATE = *mut DOT11_BSSID_CANDIDATE;
+pub const DOT11_PMKID_CANDIDATE_PREAUTH_ENABLED: ULONG = 0x00000001;
+STRUCT!{struct DOT11_PHY_STATE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    uPhyId: ULONG,
+    bHardwarePhyState: BOOLEAN,
+    bSoftwarePhyState: BOOLEAN,
+}}
+pub type PDOT11_PHY_STATE_PARAMETERS = *mut DOT11_PHY_STATE_PARAMETERS;
+pub const DOT11_PHY_STATE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_LINK_QUALITY_ENTRY {
+    PeerMacAddr: DOT11_MAC_ADDRESS,
+    ucLinkQuality: UCHAR,
+}}
+pub type PDOT11_LINK_QUALITY_ENTRY = *mut DOT11_LINK_QUALITY_ENTRY;
+STRUCT!{struct DOT11_LINK_QUALITY_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    uLinkQualityListSize: ULONG,
+    uLinkQualityListOffset: ULONG,
+}}
+pub type PDOT11_LINK_QUALITY_PARAMETERS = *mut DOT11_LINK_QUALITY_PARAMETERS;
+pub const DOT11_LINK_QUALITY_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_EXTSTA_SEND_CONTEXT {
+    Header: NDIS_OBJECT_HEADER,
+    usExemptionActionType: USHORT,
+    uPhyId: ULONG,
+    uDelayedSleepValue: ULONG,
+    pvMediaSpecificInfo: PVOID,
+    uSendFlags: ULONG,
+}}
+pub type PDOT11_EXTSTA_SEND_CONTEXT = *mut DOT11_EXTSTA_SEND_CONTEXT;
+pub type DOT11_EXTAP_SEND_CONTEXT = DOT11_EXTSTA_SEND_CONTEXT;
+pub type PDOT11_EXTAP_SEND_CONTEXT = *mut DOT11_EXTSTA_SEND_CONTEXT;
+pub const DOT11_EXTSTA_SEND_CONTEXT_REVISION_1: UCHAR = 1;
+pub const DOT11_RECV_FLAG_RAW_PACKET: ULONG = 0x00000001;
+pub const DOT11_RECV_FLAG_RAW_PACKET_FCS_FAILURE: ULONG = 0x00000002;
+pub const DOT11_RECV_FLAG_RAW_PACKET_TIMESTAMP: ULONG = 0x00000004;
+pub const DOT11_EXTSTA_RECV_CONTEXT_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_EXTSTA_RECV_CONTEXT {
+    Header: NDIS_OBJECT_HEADER,
+    uReceiveFlags: ULONG,
+    uPhyId: ULONG,
+    uChCenterFrequency: ULONG,
+    usNumberOfMPDUsReceived: USHORT,
+    lRSSI: LONG,
+    ucDataRate: UCHAR,
+    uSizeMediaSpecificInfo: ULONG,
+    pvMediaSpecificInfo: PVOID,
+    ullTimestamp: ULONGLONG,
+}}
+pub type PDOT11_EXTSTA_RECV_CONTEXT = *mut DOT11_EXTSTA_RECV_CONTEXT;
+pub type DOT11_EXTAP_RECV_CONTEXT = DOT11_EXTSTA_RECV_CONTEXT;
+pub type PDOT11_EXTAP_RECV_CONTEXT = *mut DOT11_EXTSTA_RECV_CONTEXT;
+pub const OID_DOT11_PRIVATE_OIDS_START: u32 = OID_DOT11_NDIS_START + 1024;
+pub const OID_DOT11_CURRENT_ADDRESS: u32 = OID_DOT11_PRIVATE_OIDS_START + 2;
+pub const OID_DOT11_PERMANENT_ADDRESS: u32 = OID_DOT11_PRIVATE_OIDS_START + 3;
+pub const OID_DOT11_MULTICAST_LIST: u32 = OID_DOT11_PRIVATE_OIDS_START + 4;
+pub const OID_DOT11_MAXIMUM_LIST_SIZE: u32 = OID_DOT11_PRIVATE_OIDS_START + 5;
+macro_rules! DEFINE_NWF_GUID {
+    ($name:ident, $ord:expr) => {
+        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_ASSOCIATION_PARAMS, 159}
+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}
+pub const DOT11_EXTAP_ATTRIBUTES_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_EXTAP_ATTRIBUTES {
+    Header: NDIS_OBJECT_HEADER,
+    uScanSSIDListSize: ULONG,
+    uDesiredSSIDListSize: ULONG,
+    uPrivacyExemptionListSize: ULONG,
+    uAssociationTableSize: ULONG,
+    uDefaultKeyTableSize: ULONG,
+    uWEPKeyValueMaxLength: ULONG,
+    bStrictlyOrderedServiceClassImplemented: BOOLEAN,
+    uNumSupportedCountryOrRegionStrings: ULONG,
+    pSupportedCountryOrRegionStrings: PDOT11_COUNTRY_OR_REGION_STRING,
+    uInfraNumSupportedUcastAlgoPairs: ULONG,
+    pInfraSupportedUcastAlgoPairs: PDOT11_AUTH_CIPHER_PAIR,
+    uInfraNumSupportedMcastAlgoPairs: ULONG,
+    pInfraSupportedMcastAlgoPairs: PDOT11_AUTH_CIPHER_PAIR,
+}}
+pub type PDOT11_EXTAP_ATTRIBUTES = *mut DOT11_EXTAP_ATTRIBUTES;
+pub const DOT11_INCOMING_ASSOC_STARTED_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_INCOMING_ASSOC_STARTED_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerMacAddr: DOT11_MAC_ADDRESS,
+}}
+pub type PDOT11_INCOMING_ASSOC_STARTED_PARAMETERS = *mut DOT11_INCOMING_ASSOC_STARTED_PARAMETERS;
+pub const DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerMacAddr: DOT11_MAC_ADDRESS,
+    bReAssocReq: BOOLEAN,
+    uAssocReqOffset: ULONG,
+    uAssocReqSize: ULONG,
+}}
+pub type PDOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS =
+    *mut DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS;
+pub const DOT11_ASSOC_ERROR_SOURCE_OS: UCHAR = 0x0;
+pub const DOT11_ASSOC_ERROR_SOURCE_REMOTE: UCHAR = 0x01;
+pub const DOT11_ASSOC_ERROR_SOURCE_OTHER: UCHAR = 0xFF;
+pub const DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerMacAddr: DOT11_MAC_ADDRESS,
+    uStatus: ULONG,
+    ucErrorSource: UCHAR,
+    bReAssocReq: BOOLEAN,
+    bReAssocResp: BOOLEAN,
+    uAssocReqOffset: ULONG,
+    uAssocReqSize: ULONG,
+    uAssocRespOffset: ULONG,
+    uAssocRespSize: ULONG,
+    AuthAlgo: DOT11_AUTH_ALGORITHM,
+    UnicastCipher: DOT11_CIPHER_ALGORITHM,
+    MulticastCipher: DOT11_CIPHER_ALGORITHM,
+    uActivePhyListOffset: ULONG,
+    uActivePhyListSize: ULONG,
+    uBeaconOffset: ULONG,
+    uBeaconSize: ULONG,
+}}
+pub type PDOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS =
+    *mut DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS;
+pub const DOT11_STOP_AP_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_STOP_AP_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    ulReason: ULONG,
+}}
+pub type PDOT11_STOP_AP_PARAMETERS = *mut DOT11_STOP_AP_PARAMETERS;
+pub const DOT11_STOP_AP_REASON_FREQUENCY_NOT_AVAILABLE: ULONG = 0x1;
+pub const DOT11_STOP_AP_REASON_CHANNEL_NOT_AVAILABLE: ULONG = 0x2;
+pub const DOT11_STOP_AP_REASON_AP_ACTIVE: ULONG = 0x3;
+pub const DOT11_STOP_AP_REASON_IHV_START: ULONG = 0xFF000000;
+pub const DOT11_STOP_AP_REASON_IHV_END: ULONG = 0xFFFFFFFF;
+pub const DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS_REVISION_1: UCHAR = 1;
+UNION!{union DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS_u {
+    [u32; 1],
+    ulChannel ulChannel_mut: ULONG,
+    ulFrequency ulFrequency_mut: ULONG,
+}}
+STRUCT!{struct DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    ulPhyId: ULONG,
+    u: DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS_u,
+}}
+pub type PDOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS = *mut DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS;
+pub const DOT11_CAN_SUSTAIN_AP_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_CAN_SUSTAIN_AP_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    ulReason: ULONG,
+}}
+pub type PDOT11_CAN_SUSTAIN_AP_PARAMETERS = *mut DOT11_CAN_SUSTAIN_AP_PARAMETERS;
+pub const DOT11_CAN_SUSTAIN_AP_REASON_IHV_START: ULONG = 0xFF000000;
+pub const DOT11_CAN_SUSTAIN_AP_REASON_IHV_END: ULONG = 0xFFFFFFFF;
+pub const NWF_EXTAP_OID: u32 = 0x03;
+pub const OID_DOT11_WPS_ENABLED: u32 = NWF_DEFINE_OID!(0x01, NWF_EXTAP_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_START_AP_REQUEST: u32 =
+    NWF_DEFINE_OID!(0x02, NWF_EXTAP_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_AVAILABLE_CHANNEL_LIST: u32 =
+    NWF_DEFINE_OID!(0x03, NWF_EXTAP_OID, NWF_MANDATORY_OID);
+pub const DOT11_AVAILABLE_CHANNEL_LIST_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_AVAILABLE_CHANNEL_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    uChannelNumber: [ULONG; 1],
+}}
+pub type PDOT11_AVAILABLE_CHANNEL_LIST = *mut DOT11_AVAILABLE_CHANNEL_LIST;
+pub const OID_DOT11_AVAILABLE_FREQUENCY_LIST: u32 =
+    NWF_DEFINE_OID!(0x04, NWF_EXTAP_OID, NWF_MANDATORY_OID);
+pub const DOT11_AVAILABLE_FREQUENCY_LIST_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_AVAILABLE_FREQUENCY_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    uFrequencyValue: [ULONG; 1],
+}}
+pub type PDOT11_AVAILABLE_FREQUENCY_LIST = *mut DOT11_AVAILABLE_FREQUENCY_LIST;
+pub const OID_DOT11_DISASSOCIATE_PEER_REQUEST: u32 =
+    NWF_DEFINE_OID!(0x05, NWF_EXTAP_OID, NWF_MANDATORY_OID);
+pub const DOT11_DISASSOCIATE_PEER_REQUEST_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_DISASSOCIATE_PEER_REQUEST {
+    Header: NDIS_OBJECT_HEADER,
+    PeerMacAddr: DOT11_MAC_ADDRESS,
+    usReason: USHORT,
+}}
+pub type PDOT11_DISASSOCIATE_PEER_REQUEST = *mut DOT11_DISASSOCIATE_PEER_REQUEST;
+pub const OID_DOT11_INCOMING_ASSOCIATION_DECISION: u32 =
+    NWF_DEFINE_OID!(0x06, NWF_EXTAP_OID, NWF_MANDATORY_OID);
+pub const DOT11_INCOMING_ASSOC_DECISION_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_INCOMING_ASSOC_DECISION {
+    Header: NDIS_OBJECT_HEADER,
+    PeerMacAddr: DOT11_MAC_ADDRESS,
+    bAccept: BOOLEAN,
+    usReasonCode: USHORT,
+    uAssocResponseIEsOffset: ULONG,
+    uAssocResponseIEsLength: ULONG,
+}}
+pub type PDOT11_INCOMING_ASSOC_DECISION = *mut DOT11_INCOMING_ASSOC_DECISION;
+pub const DOT11_INCOMING_ASSOC_DECISION_REVISION_2: UCHAR = 2;
+STRUCT!{struct DOT11_INCOMING_ASSOC_DECISION_V2 {
+    Header: NDIS_OBJECT_HEADER,
+    PeerMacAddr: DOT11_MAC_ADDRESS,
+    bAccept: BOOLEAN,
+    usReasonCode: USHORT,
+    uAssocResponseIEsOffset: ULONG,
+    uAssocResponseIEsLength: ULONG,
+    WFDStatus: DOT11_WFD_STATUS_CODE,
+}}
+pub type PDOT11_INCOMING_ASSOC_DECISION_V2 = *mut DOT11_INCOMING_ASSOC_DECISION_V2;
+pub const OID_DOT11_ADDITIONAL_IE: u32 = NWF_DEFINE_OID!(0x07, NWF_EXTAP_OID, NWF_MANDATORY_OID);
+pub const DOT11_ADDITIONAL_IE_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_ADDITIONAL_IE {
+    Header: NDIS_OBJECT_HEADER,
+    uBeaconIEsOffset: ULONG,
+    uBeaconIEsLength: ULONG,
+    uResponseIEsOffset: ULONG,
+    uResponseIEsLength: ULONG,
+}}
+pub type PDOT11_ADDITIONAL_IE = *mut DOT11_ADDITIONAL_IE;
+pub const DOT11_EXTAP_SEND_CONTEXT_REVISION_1: UCHAR = 1;
+pub const DOT11_EXTAP_RECV_CONTEXT_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_ENUM_PEER_INFO: u32 = NWF_DEFINE_OID!(0x08, NWF_EXTAP_OID, NWF_MANDATORY_OID);
+STRUCT!{struct DOT11_PEER_STATISTICS {
+    ullDecryptSuccessCount: ULONGLONG,
+    ullDecryptFailureCount: ULONGLONG,
+    ullTxPacketSuccessCount: ULONGLONG,
+    ullTxPacketFailureCount: ULONGLONG,
+    ullRxPacketSuccessCount: ULONGLONG,
+    ullRxPacketFailureCount: ULONGLONG,
+}}
+pub type PDOT11_PEER_STATISTICS = *mut DOT11_PEER_STATISTICS;
+STRUCT!{struct DOT11_PEER_INFO {
+    MacAddress: DOT11_MAC_ADDRESS,
+    usCapabilityInformation: USHORT,
+    AuthAlgo: DOT11_AUTH_ALGORITHM,
+    UnicastCipherAlgo: DOT11_CIPHER_ALGORITHM,
+    MulticastCipherAlgo: DOT11_CIPHER_ALGORITHM,
+    bWpsEnabled: BOOLEAN,
+    usListenInterval: USHORT,
+    ucSupportedRates: [UCHAR; MAX_NUM_SUPPORTED_RATES_V2],
+    usAssociationID: USHORT,
+    AssociationState: DOT11_ASSOCIATION_STATE,
+    PowerMode: DOT11_POWER_MODE,
+    liAssociationUpTime: LARGE_INTEGER,
+    Statistics: DOT11_PEER_STATISTICS,
+}}
+pub type PDOT11_PEER_INFO = *mut DOT11_PEER_INFO;
+pub const DOT11_PEER_INFO_LIST_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_PEER_INFO_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    PeerInfo: [DOT11_PEER_INFO; 1],
+}}
+pub type PDOT11_PEER_INFO_LIST = *mut DOT11_PEER_INFO_LIST;
+pub const DOT11_VWIFI_COMBINATION_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_VWIFI_COMBINATION {
+    Header: NDIS_OBJECT_HEADER,
+    uNumInfrastructure: ULONG,
+    uNumAdhoc: ULONG,
+    uNumSoftAP: ULONG,
+}}
+pub type PDOT11_VWIFI_COMBINATION = *mut DOT11_VWIFI_COMBINATION;
+pub const DOT11_VWIFI_COMBINATION_REVISION_2: UCHAR = 2;
+STRUCT!{struct DOT11_VWIFI_COMBINATION_V2 {
+    Header: NDIS_OBJECT_HEADER,
+    uNumInfrastructure: ULONG,
+    uNumAdhoc: ULONG,
+    uNumSoftAP: ULONG,
+    uNumVirtualStation: ULONG,
+}}
+pub type PDOT11_VWIFI_COMBINATION_V2 = *mut DOT11_VWIFI_COMBINATION_V2;
+pub const DOT11_VWIFI_COMBINATION_REVISION_3: UCHAR = 3;
+STRUCT!{struct DOT11_VWIFI_COMBINATION_V3 {
+    Header: NDIS_OBJECT_HEADER,
+    uNumInfrastructure: ULONG,
+    uNumAdhoc: ULONG,
+    uNumSoftAP: ULONG,
+    uNumVirtualStation: ULONG,
+    uNumWFDGroup: ULONG,
+}}
+pub type PDOT11_VWIFI_COMBINATION_V3 = *mut DOT11_VWIFI_COMBINATION_V3;
+pub const DOT11_VWIFI_ATTRIBUTES_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_VWIFI_ATTRIBUTES {
+    Header: NDIS_OBJECT_HEADER,
+    uTotalNumOfEntries: ULONG,
+    Combinations: [DOT11_VWIFI_COMBINATION; 1],
+}}
+pub type PDOT11_VWIFI_ATTRIBUTES = *mut DOT11_VWIFI_ATTRIBUTES;
+pub const NWF_VWIFI_OID: u32 = 0x04;
+pub const OID_DOT11_CREATE_MAC: u32 = NWF_DEFINE_OID!(0x01, NWF_VWIFI_OID, NWF_MANDATORY_OID);
+pub const DOT11_MAC_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_MAC_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    uOpmodeMask: ULONG,
+}}
+pub type PDOT11_MAC_PARAMETERS = *mut DOT11_MAC_PARAMETERS;
+STRUCT!{struct DOT11_MAC_INFO {
+    uReserved: ULONG,
+    uNdisPortNumber: ULONG,
+    MacAddr: DOT11_MAC_ADDRESS,
+}}
+pub type PDOT11_MAC_INFO = *mut DOT11_MAC_INFO;
+pub const OID_DOT11_DELETE_MAC: u32 = NWF_DEFINE_OID!(0x02, NWF_VWIFI_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_PREFERRED_MAC: u32 = NWF_DEFINE_OID!(0x03, NWF_VWIFI_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_VIRTUAL_STATION_CAPABILITY: u32 =
+    NWF_DEFINE_OID!(0x04, NWF_VWIFI_OID, NWF_OPTIONAL_OID);
+pub const DOT11_WFD_ATTRIBUTES_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_ATTRIBUTES {
+    Header: NDIS_OBJECT_HEADER,
+    uNumConcurrentGORole: ULONG,
+    uNumConcurrentClientRole: ULONG,
+    WPSVersionsSupported: ULONG,
+    bServiceDiscoverySupported: BOOLEAN,
+    bClientDiscoverabilitySupported: BOOLEAN,
+    bInfrastructureManagementSupported: BOOLEAN,
+    uMaxSecondaryDeviceTypeListSize: ULONG,
+    DeviceAddress: DOT11_MAC_ADDRESS,
+    uInterfaceAddressListCount: ULONG,
+    pInterfaceAddressList: PDOT11_MAC_ADDRESS,
+    uNumSupportedCountryOrRegionStrings: ULONG,
+    pSupportedCountryOrRegionStrings: PDOT11_COUNTRY_OR_REGION_STRING,
+    uDiscoveryFilterListSize: ULONG,
+    uGORoleClientTableSize: ULONG,
+}}
+pub type PDOT11_WFD_ATTRIBUTES = *mut DOT11_WFD_ATTRIBUTES;
+pub type DOT11_WFD_GROUP_CAPABILITY = UCHAR;
+pub const DOT11_WFD_STATUS_SUCCESS: DOT11_WFD_STATUS_CODE = 0;
+pub const DOT11_WFD_STATUS_FAILED_INFORMATION_IS_UNAVAILABLE: DOT11_WFD_STATUS_CODE = 1;
+pub const DOT11_WFD_STATUS_FAILED_INCOMPATIBLE_PARAMETERS: DOT11_WFD_STATUS_CODE = 2;
+pub const DOT11_WFD_STATUS_FAILED_LIMIT_REACHED: DOT11_WFD_STATUS_CODE = 3;
+pub const DOT11_WFD_STATUS_FAILED_INVALID_PARAMETERS: DOT11_WFD_STATUS_CODE = 4;
+pub const DOT11_WFD_STATUS_FAILED_UNABLE_TO_ACCOMODATE_REQUEST: DOT11_WFD_STATUS_CODE = 5;
+pub const DOT11_WFD_STATUS_FAILED_PREVIOUS_PROTOCOL_ERROR: DOT11_WFD_STATUS_CODE = 6;
+pub const DOT11_WFD_STATUS_FAILED_NO_COMMON_CHANNELS: DOT11_WFD_STATUS_CODE = 7;
+pub const DOT11_WFD_STATUS_FAILED_UNKNOWN_WFD_GROUP: DOT11_WFD_STATUS_CODE = 8;
+pub const DOT11_WFD_STATUS_FAILED_MATCHING_MAX_INTENT: DOT11_WFD_STATUS_CODE = 9;
+pub const DOT11_WFD_STATUS_FAILED_INCOMPATIBLE_PROVISIONING_METHOD: DOT11_WFD_STATUS_CODE = 10;
+pub const DOT11_WFD_STATUS_FAILED_REJECTED_BY_USER: DOT11_WFD_STATUS_CODE = 11;
+pub const DOT11_WFD_STATUS_SUCCESS_ACCEPTED_BY_USER: DOT11_WFD_STATUS_CODE = 12;
+#[inline]
+pub fn WFD_STATUS_SUCCEEDED(status: DOT11_WFD_STATUS_CODE) -> bool {
+    status == DOT11_WFD_STATUS_SUCCESS || status == DOT11_WFD_STATUS_SUCCESS_ACCEPTED_BY_USER
+}
+#[inline]
+pub fn WFD_STATUS_FAILED(status: DOT11_WFD_STATUS_CODE) -> bool {
+    status != DOT11_WFD_STATUS_SUCCESS || status != DOT11_WFD_STATUS_SUCCESS_ACCEPTED_BY_USER
+}
+pub const DOT11_WFD_MINOR_REASON_SUCCESS: i32 = 0;
+pub const DOT11_WFD_MINOR_REASON_DISASSOCIATED_FROM_WLAN_CROSS_CONNECTION_POLICY: i32 = 1;
+pub const DOT11_WFD_MINOR_REASON_DISASSOCIATED_NOT_MANAGED_INFRASTRUCTURE_CAPABLE: i32 = 2;
+pub const DOT11_WFD_MINOR_REASON_DISASSOCIATED_WFD_COEXISTENCE_POLICY: i32 = 3;
+pub const DOT11_WFD_MINOR_REASON_DISASSOCIATED_INFRASTRUCTURE_MANAGED_POLICY: i32 = 4;
+pub const DOT11_WPS_VERSION_1_0: u8 = 0x01;
+pub const DOT11_WPS_VERSION_2_0: u8 = 0x02;
+pub const DOT11_WFD_DEVICE_CAPABILITY_SERVICE_DISCOVERY: u8 = 0x01;
+pub const DOT11_WFD_DEVICE_CAPABILITY_P2P_CLIENT_DISCOVERABILITY: u8 = 0x02;
+pub const DOT11_WFD_DEVICE_CAPABILITY_CONCURRENT_OPERATION: u8 = 0x04;
+pub const DOT11_WFD_DEVICE_CAPABILITY_P2P_INFRASTRUCTURE_MANAGED: u8 = 0x08;
+pub const DOT11_WFD_DEVICE_CAPABILITY_P2P_DEVICE_LIMIT: u8 = 0x10;
+pub const DOT11_WFD_DEVICE_CAPABILITY_P2P_INVITATION_PROCEDURE: u8 = 0x20;
+pub const DOT11_WFD_DEVICE_CAPABILITY_RESERVED_6: u8 = 0x40;
+pub const DOT11_WFD_DEVICE_CAPABILITY_RESERVED_7: u8 = 0x80;
+pub const DOT11_WFD_GROUP_CAPABILITY_NONE: u8 = 0x00;
+pub const DOT11_WFD_GROUP_CAPABILITY_GROUP_OWNER: u8 = 0x01;
+pub const DOT11_WFD_GROUP_CAPABILITY_PERSISTENT_GROUP: u8 = 0x02;
+pub const DOT11_WFD_GROUP_CAPABILITY_GROUP_LIMIT_REACHED: u8 = 0x04;
+pub const DOT11_WFD_GROUP_CAPABILITY_INTRABSS_DISTRIBUTION_SUPPORTED: u8 = 0x08;
+pub const DOT11_WFD_GROUP_CAPABILITY_CROSS_CONNECTION_SUPPORTED: u8 = 0x10;
+pub const DOT11_WFD_GROUP_CAPABILITY_PERSISTENT_RECONNECT_SUPPORTED: u8 = 0x20;
+pub const DOT11_WFD_GROUP_CAPABILITY_IN_GROUP_FORMATION: u8 = 0x40;
+pub const DOT11_WFD_GROUP_CAPABILITY_RESERVED_7: u8 = 0x80;
+pub const DOT11_WFD_GROUP_CAPABILITY_EAPOL_KEY_IP_ADDRESS_ALLOCATION_SUPPORTED: u8 = 0x80;
+pub const DOT11_WPS_DEVICE_NAME_MAX_LENGTH: usize = 32;
+pub const DOT11_WPS_MAX_PASSKEY_LENGTH: usize = 8;
+pub const DOT11_WPS_MAX_MODEL_NAME_LENGTH: usize = 32;
+pub const DOT11_WPS_MAX_MODEL_NUMBER_LENGTH: usize = 32;
+STRUCT!{struct DOT11_WFD_DEVICE_TYPE {
+    CategoryID: USHORT,
+    SubCategoryID: USHORT,
+    OUI: [UCHAR; 4],
+}}
+pub type PDOT11_WFD_DEVICE_TYPE = *mut DOT11_WFD_DEVICE_TYPE;
+STRUCT!{struct DOT11_WPS_DEVICE_NAME {
+    uDeviceNameLength: ULONG,
+    ucDeviceName: [UCHAR; DOT11_WPS_DEVICE_NAME_MAX_LENGTH],
+}}
+pub type PDOT11_WPS_DEVICE_NAME = *mut DOT11_WPS_DEVICE_NAME;
+STRUCT!{struct DOT11_WFD_CONFIGURATION_TIMEOUT {
+    GOTimeout: UCHAR,
+    ClientTimeout: UCHAR,
+}}
+pub type PDOT11_WFD_CONFIGURATION_TIMEOUT = *mut DOT11_WFD_CONFIGURATION_TIMEOUT;
+STRUCT!{struct DOT11_WFD_GROUP_ID {
+    DeviceAddress: DOT11_MAC_ADDRESS,
+    SSID: DOT11_SSID,
+}}
+pub type PDOT11_WFD_GROUP_ID = *mut DOT11_WFD_GROUP_ID;
+STRUCT!{#[repr(packed)] struct DOT11_WFD_GO_INTENT {
+    Bitfields: UCHAR,
+}}
+BITFIELD!{DOT11_WFD_GO_INTENT Bitfields: UCHAR [
+    TieBreaker set_TieBreaker[0..1],
+    Intent set_Intent[1..8],
+]}
+pub type PDOT11_WFD_GO_INTENT = *mut DOT11_WFD_GO_INTENT;
+STRUCT!{struct DOT11_WFD_CHANNEL {
+    CountryRegionString: DOT11_COUNTRY_OR_REGION_STRING,
+    OperatingClass: UCHAR,
+    ChannelNumber: UCHAR,
+}}
+pub type PDOT11_WFD_CHANNEL = *mut DOT11_WFD_CHANNEL;
+ENUM!{enum DOT11_WPS_CONFIG_METHOD {
+    DOT11_WPS_CONFIG_METHOD_NULL = 0,
+    DOT11_WPS_CONFIG_METHOD_DISPLAY = 0x0008,
+    DOT11_WPS_CONFIG_METHOD_NFC_TAG = 0x0020,
+    DOT11_WPS_CONFIG_METHOD_NFC_INTERFACE = 0x0040,
+    DOT11_WPS_CONFIG_METHOD_PUSHBUTTON = 0x0080,
+    DOT11_WPS_CONFIG_METHOD_KEYPAD = 0x0100,
+    DOT11_WPS_CONFIG_METHOD_WFDS_DEFAULT = 0x1000,
+}}
+pub type PDOT11_WPS_CONFIG_METHOD = *mut DOT11_WPS_CONFIG_METHOD;
+ENUM!{enum DOT11_WPS_DEVICE_PASSWORD_ID {
+    DOT11_WPS_PASSWORD_ID_DEFAULT = 0x0000,
+    DOT11_WPS_PASSWORD_ID_USER_SPECIFIED = 0x0001,
+    DOT11_WPS_PASSWORD_ID_MACHINE_SPECIFIED = 0x0002,
+    DOT11_WPS_PASSWORD_ID_REKEY = 0x0003,
+    DOT11_WPS_PASSWORD_ID_PUSHBUTTON = 0x0004,
+    DOT11_WPS_PASSWORD_ID_REGISTRAR_SPECIFIED = 0x0005,
+    DOT11_WPS_PASSWORD_ID_NFC_CONNECTION_HANDOVER = 0x0007,
+    DOT11_WPS_PASSWORD_ID_WFD_SERVICES = 0x0008,
+    DOT11_WPS_PASSWORD_ID_OOB_RANGE_MIN = 0x0010,
+    DOT11_WPS_PASSWORD_ID_OOB_RANGE_MAX = 0xFFFF,
+}}
+pub type PDOT11_WPS_DEVICE_PASSWORD_ID = *mut DOT11_WPS_DEVICE_PASSWORD_ID;
+STRUCT!{struct WFDSVC_CONNECTION_CAPABILITY {
+    bNew: BOOLEAN,
+    bClient: BOOLEAN,
+    bGO: BOOLEAN,
+}}
+pub type PWFDSVC_CONNECTION_CAPABILITY = *mut WFDSVC_CONNECTION_CAPABILITY;
+pub const WFDSVC_CONNECTION_CAPABILITY_NEW: BOOLEAN = 0x01;
+pub const WFDSVC_CONNECTION_CAPABILITY_CLIENT: BOOLEAN = 0x02;
+pub const WFDSVC_CONNECTION_CAPABILITY_GO: BOOLEAN = 0x04;
+STRUCT!{struct DOT11_WFD_SERVICE_HASH_LIST {
+    ServiceHashCount: USHORT,
+    ServiceHash: [DOT11_WFD_SERVICE_HASH; 1],
+}}
+pub type PDOT11_WFD_SERVICE_HASH_LIST = *mut DOT11_WFD_SERVICE_HASH_LIST;
+STRUCT!{struct DOT11_WFD_ADVERTISEMENT_ID {
+    AdvertisementID: ULONG,
+    ServiceAddress: DOT11_MAC_ADDRESS,
+}}
+pub type PDOT11_WFD_ADVERTISEMENT_ID = *mut DOT11_WFD_ADVERTISEMENT_ID;
+STRUCT!{struct DOT11_WFD_SESSION_ID {
+    SessionID: ULONG,
+    SessionAddress: DOT11_MAC_ADDRESS,
+}}
+pub type PDOT11_WFD_SESSION_ID = *mut DOT11_WFD_SESSION_ID;
+STRUCT!{struct DOT11_WFD_ADVERTISED_SERVICE_DESCRIPTOR {
+    AdvertisementID: ULONG,
+    ConfigMethods: USHORT,
+    ServiceNameLength: UCHAR,
+    ServiceName: [UCHAR; DOT11_WFD_SERVICE_NAME_MAX_LENGTH],
+}}
+pub type PDOT11_WFD_ADVERTISED_SERVICE_DESCRIPTOR = *mut DOT11_WFD_ADVERTISED_SERVICE_DESCRIPTOR;
+STRUCT!{struct DOT11_WFD_ADVERTISED_SERVICE_LIST {
+    ServiceCount: USHORT,
+    AdvertisedService: [DOT11_WFD_ADVERTISED_SERVICE_DESCRIPTOR; 1],
+}}
+pub type PDOT11_WFD_ADVERTISED_SERVICE_LIST = *mut DOT11_WFD_ADVERTISED_SERVICE_LIST;
+pub const DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS_REVISION_1: UCHAR = 1;
+pub const DOT11_WFD_DISCOVER_COMPLETE_MAX_LIST_SIZE: ULONG = 128;
+STRUCT!{struct DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    Status: NDIS_STATUS,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    uListOffset: ULONG,
+    uListLength: ULONG,
+}}
+pub type PDOT11_WFD_DISCOVER_COMPLETE_PARAMETERS = *mut DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS;
+pub const DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    Status: NDIS_STATUS,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS =
+    *mut DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS;
+pub const DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    RequestContext: PVOID,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS =
+    *mut DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS;
+pub const DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    Status: NDIS_STATUS,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS =
+    *mut DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS;
+pub const DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    ResponseContext: PVOID,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS =
+    *mut DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS;
+pub const DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    Status: NDIS_STATUS,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS =
+    *mut DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS;
+pub const DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS =
+    *mut DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS;
+pub const DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    ReceiverAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    Status: NDIS_STATUS,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS =
+    *mut DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS;
+pub const DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    TransmitterDeviceAddress: DOT11_MAC_ADDRESS,
+    BSSID: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    RequestContext: PVOID,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS =
+    *mut DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS;
+pub const DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    ReceiverDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    Status: NDIS_STATUS,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS =
+    *mut DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS;
+pub const DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    TransmitterDeviceAddress: DOT11_MAC_ADDRESS,
+    BSSID: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS =
+    *mut DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS;
+pub const DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    ReceiverAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    Status: NDIS_STATUS,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS =
+    *mut DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS;
+pub const DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    TransmitterDeviceAddress: DOT11_MAC_ADDRESS,
+    BSSID: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    RequestContext: PVOID,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS =
+    *mut DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS;
+pub const DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    ReceiverDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    Status: NDIS_STATUS,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS =
+    *mut DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS;
+pub const DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    TransmitterDeviceAddress: DOT11_MAC_ADDRESS,
+    BSSID: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS =
+    *mut DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS;
+pub const DOT11_ANQP_QUERY_COMPLETE_PARAMETERS_REVISION_1: UCHAR = 1;
+ENUM!{enum DOT11_ANQP_QUERY_RESULT {
+    dot11_ANQP_query_result_success = 0,
+    dot11_ANQP_query_result_failure = 1,
+    dot11_ANQP_query_result_timed_out = 2,
+    dot11_ANQP_query_result_resources = 3,
+    dot11_ANQP_query_result_advertisement_protocol_not_supported_on_remote = 4,
+    dot11_ANQP_query_result_gas_protocol_failure = 5,
+    dot11_ANQP_query_result_advertisement_server_not_responding = 6,
+    dot11_ANQP_query_result_access_issues = 7,
+}}
+pub type PDOT11_ANQP_QUERY_RESULT = *mut DOT11_ANQP_QUERY_RESULT;
+STRUCT!{struct DOT11_ANQP_QUERY_COMPLETE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    Status: DOT11_ANQP_QUERY_RESULT,
+    hContext: HANDLE,
+    uResponseLength: ULONG,
+}}
+pub type PDOT11_ANQP_QUERY_COMPLETE_PARAMETERS = *mut DOT11_ANQP_QUERY_COMPLETE_PARAMETERS;
+pub const NWF_WFD_DEVICE_OID: u32 = 0x05;
+pub const NWF_WFD_ROLE_OID: u32 = 0x06;
+pub const OID_DOT11_WFD_DEVICE_CAPABILITY: u32 =
+    NWF_DEFINE_OID!(0x01, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_WFD_DEVICE_CAPABILITY_CONFIG_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_DEVICE_CAPABILITY_CONFIG {
+    Header: NDIS_OBJECT_HEADER,
+    bServiceDiscoveryEnabled: BOOLEAN,
+    bClientDiscoverabilityEnabled: BOOLEAN,
+    bConcurrentOperationSupported: BOOLEAN,
+    bInfrastructureManagementEnabled: BOOLEAN,
+    bDeviceLimitReached: BOOLEAN,
+    bInvitationProcedureEnabled: BOOLEAN,
+    WPSVersionsEnabled: ULONG,
+}}
+pub type PDOT11_WFD_DEVICE_CAPABILITY_CONFIG = *mut DOT11_WFD_DEVICE_CAPABILITY_CONFIG;
+pub const OID_DOT11_WFD_GROUP_OWNER_CAPABILITY: u32 =
+    NWF_DEFINE_OID!(0x02, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG {
+    Header: NDIS_OBJECT_HEADER,
+    bPersistentGroupEnabled: BOOLEAN,
+    bIntraBSSDistributionSupported: BOOLEAN,
+    bCrossConnectionSupported: BOOLEAN,
+    bPersistentReconnectSupported: BOOLEAN,
+    bGroupFormationEnabled: BOOLEAN,
+    uMaximumGroupLimit: ULONG,
+}}
+pub type PDOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG = *mut DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG;
+pub const DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_REVISION_2: UCHAR = 2;
+STRUCT!{struct DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_V2 {
+    Header: NDIS_OBJECT_HEADER,
+    bPersistentGroupEnabled: BOOLEAN,
+    bIntraBSSDistributionSupported: BOOLEAN,
+    bCrossConnectionSupported: BOOLEAN,
+    bPersistentReconnectSupported: BOOLEAN,
+    bGroupFormationEnabled: BOOLEAN,
+    uMaximumGroupLimit: ULONG,
+    bEapolKeyIpAddressAllocationSupported: BOOLEAN,
+}}
+pub type PDOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_V2 =
+    *mut DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_V2;
+pub const OID_DOT11_WFD_DEVICE_INFO: u32 =
+    NWF_DEFINE_OID!(0x03, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_WFD_DEVICE_INFO_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_DEVICE_INFO {
+    Header: NDIS_OBJECT_HEADER,
+    DeviceAddress: DOT11_MAC_ADDRESS,
+    ConfigMethods: USHORT,
+    PrimaryDeviceType: DOT11_WFD_DEVICE_TYPE,
+    DeviceName: DOT11_WPS_DEVICE_NAME,
+}}
+pub type PDOT11_WFD_DEVICE_INFO = *mut DOT11_WFD_DEVICE_INFO;
+pub const OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST: u32 =
+    NWF_DEFINE_OID!(0x04, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST {
+    Header: NDIS_OBJECT_HEADER,
+    uNumOfEntries: ULONG,
+    uTotalNumOfEntries: ULONG,
+    SecondaryDeviceTypes: [DOT11_WFD_DEVICE_TYPE; 1],
+}}
+pub type PDOT11_WFD_SECONDARY_DEVICE_TYPE_LIST = *mut DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST;
+// pub const DOT11_SIZEOF_WFD_SECONDARY_DEVICE_TYPE_LIST_REVISION_1: usize =
+//    FIELD_OFFSET(DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST, SecondaryDeviceTypes);
+pub const OID_DOT11_WFD_DISCOVER_REQUEST: u32 =
+    NWF_DEFINE_OID!(0x05, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+ENUM!{enum DOT11_WFD_DISCOVER_TYPE {
+    dot11_wfd_discover_type_scan_only = 1,
+    dot11_wfd_discover_type_find_only = 2,
+    dot11_wfd_discover_type_auto = 3,
+    dot11_wfd_discover_type_scan_social_channels = 4,
+    dot11_wfd_discover_type_forced = 0x80000000,
+}}
+pub type PDOT11_WFD_DISCOVER_TYPE = *mut DOT11_WFD_DISCOVER_TYPE;
+ENUM!{enum DOT11_WFD_SCAN_TYPE {
+    dot11_wfd_scan_type_active = 1,
+    dot11_wfd_scan_type_passive = 2,
+    dot11_wfd_scan_type_auto = 3,
+}}
+pub type PDOT11_WFD_SCAN_TYPE = *mut DOT11_WFD_SCAN_TYPE;
+pub const DISCOVERY_FILTER_BITMASK_DEVICE: UCHAR = 0x1;
+pub const DISCOVERY_FILTER_BITMASK_GO: UCHAR = 0x2;
+pub const DISCOVERY_FILTER_BITMASK_ANY: UCHAR = 0xF;
+STRUCT!{struct DOT11_WFD_DISCOVER_DEVICE_FILTER {
+    DeviceID: DOT11_MAC_ADDRESS,
+    ucBitmask: UCHAR,
+    GroupSSID: DOT11_SSID,
+}}
+pub type PDOT11_WFD_DISCOVER_DEVICE_FILTER = *mut DOT11_WFD_DISCOVER_DEVICE_FILTER;
+pub const DOT11_WFD_DISCOVER_REQUEST_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_DISCOVER_REQUEST {
+    Header: NDIS_OBJECT_HEADER,
+    DiscoverType: DOT11_WFD_DISCOVER_TYPE,
+    ScanType: DOT11_WFD_SCAN_TYPE,
+    uDiscoverTimeout: ULONG,
+    uDeviceFilterListOffset: ULONG,
+    uNumDeviceFilters: ULONG,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+    bForceScanLegacyNetworks: BOOLEAN,
+}}
+pub type PDOT11_WFD_DISCOVER_REQUEST = *mut DOT11_WFD_DISCOVER_REQUEST;
+pub const OID_DOT11_WFD_ENUM_DEVICE_LIST: u32 =
+    NWF_DEFINE_OID!(0x06, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_DEVICE_ENTRY_BYTE_ARRAY_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_DEVICE_ENTRY {
+    uPhyId: ULONG,
+    PhySpecificInfo: DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO,
+    dot11BSSID: DOT11_MAC_ADDRESS,
+    dot11BSSType: DOT11_BSS_TYPE,
+    TransmitterAddress: DOT11_MAC_ADDRESS,
+    lRSSI: LONG,
+    uLinkQuality: ULONG,
+    usBeaconPeriod: USHORT,
+    ullTimestamp: ULONGLONG,
+    ullBeaconHostTimestamp: ULONGLONG,
+    ullProbeResponseHostTimestamp: ULONGLONG,
+    usCapabilityInformation: USHORT,
+    uBeaconIEsOffset: ULONG,
+    uBeaconIEsLength: ULONG,
+    uProbeResponseIEsOffset: ULONG,
+    uProbeResponseIEsLength: ULONG,
+}}
+pub type PDOT11_WFD_DEVICE_ENTRY = *mut DOT11_WFD_DEVICE_ENTRY;
+pub const OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY: u32 =
+    NWF_DEFINE_OID!(0x07, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_WFD_DEVICE_NOT_DISCOVERABLE: i32 = 0;
+pub const DOT11_WFD_DEVICE_AUTO_AVAILABILITY: i32 = 16;
+pub const DOT11_WFD_DEVICE_HIGH_AVAILABILITY: i32 = 24;
+pub const OID_DOT11_WFD_ADDITIONAL_IE: u32 =
+    NWF_DEFINE_OID!(0x08, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_WFD_ADDITIONAL_IE_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_ADDITIONAL_IE {
+    Header: NDIS_OBJECT_HEADER,
+    uBeaconIEsOffset: ULONG,
+    uBeaconIEsLength: ULONG,
+    uProbeResponseIEsOffset: ULONG,
+    uProbeResponseIEsLength: ULONG,
+    uDefaultRequestIEsOffset: ULONG,
+    uDefaultRequestIEsLength: ULONG,
+}}
+pub type PDOT11_WFD_ADDITIONAL_IE = *mut DOT11_WFD_ADDITIONAL_IE;
+pub const OID_DOT11_WFD_FLUSH_DEVICE_LIST: u32 =
+    NWF_DEFINE_OID!(0x09, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST: u32 =
+    NWF_DEFINE_OID!(0x0A, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    uSendTimeout: ULONG,
+    GroupOwnerIntent: DOT11_WFD_GO_INTENT,
+    MinimumConfigTimeout: DOT11_WFD_CONFIGURATION_TIMEOUT,
+    IntendedInterfaceAddress: DOT11_MAC_ADDRESS,
+    GroupCapability: DOT11_WFD_GROUP_CAPABILITY,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS =
+    *mut DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS;
+pub const OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE: u32 =
+    NWF_DEFINE_OID!(0x0B, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    RequestContext: PVOID,
+    uSendTimeout: ULONG,
+    Status: DOT11_WFD_STATUS_CODE,
+    GroupOwnerIntent: DOT11_WFD_GO_INTENT,
+    MinimumConfigTimeout: DOT11_WFD_CONFIGURATION_TIMEOUT,
+    IntendedInterfaceAddress: DOT11_MAC_ADDRESS,
+    GroupCapability: DOT11_WFD_GROUP_CAPABILITY,
+    GroupID: DOT11_WFD_GROUP_ID,
+    bUseGroupID: BOOLEAN,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS =
+    *mut DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS;
+pub const OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION: u32 =
+    NWF_DEFINE_OID!(0x0C, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    ResponseContext: PVOID,
+    uSendTimeout: ULONG,
+    Status: DOT11_WFD_STATUS_CODE,
+    GroupCapability: DOT11_WFD_GROUP_CAPABILITY,
+    GroupID: DOT11_WFD_GROUP_ID,
+    bUseGroupID: BOOLEAN,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS =
+    *mut DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS;
+pub const OID_DOT11_WFD_SEND_INVITATION_REQUEST: u32 =
+    NWF_DEFINE_OID!(0x0D, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+STRUCT!{#[repr(packed)] struct DOT11_WFD_INVITATION_FLAGS {
+    Bitfields: UCHAR,
+}}
+BITFIELD!{DOT11_WFD_INVITATION_FLAGS Bitfields: UCHAR [
+    InvitationType set_InvitationType[0..1],
+    Reserved set_Reserved[1..8],
+]}
+pub type PDOT11_WFD_INVITATION_FLAGS = *mut DOT11_WFD_INVITATION_FLAGS;
+pub const DOT11_SEND_INVITATION_REQUEST_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_SEND_INVITATION_REQUEST_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    uSendTimeout: ULONG,
+    MinimumConfigTimeout: DOT11_WFD_CONFIGURATION_TIMEOUT,
+    InvitationFlags: DOT11_WFD_INVITATION_FLAGS,
+    GroupBSSID: DOT11_MAC_ADDRESS,
+    bUseGroupBSSID: BOOLEAN,
+    OperatingChannel: DOT11_WFD_CHANNEL,
+    bUseSpecifiedOperatingChannel: BOOLEAN,
+    GroupID: DOT11_WFD_GROUP_ID,
+    bLocalGO: BOOLEAN,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_SEND_INVITATION_REQUEST_PARAMETERS =
+    *mut DOT11_SEND_INVITATION_REQUEST_PARAMETERS;
+pub const OID_DOT11_WFD_SEND_INVITATION_RESPONSE: u32 =
+    NWF_DEFINE_OID!(0x0E, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_SEND_INVITATION_RESPONSE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_SEND_INVITATION_RESPONSE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    ReceiverDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    RequestContext: PVOID,
+    uSendTimeout: ULONG,
+    Status: DOT11_WFD_STATUS_CODE,
+    MinimumConfigTimeout: DOT11_WFD_CONFIGURATION_TIMEOUT,
+    GroupBSSID: DOT11_MAC_ADDRESS,
+    bUseGroupBSSID: BOOLEAN,
+    OperatingChannel: DOT11_WFD_CHANNEL,
+    bUseSpecifiedOperatingChannel: BOOLEAN,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_SEND_INVITATION_RESPONSE_PARAMETERS =
+    *mut DOT11_SEND_INVITATION_RESPONSE_PARAMETERS;
+pub const OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST: u32 =
+    NWF_DEFINE_OID!(0x0F, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    PeerDeviceAddress: DOT11_MAC_ADDRESS,
+    uSendTimeout: ULONG,
+    GroupCapability: DOT11_WFD_GROUP_CAPABILITY,
+    GroupID: DOT11_WFD_GROUP_ID,
+    bUseGroupID: BOOLEAN,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS =
+    *mut DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS;
+pub const OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE: u32 =
+    NWF_DEFINE_OID!(0x10, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    ReceiverDeviceAddress: DOT11_MAC_ADDRESS,
+    DialogToken: DOT11_DIALOG_TOKEN,
+    RequestContext: PVOID,
+    uSendTimeout: ULONG,
+    uIEsOffset: ULONG,
+    uIEsLength: ULONG,
+}}
+pub type PDOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS =
+    *mut DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS;
+pub const OID_DOT11_WFD_GET_DIALOG_TOKEN: u32 =
+    NWF_DEFINE_OID!(0x11, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_WFD_STOP_DISCOVERY: u32 =
+    NWF_DEFINE_OID!(0x12, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_WFD_ENABLE_HRDSSS_DEVICES: u32 =
+    NWF_DEFINE_OID!(0x13, NWF_WFD_DEVICE_OID, NWF_OPTIONAL_OID);
+pub const OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL: u32 =
+    NWF_DEFINE_OID!(0x14, NWF_WFD_DEVICE_OID, NWF_MANDATORY_OID);
+pub const DOT11_WFD_DEVICE_LISTEN_CHANNEL_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_DEVICE_LISTEN_CHANNEL {
+    Header: NDIS_OBJECT_HEADER,
+    ChannelNumber: UCHAR,
+}}
+pub type PDOT11_WFD_DEVICE_LISTEN_CHANNEL = *mut DOT11_WFD_DEVICE_LISTEN_CHANNEL;
+pub const OID_DOT11_WFD_DESIRED_GROUP_ID: u32 =
+    NWF_DEFINE_OID!(0x01, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_WFD_START_GO_REQUEST: u32 =
+    NWF_DEFINE_OID!(0x02, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_WFD_GROUP_START_PARAMETERS: u32 =
+    NWF_DEFINE_OID!(0x03, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID);
+pub const DOT11_WFD_GROUP_START_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_GROUP_START_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    AdvertisedOperatingChannel: DOT11_WFD_CHANNEL,
+}}
+pub type PDOT11_WFD_GROUP_START_PARAMETERS = *mut DOT11_WFD_GROUP_START_PARAMETERS;
+pub const OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST: u32 =
+    NWF_DEFINE_OID!(0x04, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST: u32 =
+    NWF_DEFINE_OID!(0x05, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID);
+pub const OID_DOT11_WFD_GROUP_JOIN_PARAMETERS: u32 =
+    NWF_DEFINE_OID!(0x06, NWF_WFD_ROLE_OID, NWF_MANDATORY_OID);
+pub const DOT11_WFD_GROUP_JOIN_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_WFD_GROUP_JOIN_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    GOOperatingChannel: DOT11_WFD_CHANNEL,
+    GOConfigTime: ULONG,
+    bInGroupFormation: BOOLEAN,
+    bWaitForWPSReady: BOOLEAN,
+}}
+pub type PDOT11_WFD_GROUP_JOIN_PARAMETERS = *mut DOT11_WFD_GROUP_JOIN_PARAMETERS;
+pub const NWF_POWER_SAVE_OID: u32 = 0x07;
+pub const OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED: u32 =
+    NWF_DEFINE_OID!(0x01, NWF_POWER_SAVE_OID, NWF_MANDATORY_OID);
+pub const DOT11_POWER_MGMT_AUTO_MODE_ENABLED_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO {
+    Header: NDIS_OBJECT_HEADER,
+    bEnabled: BOOLEAN,
+}}
+pub type PDOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO = *mut DOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO;
+pub const OID_DOT11_POWER_MGMT_MODE_STATUS: u32 =
+    NWF_DEFINE_OID!(0x02, NWF_POWER_SAVE_OID, NWF_MANDATORY_OID);
+ENUM!{enum DOT11_POWER_MODE_REASON {
+    dot11_power_mode_reason_no_change = 0,
+    dot11_power_mode_reason_noncompliant_AP = 1,
+    dot11_power_mode_reason_legacy_WFD_device = 2,
+    dot11_power_mode_reason_compliant_AP = 3,
+    dot11_power_mode_reason_compliant_WFD_device = 4,
+    dot11_power_mode_reason_others = 5,
+}}
+pub const DOT11_POWER_MGMT_MODE_STATUS_INFO_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_POWER_MGMT_MODE_STATUS_INFO {
+    Header: NDIS_OBJECT_HEADER,
+    PowerSaveMode: DOT11_POWER_MODE,
+    uPowerSaveLevel: ULONG,
+    Reason: DOT11_POWER_MODE_REASON,
+}}
+pub type PDOT11_POWER_MGMT_MODE_STATUSINFO = *mut DOT11_POWER_MGMT_MODE_STATUS_INFO;
+pub const OID_DOT11_OFFLOAD_NETWORK_LIST: u32 =
+    NWF_DEFINE_OID!(0x03, NWF_POWER_SAVE_OID, NWF_MANDATORY_OID);
+pub const DOT11_MAX_CHANNEL_HINTS: usize = 4;
+pub const DOT11_INVALID_CHANNEL_NUMBER: ULONG = 0;
+STRUCT!{struct DOT11_CHANNEL_HINT {
+    Dot11PhyType: DOT11_PHY_TYPE,
+    uChannelNumber: ULONG,
+}}
+pub type PDOT11_CHANNEL_HINT = *mut DOT11_CHANNEL_HINT;
+STRUCT!{struct DOT11_OFFLOAD_NETWORK {
+    Ssid: DOT11_SSID,
+    UnicastCipher: DOT11_CIPHER_ALGORITHM,
+    AuthAlgo: DOT11_AUTH_ALGORITHM,
+    Dot11ChannelHints: [DOT11_CHANNEL_HINT; DOT11_MAX_CHANNEL_HINTS],
+}}
+pub type PDOT11_OFFLOAD_NETWORK = *mut DOT11_OFFLOAD_NETWORK;
+pub const DOT11_NLO_FLAG_STOP_NLO_INDICATION: ULONG = 0x00000001;
+pub const DOT11_NLO_FLAG_SCAN_ON_AOAC_PLATFORM: ULONG = 0x00000002;
+pub const DOT11_NLO_FLAG_SCAN_AT_SYSTEM_RESUME: ULONG = 0x00000004;
+pub const DOT11_OFFLOAD_NETWORK_LIST_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_OFFLOAD_NETWORK_LIST_INFO {
+    Header: NDIS_OBJECT_HEADER,
+    ulFlags: ULONG,
+    FastScanPeriod: ULONG,
+    FastScanIterations: ULONG,
+    SlowScanPeriod: ULONG,
+    uNumOfEntries: ULONG,
+    offloadNetworkList: [DOT11_OFFLOAD_NETWORK; 1],
+}}
+pub type PDOT11_OFFLOAD_NETWORK_LIST_INFO = *mut DOT11_OFFLOAD_NETWORK_LIST_INFO;
+pub const DOT11_OFFLOAD_NETWORK_STATUS_PARAMETERS_REVISION_1: UCHAR = 1;
+STRUCT!{struct DOT11_OFFLOAD_NETWORK_STATUS_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    Status: NDIS_STATUS,
+}}
+pub type PDOT11_OFFLOAD_NETWORK_STATUS_PARAMETERS = *mut DOT11_OFFLOAD_NETWORK_STATUS_PARAMETERS;
+pub const NWF_MANUFACTURING_OID: u32 = 0x08;
+pub const OID_DOT11_MANUFACTURING_TEST: u32 =
+    NWF_DEFINE_OID!(0x01, NWF_MANUFACTURING_OID, NWF_OPTIONAL_OID);
+pub const DOT11_MANUFACTURING_TEST_REVISION_1: UCHAR = 1;
+ENUM!{enum DOT11_MANUFACTURING_TEST_TYPE {
+    dot11_manufacturing_test_unknown = 0,
+    dot11_manufacturing_test_self_start = 1,
+    dot11_manufacturing_test_self_query_result = 2,
+    dot11_manufacturing_test_rx = 3,
+    dot11_manufacturing_test_tx = 4,
+    dot11_manufacturing_test_query_adc = 5,
+    dot11_manufacturing_test_set_data = 6,
+    dot11_manufacturing_test_query_data = 7,
+    dot11_manufacturing_test_sleep = 8,
+    dot11_manufacturing_test_awake = 9,
+    dot11_manufacturing_test_IHV_start = 0x80000000,
+    dot11_manufacturing_test_IHV_end = 0xffffffff,
+}}
+pub type PDOT11_MANUFACTURING_TEST_TYPE = *mut DOT11_MANUFACTURING_TEST_TYPE;
+STRUCT!{struct DOT11_MANUFACTURING_TEST {
+    dot11ManufacturingTestType: DOT11_MANUFACTURING_TEST_TYPE,
+    uBufferLength: ULONG,
+    ucBuffer: [UCHAR; 1],
+}}
+pub type PDOT11_MANUFACTURING_TEST = *mut DOT11_MANUFACTURING_TEST;
+ENUM!{enum DOT11_MANUFACTURING_SELF_TEST_TYPE {
+    DOT11_MANUFACTURING_SELF_TEST_TYPE_INTERFACE = 1,
+    DOT11_MANUFACTURING_SELF_TEST_TYPE_RF_INTERFACE = 2,
+    DOT11_MANUFACTURING_SELF_TEST_TYPE_BT_COEXISTENCE = 3,
+}}
+pub type PDOT11_MANUFACTURING_SELF_TEST_TYPE = *mut DOT11_MANUFACTURING_SELF_TEST_TYPE;
+STRUCT!{struct DOT11_MANUFACTURING_SELF_TEST_SET_PARAMS {
+    SelfTestType: DOT11_MANUFACTURING_SELF_TEST_TYPE,
+    uTestID: ULONG,
+    uPinBitMask: ULONG,
+    pvContext: PVOID,
+    uBufferLength: ULONG,
+    ucBufferIn: [UCHAR; 1],
+}}
+pub type PDOT11_MANUFACTURING_SELF_TEST_SET_PARAMS =
+    *mut DOT11_MANUFACTURING_SELF_TEST_SET_PARAMS;
+STRUCT!{struct DOT11_MANUFACTURING_SELF_TEST_QUERY_RESULTS {
+    SelfTestType: DOT11_MANUFACTURING_SELF_TEST_TYPE,
+    uTestID: ULONG,
+    bResult: BOOLEAN,
+    uPinFailedBitMask: ULONG,
+    pvContext: PVOID,
+    uBytesWrittenOut: ULONG,
+    ucBufferOut: [UCHAR; 1],
+}}
+pub type PDOT11_MANUFACTURING_SELF_TEST_QUERY_RESULTS =
+    *mut DOT11_MANUFACTURING_SELF_TEST_QUERY_RESULTS;
+ENUM!{enum DOT11_BAND {
+    dot11_band_2p4g = 1,
+    dot11_band_4p9g = 2,
+    dot11_band_5g = 3,
+}}
+pub type PDOT11_BAND = *mut DOT11_BAND;
+STRUCT!{struct DOT11_MANUFACTURING_FUNCTIONAL_TEST_RX {
+    bEnabled: BOOLEAN,
+    Dot11Band: DOT11_BAND,
+    uChannel: ULONG,
+    PowerLevel: LONG,
+}}
+pub type PDOT11_MANUFACTURING_FUNCTIONAL_TEST_RX = *mut DOT11_MANUFACTURING_FUNCTIONAL_TEST_RX;
+STRUCT!{struct DOT11_MANUFACTURING_FUNCTIONAL_TEST_TX {
+    bEnable: BOOLEAN,
+    bOpenLoop: BOOLEAN,
+    Dot11Band: DOT11_BAND,
+    uChannel: ULONG,
+    uSetPowerLevel: ULONG,
+    ADCPowerLevel: LONG,
+}}
+pub type PDOT11_MANUFACTURING_FUNCTIONAL_TEST_TX = *mut DOT11_MANUFACTURING_FUNCTIONAL_TEST_TX;
+STRUCT!{struct DOT11_MANUFACTURING_FUNCTIONAL_TEST_QUERY_ADC {
+    Dot11Band: DOT11_BAND,
+    uChannel: ULONG,
+    ADCPowerLevel: LONG,
+}}
+pub type PDOT11_MANUFACTURING_FUNCTIONAL_TEST_QUERY_ADC =
+    *mut DOT11_MANUFACTURING_FUNCTIONAL_TEST_QUERY_ADC;
+STRUCT!{struct DOT11_MANUFACTURING_TEST_SET_DATA {
+    uKey: ULONG,
+    uOffset: ULONG,
+    uBufferLength: ULONG,
+    ucBufferIn: [UCHAR; 1],
+}}
+pub type PDOT11_MANUFACTURING_TEST_SET_DATA = *mut DOT11_MANUFACTURING_TEST_SET_DATA;
+STRUCT!{struct DOT11_MANUFACTURING_TEST_QUERY_DATA {
+    uKey: ULONG,
+    uOffset: ULONG,
+    uBufferLength: ULONG,
+    uBytesRead: ULONG,
+    ucBufferOut: [UCHAR; 1],
+}}
+pub type PDOT11_MANUFACTURING_TEST_QUERY_DATA = *mut DOT11_MANUFACTURING_TEST_QUERY_DATA;
+STRUCT!{struct DOT11_MANUFACTURING_TEST_SLEEP {
+    uSleepTime: ULONG,
+    pvContext: PVOID,
+}}
+pub type PDOT11_MANUFACTURING_TEST_SLEEP = *mut DOT11_MANUFACTURING_TEST_SLEEP;
+ENUM!{enum DOT11_MANUFACTURING_CALLBACK_TYPE {
+    dot11_manufacturing_callback_unknown = 0,
+    dot11_manufacturing_callback_self_test_complete = 1,
+    dot11_manufacturing_callback_sleep_complete = 2,
+    dot11_manufacturing_callback_IHV_start = 0x80000000,
+    dot11_manufacturing_callback_IHV_end = 0xffffffff,
+}}
+pub type PDOT11_MANUFACTURING_CALLBACK_TYPE = *mut DOT11_MANUFACTURING_CALLBACK_TYPE;
+STRUCT!{struct DOT11_MANUFACTURING_CALLBACK_PARAMETERS {
+    Header: NDIS_OBJECT_HEADER,
+    dot11ManufacturingCallbackType: DOT11_MANUFACTURING_CALLBACK_TYPE,
+    uStatus: ULONG,
+    pvContext: PVOID,
+}}
+pub type PDOT11_MANUFACTURING_CALLBACK_PARAMETERS = *mut DOT11_MANUFACTURING_CALLBACK_PARAMETERS;
+pub const DOT11_MANUFACTURING_CALLBACK_REVISION_1: UCHAR = 1;
+pub const OID_DOT11_SET_FT_REASSOCIATION_PARAMETERS: u32 =
+    NWF_DEFINE_OID!(0x168, NWF_OPERATIONAL_OID, NWF_MANDATORY_OID);
diff --git a/src/shared/wlantypes.rs b/src/shared/wlantypes.rs
new file mode 100644
index 000000000..a9e9c665a
--- /dev/null
+++ b/src/shared/wlantypes.rs
@@ -0,0 +1,78 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+//! Structures used to hold wlan information.
+use shared::basetsd::UINT8;
+use shared::minwindef::{UCHAR, ULONG, USHORT};
+ENUM!{enum DOT11_BSS_TYPE {
+    dot11_BSS_type_infrastructure = 1,
+    dot11_BSS_type_independent = 2,
+    dot11_BSS_type_any = 3,
+}}
+pub type PDOT11_BSS_TYPE = *mut DOT11_BSS_TYPE;
+pub const DOT11_SSID_MAX_LENGTH: usize = 32;
+STRUCT!{struct DOT11_SSID {
+    uSSIDLength: ULONG,
+    ucSSID: [UCHAR; DOT11_SSID_MAX_LENGTH],
+}}
+pub type PDOT11_SSID = *mut DOT11_SSID;
+ENUM!{enum DOT11_AUTH_ALGORITHM {
+    DOT11_AUTH_ALGO_80211_OPEN = 1,
+    DOT11_AUTH_ALGO_80211_SHARED_KEY = 2,
+    DOT11_AUTH_ALGO_WPA = 3,
+    DOT11_AUTH_ALGO_WPA_PSK = 4,
+    DOT11_AUTH_ALGO_WPA_NONE = 5,
+    DOT11_AUTH_ALGO_RSNA = 6,
+    DOT11_AUTH_ALGO_RSNA_PSK = 7,
+    DOT11_AUTH_ALGO_IHV_START = 0x80000000,
+    DOT11_AUTH_ALGO_IHV_END = 0xffffffff,
+}}
+pub type PDOT11_AUTH_ALGORITHM = *mut DOT11_AUTH_ALGORITHM;
+pub const DOT11_AUTH_ALGORITHM_OPEN_SYSTEM: DOT11_AUTH_ALGORITHM = DOT11_AUTH_ALGO_80211_OPEN;
+pub const DOT11_AUTH_ALGORITHM_SHARED_KEY: DOT11_AUTH_ALGORITHM = DOT11_AUTH_ALGO_80211_SHARED_KEY;
+pub const DOT11_AUTH_ALGORITHM_WPA: DOT11_AUTH_ALGORITHM = DOT11_AUTH_ALGO_WPA;
+pub const DOT11_AUTH_ALGORITHM_WPA_PSK: DOT11_AUTH_ALGORITHM = DOT11_AUTH_ALGO_WPA_PSK;
+pub const DOT11_AUTH_ALGORITHM_WPA_NONE: DOT11_AUTH_ALGORITHM = DOT11_AUTH_ALGO_WPA_NONE;
+pub const DOT11_AUTH_ALGORITHM_RSNA: DOT11_AUTH_ALGORITHM = DOT11_AUTH_ALGO_RSNA;
+pub const DOT11_AUTH_ALGORITHM_RSNA_PSK: DOT11_AUTH_ALGORITHM = DOT11_AUTH_ALGO_RSNA_PSK;
+ENUM!{enum DOT11_CIPHER_ALGORITHM {
+    DOT11_CIPHER_ALGO_NONE = 0x00,
+    DOT11_CIPHER_ALGO_WEP40 = 0x01,
+    DOT11_CIPHER_ALGO_TKIP = 0x02,
+    DOT11_CIPHER_ALGO_CCMP = 0x04,
+    DOT11_CIPHER_ALGO_WEP104 = 0x05,
+    DOT11_CIPHER_ALGO_BIP = 0x06,
+    DOT11_CIPHER_ALGO_GCMP = 0x08,
+    DOT11_CIPHER_ALGO_WPA_USE_GROUP = 0x100,
+    DOT11_CIPHER_ALGO_WEP = 0x101,
+    DOT11_CIPHER_ALGO_IHV_START = 0x80000000,
+    DOT11_CIPHER_ALGO_IHV_END = 0xffffffff,
+}}
+pub type PDOT11_CIPHER_ALGORITHM = *mut DOT11_CIPHER_ALGORITHM;
+STRUCT!{struct DOT11_AUTH_CIPHER_PAIR {
+    AuthAlgoId: DOT11_AUTH_ALGORITHM,
+    CipherAlgoId: DOT11_CIPHER_ALGORITHM,
+}}
+pub type PDOT11_AUTH_CIPHER_PAIR = *mut DOT11_AUTH_CIPHER_PAIR;
+pub const DOT11_OI_MAX_LENGTH: usize = 5;
+pub const DOT11_OI_MIN_LENGTH: usize = 3;
+STRUCT!{struct DOT11_OI {
+    OILength: USHORT,
+    OI: [UCHAR; DOT11_OI_MAX_LENGTH],
+}}
+pub type PDOT11_OI = *mut DOT11_OI;
+STRUCT!{struct DOT11_ACCESSNETWORKOPTIONS {
+    AccessNetworkType: UINT8,
+    Internet: UINT8,
+    ASRA: UINT8,
+    ESR: UINT8,
+    UESA: UINT8,
+}}
+pub type PDOT11_ACCESSNETWORKOPTIONS = *mut DOT11_ACCESSNETWORKOPTIONS;
+STRUCT!{struct DOT11_VENUEINFO {
+    VenueGroup: UINT8,
+    VenueType: UINT8,
+}}
+pub type PDOT11_VENUEINFO = *mut DOT11_VENUEINFO;
diff --git a/src/um/adhoc.rs b/src/um/adhoc.rs
new file mode 100644
index 000000000..7448c08d2
--- /dev/null
+++ b/src/um/adhoc.rs
@@ -0,0 +1,220 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+use shared::guiddef::GUID;
+use shared::minwindef::ULONG;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{BOOLEAN, HRESULT, LONG, LPCWSTR, LPWSTR};
+ENUM!{enum DOT11_ADHOC_CIPHER_ALGORITHM {
+    DOT11_ADHOC_CIPHER_ALGO_INVALID = -1i32 as u32,
+    DOT11_ADHOC_CIPHER_ALGO_NONE = 0,
+    DOT11_ADHOC_CIPHER_ALGO_CCMP = 0x4,
+    DOT11_ADHOC_CIPHER_ALGO_WEP = 0x101,
+}}
+ENUM!{enum DOT11_ADHOC_AUTH_ALGORITHM {
+    DOT11_ADHOC_AUTH_ALGO_INVALID = -1i32 as u32,
+    DOT11_ADHOC_AUTH_ALGO_80211_OPEN = 1,
+    DOT11_ADHOC_AUTH_ALGO_RSNA_PSK = 7,
+}}
+ENUM!{enum DOT11_ADHOC_NETWORK_CONNECTION_STATUS {
+    DOT11_ADHOC_NETWORK_CONNECTION_STATUS_INVALID = 0,
+    DOT11_ADHOC_NETWORK_CONNECTION_STATUS_DISCONNECTED = 11,
+    DOT11_ADHOC_NETWORK_CONNECTION_STATUS_CONNECTING = 12,
+    DOT11_ADHOC_NETWORK_CONNECTION_STATUS_CONNECTED = 13,
+    DOT11_ADHOC_NETWORK_CONNECTION_STATUS_FORMED = 14,
+}}
+ENUM!{enum DOT11_ADHOC_CONNECT_FAIL_REASON {
+    DOT11_ADHOC_CONNECT_FAIL_DOMAIN_MISMATCH = 0,
+    DOT11_ADHOC_CONNECT_FAIL_PASSPHRASE_MISMATCH = 1,
+    DOT11_ADHOC_CONNECT_FAIL_OTHER = 2,
+}}
+RIDL!{#[uuid(0x8f10cc26, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocManager(IDot11AdHocManagerVtbl): IUnknown(IUnknownVtbl) {
+    fn CreateNetwork(
+        Name: LPCWSTR,
+        Password: LPCWSTR,
+        GeographicalId: LONG,
+        pInterface: *mut IDot11AdHocInterface,
+        pSecurity: *mut IDot11AdHocSecuritySettings,
+        pContextGuid: *mut GUID,
+        pIAdHoc: *mut *mut IDot11AdHocNetwork,
+    ) -> HRESULT,
+    fn CommitCreatedNetwork(
+        pIAdHoc: *mut IDot11AdHocNetwork,
+        fSaveProfile: BOOLEAN,
+        fMakeSavedProfileUserSpecific: BOOLEAN,
+    ) -> HRESULT,
+    fn GetIEnumDot11AdHocNetworks(
+        pContextGuid: *mut GUID,
+        ppEnum: *mut *mut IEnumDot11AdHocNetworks,
+    ) -> HRESULT,
+    fn GetIEnumDot11AdHocInterfaces(
+        ppEnum: *mut *mut IEnumDot11AdHocInterfaces,
+    ) -> HRESULT,
+    fn GetNetwork(
+        NetworkSignature: *mut GUID,
+        pNetwork: *mut *mut IDot11AdHocNetwork,
+    ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc27, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocManagerNotificationSink(IDot11AdHocManagerNotificationSinkVtbl):
+    IUnknown(IUnknownVtbl) {
+    fn OnNetworkAdd(
+        pIAdHocNetwork: *mut IDot11AdHocNetwork,
+    ) -> HRESULT,
+    fn OnNetworkRemove(
+        Signature: *mut GUID,
+    ) -> HRESULT,
+    fn OnInterfaceAdd(
+        pIAdHocInterface: *mut IDot11AdHocInterface,
+    ) -> HRESULT,
+    fn OnInterfaceRemove(
+        Signature: *mut GUID,
+    ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc28, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IEnumDot11AdHocNetworks(IEnumDot11AdHocNetworksVtbl): IUnknown(IUnknownVtbl) {
+    fn Next(
+        cElt: ULONG,
+        rgElt: *mut *mut IDot11AdHocNetwork,
+        pcEltFetched: *mut ULONG,
+    ) -> HRESULT,
+    fn Skip(
+        cElt: ULONG,
+    ) -> HRESULT,
+    fn Reset() -> HRESULT,
+    fn Clone(
+        ppEnum: *mut *mut IEnumDot11AdHocNetworks,
+    ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc29, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocNetwork(IDot11AdHocNetworkVtbl): IUnknown(IUnknownVtbl) {
+    fn GetStatus(
+        eStatus: *mut DOT11_ADHOC_NETWORK_CONNECTION_STATUS,
+    ) -> HRESULT,
+    fn GetSSID(
+        ppszwSSID: *mut LPWSTR,
+    ) -> HRESULT,
+    fn HasProfile(
+        pf11d: *mut BOOLEAN,
+    ) -> HRESULT,
+    fn GetProfileName(
+        ppszwProfileName: *mut LPWSTR,
+    ) -> HRESULT,
+    fn DeleteProfile() -> HRESULT,
+    fn GetSignalQuality(
+        puStrengthValue: *mut ULONG,
+        puStrengthMax: *mut ULONG,
+    ) -> HRESULT,
+    fn GetSecuritySetting(
+        pAdHocSecuritySetting: *mut *mut IDot11AdHocSecuritySettings,
+    ) -> HRESULT,
+    fn GetContextGuid(
+        pContextGuid: *mut GUID,
+    ) -> HRESULT,
+    fn GetSignature(
+        pSignature: *mut GUID,
+    ) -> HRESULT,
+    fn GetInterface(
+        pAdHocInterface: *mut *mut IDot11AdHocInterface,
+    ) -> HRESULT,
+    fn Connect(
+        Passphrase: LPCWSTR,
+        GeographicalId: LONG,
+        fSaveProfile: BOOLEAN,
+        fMakeSavedProfileUserSpecific: BOOLEAN,
+    ) -> HRESULT,
+    fn Disconnect() -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2a, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocNetworkNotificationSink(IDot11AdHocNetworkNotificationSinkVtbl):
+    IUnknown(IUnknownVtbl) {
+    fn OnStatusChange(
+        eStatus: DOT11_ADHOC_NETWORK_CONNECTION_STATUS,
+    ) -> HRESULT,
+    fn OnConnectFail(
+        eFailReason: DOT11_ADHOC_CONNECT_FAIL_REASON,
+    ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2b, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocInterface(IDot11AdHocInterfaceVtbl): IUnknown(IUnknownVtbl) {
+    fn GetDeviceSignature(
+        pSignature: *mut GUID,
+    ) -> HRESULT,
+    fn GetFriendlyName(
+        ppszName: *mut LPWSTR,
+    ) -> HRESULT,
+    fn IsDot11d(
+        pf11d: *mut BOOLEAN,
+    ) -> HRESULT,
+    fn IsAdHocCapable(
+        pfAdHocCapable: *mut BOOLEAN,
+    ) -> HRESULT,
+    fn IsRadioOn(
+        pfIsRadioOn: *mut BOOLEAN,
+    ) -> HRESULT,
+    fn GetActiveNetwork(
+        ppNetwork: *mut *mut IDot11AdHocNetwork,
+    ) -> HRESULT,
+    fn GetIEnumSecuritySettings(
+        ppEnum: *mut *mut IEnumDot11AdHocSecuritySettings,
+    ) -> HRESULT,
+    fn GetIEnumDot11AdHocNetworks(
+        pFilterGuid: *mut GUID,
+        ppEnum: *mut *mut IEnumDot11AdHocNetworks,
+    ) -> HRESULT,
+    fn GetStatus(
+        pState: *mut DOT11_ADHOC_NETWORK_CONNECTION_STATUS,
+    ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2c, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IEnumDot11AdHocInterfaces(IEnumDot11AdHocInterfacesVtbl): IUnknown(IUnknownVtbl) {
+    fn Next(
+        cElt: ULONG,
+        rgElt: *mut *mut IDot11AdHocInterface,
+        pcEltFetched: *mut ULONG,
+    ) -> HRESULT,
+    fn Skip(
+        cElt: ULONG,
+    ) -> HRESULT,
+    fn Reset() -> HRESULT,
+    fn Clone(
+        ppEnum: *mut *mut IEnumDot11AdHocInterfaces,
+    ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2d, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IEnumDot11AdHocSecuritySettings(IEnumDot11AdHocSecuritySettingsVtbl):
+    IUnknown(IUnknownVtbl) {
+    fn Next(
+        cElt: ULONG,
+        rgElt: *mut *mut IDot11AdHocSecuritySettings,
+        pcEltFetched: *mut ULONG,
+    ) -> HRESULT,
+    fn Skip(
+        cElt: ULONG,
+    ) -> HRESULT,
+    fn Reset() -> HRESULT,
+    fn Clone(
+        ppEnum: *mut *mut IEnumDot11AdHocSecuritySettings,
+    ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2e, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocSecuritySettings(IDot11AdHocSecuritySettingsVtbl): IUnknown(IUnknownVtbl) {
+    fn GetDot11AuthAlgorithm(
+        pAuth: *mut DOT11_ADHOC_AUTH_ALGORITHM,
+    ) -> HRESULT,
+    fn GetDot11CipherAlgorithm(
+        pCipher: *mut DOT11_ADHOC_CIPHER_ALGORITHM,
+    ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2f, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocInterfaceNotificationSink(IDot11AdHocInterfaceNotificationSinkVtbl):
+    IUnknown(IUnknownVtbl) {
+    fn OnConnectionStatusChange(
+        eStatus: DOT11_ADHOC_NETWORK_CONNECTION_STATUS,
+    ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdd06a84f, 0x83bd, 0x4d01, 0x8a, 0xb9, 0x23, 0x89, 0xfe, 0xa0, 0x86, 0x9e)]
+class Dot11AdHocManager;}
diff --git a/src/um/dot1x.rs b/src/um/dot1x.rs
new file mode 100644
index 000000000..326b7fc9b
--- /dev/null
+++ b/src/um/dot1x.rs
@@ -0,0 +1,151 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD};
+use um::eaptypes::EAP_METHOD_TYPE;
+use um::l2cmn::L2_REASON_CODE_ONEX_BASE;
+use um::winnt::HANDLE;
+ENUM!{enum ONEX_AUTH_IDENTITY {
+    OneXAuthIdentityNone = 0,
+    OneXAuthIdentityMachine = 1,
+    OneXAuthIdentityUser = 2,
+    OneXAuthIdentityExplicitUser = 3,
+    OneXAuthIdentityGuest = 4,
+    OneXAuthIdentityInvalid = 5,
+}}
+pub type PONEX_AUTH_IDENTITY = *mut ONEX_AUTH_IDENTITY;
+ENUM!{enum ONEX_AUTH_STATUS {
+    OneXAuthNotStarted = 0,
+    OneXAuthInProgress = 1,
+    OneXAuthNoAuthenticatorFound = 2,
+    OneXAuthSuccess = 3,
+    OneXAuthFailure = 4,
+    OneXAuthInvalid = 5,
+}}
+pub type PONEX_AUTH_STATUS = *mut ONEX_AUTH_STATUS;
+ENUM!{enum ONEX_REASON_CODE {
+    ONEX_REASON_CODE_SUCCESS = 0,
+    ONEX_REASON_START = L2_REASON_CODE_ONEX_BASE,
+    ONEX_UNABLE_TO_IDENTIFY_USER = 327681,
+    ONEX_IDENTITY_NOT_FOUND = 327682,
+    ONEX_UI_DISABLED = 327683,
+    ONEX_UI_FAILURE = 327684,
+    ONEX_EAP_FAILURE_RECEIVED = 327685,
+    ONEX_AUTHENTICATOR_NO_LONGER_PRESENT = 327686,
+    ONEX_NO_RESPONSE_TO_IDENTITY = 327687,
+    ONEX_PROFILE_VERSION_NOT_SUPPORTED = 327688,
+    ONEX_PROFILE_INVALID_LENGTH = 327689,
+    ONEX_PROFILE_DISALLOWED_EAP_TYPE = 327690,
+    ONEX_PROFILE_INVALID_EAP_TYPE_OR_FLAG = 327691,
+    ONEX_PROFILE_INVALID_ONEX_FLAGS = 327692,
+    ONEX_PROFILE_INVALID_TIMER_VALUE = 327693,
+    ONEX_PROFILE_INVALID_SUPPLICANT_MODE = 327694,
+    ONEX_PROFILE_INVALID_AUTH_MODE = 327695,
+    ONEX_PROFILE_INVALID_EAP_CONNECTION_PROPERTIES = 327696,
+    ONEX_UI_CANCELLED = 327697,
+    ONEX_PROFILE_INVALID_EXPLICIT_CREDENTIALS = 327698,
+    ONEX_PROFILE_EXPIRED_EXPLICIT_CREDENTIALS = 327699,
+    ONEX_UI_NOT_PERMITTED = 327700,
+}}
+pub type PONEX_REASON_CODE = *mut ONEX_REASON_CODE;
+ENUM!{enum ONEX_NOTIFICATION_TYPE {
+    OneXPublicNotificationBase = 0,
+    OneXNotificationTypeResultUpdate = 1,
+    OneXNotificationTypeAuthRestarted = 2,
+    OneXNotificationTypeEventInvalid = 3,
+    OneXNumNotifications = OneXNotificationTypeEventInvalid,
+}}
+pub type PONEX_NOTIFICATION_TYPE = *mut ONEX_NOTIFICATION_TYPE;
+ENUM!{enum ONEX_AUTH_RESTART_REASON {
+    OneXRestartReasonPeerInitiated = 0,
+    OneXRestartReasonMsmInitiated = 1,
+    OneXRestartReasonOneXHeldStateTimeout = 2,
+    OneXRestartReasonOneXAuthTimeout = 3,
+    OneXRestartReasonOneXConfigurationChanged = 4,
+    OneXRestartReasonOneXUserChanged = 5,
+    OneXRestartReasonQuarantineStateChanged = 6,
+    OneXRestartReasonAltCredsTrial = 7,
+    OneXRestartReasonInvalid = 8,
+}}
+pub type PONEX_AUTH_RESTART_REASON = *mut ONEX_AUTH_RESTART_REASON;
+STRUCT!{struct ONEX_VARIABLE_BLOB {
+    dwSize: DWORD,
+    dwOffset: DWORD,
+}}
+pub type PONEX_VARIABLE_BLOB = *mut ONEX_VARIABLE_BLOB;
+STRUCT!{struct ONEX_AUTH_PARAMS {
+    fUpdatePending: BOOL,
+    oneXConnProfile: ONEX_VARIABLE_BLOB,
+    authIdentity: ONEX_AUTH_IDENTITY,
+    dwQuarantineState: DWORD,
+    Bitfields: DWORD,
+    dwSessionId: DWORD,
+    hUserToken: HANDLE,
+    OneXUserProfile: ONEX_VARIABLE_BLOB,
+    Identity: ONEX_VARIABLE_BLOB,
+    UserName: ONEX_VARIABLE_BLOB,
+    Domain: ONEX_VARIABLE_BLOB,
+}}
+BITFIELD!{ONEX_AUTH_PARAMS Bitfields: DWORD [
+    fSessionId set_fSessionId[0..1],
+    fhUserToken set_fhUserToken[1..2],
+    fOnexUserProfile set_fOnexUserProfile[2..3],
+    fIdentity set_fIdentity[3..4],
+    fUserName set_fUserName[4..5],
+    fDomain set_fDomain[5..6],
+]}
+pub type PONEX_AUTH_PARAMS = *mut ONEX_AUTH_PARAMS;
+STRUCT!{struct ONEX_EAP_ERROR {
+    dwWinError: DWORD,
+    type_: EAP_METHOD_TYPE,
+    dwReasonCode: DWORD,
+    rootCauseGuid: GUID,
+    repairGuid: GUID,
+    helpLinkGuid: GUID,
+    Bitfields: DWORD,
+    RootCauseString: ONEX_VARIABLE_BLOB,
+    RepairString: ONEX_VARIABLE_BLOB,
+}}
+BITFIELD!{ONEX_EAP_ERROR Bitfields: DWORD [
+    fRootCauseString set_fRootCauseString[0..1],
+    fRepairString set_fRepairString[1..2],
+]}
+pub type PONEX_EAP_ERROR = *mut ONEX_EAP_ERROR;
+STRUCT!{struct ONEX_STATUS {
+    authStatus: ONEX_AUTH_STATUS,
+    dwReason: DWORD,
+    dwError: DWORD,
+}}
+pub type PONEX_STATUS = *mut ONEX_STATUS;
+ENUM!{enum ONEX_EAP_METHOD_BACKEND_SUPPORT {
+    OneXEapMethodBackendSupportUnknown = 0,
+    OneXEapMethodBackendSupported = 1,
+    OneXEapMethodBackendUnsupported = 2,
+}}
+STRUCT!{struct ONEX_RESULT_UPDATE_DATA {
+    oneXStatus: ONEX_STATUS,
+    BackendSupport: ONEX_EAP_METHOD_BACKEND_SUPPORT,
+    fBackendEngaged: BOOL,
+    Bitfields: DWORD,
+    authParams: ONEX_VARIABLE_BLOB,
+    eapError: ONEX_VARIABLE_BLOB,
+}}
+BITFIELD!{ONEX_RESULT_UPDATE_DATA Bitfields: DWORD [
+    fOneXAuthParams set_fOneXAuthParams[0..1],
+    fEapError set_fEapError[1..2],
+]}
+pub type PONEX_RESULT_UPDATE_DATA = *mut ONEX_RESULT_UPDATE_DATA;
+STRUCT!{struct ONEX_USER_INFO {
+    authIdentity: ONEX_AUTH_IDENTITY,
+    Bitfields: DWORD,
+    UserName: ONEX_VARIABLE_BLOB,
+    DomainName: ONEX_VARIABLE_BLOB,
+}}
+BITFIELD!{ONEX_USER_INFO Bitfields: DWORD [
+    fUserName set_fUserName[0..1],
+    fDomainName set_fDomainName[1..2],
+]}
+pub type PONEX_USER_INFO = *mut ONEX_USER_INFO;
diff --git a/src/um/eaptypes.rs b/src/um/eaptypes.rs
new file mode 100644
index 000000000..0a41e1a87
--- /dev/null
+++ b/src/um/eaptypes.rs
@@ -0,0 +1,403 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, BYTE, DWORD};
+use um::winnt::LPWSTR;
+pub const eapPropCipherSuiteNegotiation: DWORD = 0x00000001;
+pub const eapPropMutualAuth: DWORD = 0x00000002;
+pub const eapPropIntegrity: DWORD = 0x00000004;
+pub const eapPropReplayProtection: DWORD = 0x00000008;
+pub const eapPropConfidentiality: DWORD = 0x00000010;
+pub const eapPropKeyDerivation: DWORD = 0x00000020;
+pub const eapPropKeyStrength64: DWORD = 0x00000040;
+pub const eapPropKeyStrength128: DWORD = 0x00000080;
+pub const eapPropKeyStrength256: DWORD = 0x00000100;
+pub const eapPropKeyStrength512: DWORD = 0x00000200;
+pub const eapPropKeyStrength1024: DWORD = 0x00000400;
+pub const eapPropDictionaryAttackResistance: DWORD = 0x00000800;
+pub const eapPropFastReconnect: DWORD = 0x00001000;
+pub const eapPropCryptoBinding: DWORD = 0x00002000;
+pub const eapPropSessionIndependence: DWORD = 0x00004000;
+pub const eapPropFragmentation: DWORD = 0x00008000;
+pub const eapPropChannelBinding: DWORD = 0x00010000;
+pub const eapPropNap: DWORD = 0x00020000;
+pub const eapPropStandalone: DWORD = 0x00040000;
+pub const eapPropMppeEncryption: DWORD = 0x00080000;
+pub const eapPropTunnelMethod: DWORD = 0x00100000;
+pub const eapPropSupportsConfig: DWORD = 0x00200000;
+pub const eapPropCertifiedMethod: DWORD = 0x00400000;
+pub const eapPropHiddenMethod: DWORD = 0x00800000;
+pub const eapPropMachineAuth: DWORD = 0x01000000;
+pub const eapPropUserAuth: DWORD = 0x02000000;
+pub const eapPropIdentityPrivacy: DWORD = 0x04000000;
+pub const eapPropMethodChaining: DWORD = 0x08000000;
+pub const eapPropSharedStateEquivalence: DWORD = 0x10000000;
+pub const eapPropReserved: DWORD = 0x80000000;
+pub const EAP_VALUENAME_PROPERTIES: &'static str = "Properties";
+pub type EAP_SESSIONID = DWORD;
+STRUCT!{struct EAP_TYPE {
+    type_: BYTE,
+    dwVendorId: DWORD,
+    dwVendorType: DWORD,
+}}
+STRUCT!{struct EAP_METHOD_TYPE {
+    eapType: EAP_TYPE,
+    dwAuthorId: DWORD,
+}}
+STRUCT!{struct EAP_METHOD_INFO {
+    eaptype: EAP_METHOD_TYPE,
+    pwszAuthorName: LPWSTR,
+    pwszFriendlyName: LPWSTR,
+    eapProperties: DWORD,
+    pInnerMethodInfo: *mut EAP_METHOD_INFO,
+}}
+STRUCT!{struct EAP_METHOD_INFO_EX {
+    eaptype: EAP_METHOD_TYPE,
+    pwszAuthorName: LPWSTR,
+    pwszFriendlyName: LPWSTR,
+    eapProperties: DWORD,
+    pInnerMethodInfoArray: *mut EAP_METHOD_INFO_ARRAY_EX,
+}}
+STRUCT!{struct EAP_METHOD_INFO_ARRAY {
+    dwNumberOfMethods: DWORD,
+    pEapMethods: *mut EAP_METHOD_INFO,
+}}
+STRUCT!{struct EAP_METHOD_INFO_ARRAY_EX {
+    dwNumberOfMethods: DWORD,
+    pEapMethods: *mut EAP_METHOD_INFO_EX,
+}}
+STRUCT!{struct EAP_ERROR {
+    dwWinError: DWORD,
+    type_: EAP_METHOD_TYPE,
+    dwReasonCode: DWORD,
+    rootCauseGuid: GUID,
+    repairGuid: GUID,
+    helpLinkGuid: GUID,
+    pRootCauseString: LPWSTR,
+    pRepairString: LPWSTR,
+}}
+ENUM!{enum EAP_ATTRIBUTE_TYPE {
+    eatMinimum = 0,
+    eatUserName = 1,
+    eatUserPassword = 2,
+    eatMD5CHAPPassword = 3,
+    eatNASIPAddress = 4,
+    eatNASPort = 5,
+    eatServiceType = 6,
+    eatFramedProtocol = 7,
+    eatFramedIPAddress = 8,
+    eatFramedIPNetmask = 9,
+    eatFramedRouting = 10,
+    eatFilterId = 11,
+    eatFramedMTU = 12,
+    eatFramedCompression = 13,
+    eatLoginIPHost = 14,
+    eatLoginService = 15,
+    eatLoginTCPPort = 16,
+    eatUnassigned17 = 17,
+    eatReplyMessage = 18,
+    eatCallbackNumber = 19,
+    eatCallbackId = 20,
+    eatUnassigned21 = 21,
+    eatFramedRoute = 22,
+    eatFramedIPXNetwork = 23,
+    eatState = 24,
+    eatClass = 25,
+    eatVendorSpecific = 26,
+    eatSessionTimeout = 27,
+    eatIdleTimeout = 28,
+    eatTerminationAction = 29,
+    eatCalledStationId = 30,
+    eatCallingStationId = 31,
+    eatNASIdentifier = 32,
+    eatProxyState = 33,
+    eatLoginLATService = 34,
+    eatLoginLATNode = 35,
+    eatLoginLATGroup = 36,
+    eatFramedAppleTalkLink = 37,
+    eatFramedAppleTalkNetwork = 38,
+    eatFramedAppleTalkZone = 39,
+    eatAcctStatusType = 40,
+    eatAcctDelayTime = 41,
+    eatAcctInputOctets = 42,
+    eatAcctOutputOctets = 43,
+    eatAcctSessionId = 44,
+    eatAcctAuthentic = 45,
+    eatAcctSessionTime = 46,
+    eatAcctInputPackets = 47,
+    eatAcctOutputPackets = 48,
+    eatAcctTerminateCause = 49,
+    eatAcctMultiSessionId = 50,
+    eatAcctLinkCount = 51,
+    eatAcctEventTimeStamp = 55,
+    eatMD5CHAPChallenge = 60,
+    eatNASPortType = 61,
+    eatPortLimit = 62,
+    eatLoginLATPort = 63,
+    eatTunnelType = 64,
+    eatTunnelMediumType = 65,
+    eatTunnelClientEndpoint = 66,
+    eatTunnelServerEndpoint = 67,
+    eatARAPPassword = 70,
+    eatARAPFeatures = 71,
+    eatARAPZoneAccess = 72,
+    eatARAPSecurity = 73,
+    eatARAPSecurityData = 74,
+    eatPasswordRetry = 75,
+    eatPrompt = 76,
+    eatConnectInfo = 77,
+    eatConfigurationToken = 78,
+    eatEAPMessage = 79,
+    eatSignature = 80,
+    eatARAPChallengeResponse = 84,
+    eatAcctInterimInterval = 85,
+    eatNASIPv6Address = 95,
+    eatFramedInterfaceId = 96,
+    eatFramedIPv6Prefix = 97,
+    eatLoginIPv6Host = 98,
+    eatFramedIPv6Route = 99,
+    eatFramedIPv6Pool = 100,
+    eatARAPGuestLogon = 8096,
+    eatCertificateOID = 8097,
+    eatEAPConfiguration = 8098,
+    eatPEAPEmbeddedEAPTypeId = 8099,
+    eatPEAPFastRoamedSession = 8100,
+    eatFastRoamedSession = 8100,
+    eatEAPTLV = 8102,
+    eatCredentialsChanged = 8103,
+    eatInnerEapMethodType = 8104,
+    eatClearTextPassword = 8107,
+    eatQuarantineSoH = 8150,
+    eatCertificateThumbprint = 8250,
+    eatPeerId = 9000,
+    eatServerId = 9001,
+    eatMethodId = 9002,
+    eatEMSK = 9003,
+    eatSessionId = 9004,
+    eatReserved = 0xFFFFFFFF,
+}}
+pub type EapAttributeType = EAP_ATTRIBUTE_TYPE;
+STRUCT!{struct EAP_ATTRIBUTE {
+    eaType: EAP_ATTRIBUTE_TYPE,
+    dwLength: DWORD,
+    pValue: *mut BYTE,
+}}
+pub type EapAttribute = EAP_ATTRIBUTE;
+STRUCT!{struct EAP_ATTRIBUTES {
+    dwNumberOfAttributes: DWORD,
+    pAttribs: *mut EAP_ATTRIBUTE,
+}}
+pub type EapAttributes = EAP_ATTRIBUTES;
+pub const EAP_FLAG_Reserved1: DWORD = 0x00000001;
+pub const EAP_FLAG_NON_INTERACTIVE: DWORD = 0x00000002;
+pub const EAP_FLAG_LOGON: DWORD = 0x00000004;
+pub const EAP_FLAG_PREVIEW: DWORD = 0x00000008;
+pub const EAP_FLAG_Reserved2: DWORD = 0x00000010;
+pub const EAP_FLAG_MACHINE_AUTH: DWORD = 0x00000020;
+pub const EAP_FLAG_GUEST_ACCESS: DWORD = 0x00000040;
+pub const EAP_FLAG_Reserved3: DWORD = 0x00000080;
+pub const EAP_FLAG_Reserved4: DWORD = 0x00000100;
+pub const EAP_FLAG_RESUME_FROM_HIBERNATE: DWORD = 0x00000200;
+pub const EAP_FLAG_Reserved5: DWORD = 0x00000400;
+pub const EAP_FLAG_Reserved6: DWORD = 0x00000800;
+pub const EAP_FLAG_FULL_AUTH: DWORD = 0x00001000;
+pub const EAP_FLAG_PREFER_ALT_CREDENTIALS: DWORD = 0x00002000;
+pub const EAP_FLAG_Reserved7: DWORD = 0x00004000;
+pub const EAP_PEER_FLAG_HEALTH_STATE_CHANGE: DWORD = 0x00008000;
+pub const EAP_FLAG_SUPRESS_UI: DWORD = 0x00010000;
+pub const EAP_FLAG_PRE_LOGON: DWORD = 0x00020000;
+pub const EAP_FLAG_USER_AUTH: DWORD = 0x00040000;
+pub const EAP_FLAG_CONFG_READONLY: DWORD = 0x00080000;
+pub const EAP_FLAG_Reserved8: DWORD = 0x00100000;
+pub const EAP_FLAG_Reserved9: DWORD = 0x00400000;
+pub const EAP_FLAG_VPN: DWORD = 0x00800000;
+pub const EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT: DWORD = 0x00000000;
+pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD = 0x00000001;
+pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002;
+pub const EAP_UI_INPUT_FIELD_PROPS_DEFAULT: DWORD = EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT;
+pub const EAP_UI_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD =
+    EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE;
+pub const EAP_UI_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002;
+pub const EAP_UI_INPUT_FIELD_PROPS_READ_ONLY: DWORD = 0x00000004;
+ENUM!{enum EAP_CONFIG_INPUT_FIELD_TYPE {
+    EapConfigInputUsername = 0,
+    EapConfigInputPassword = 1,
+    EapConfigInputNetworkUsername = 2,
+    EapConfigInputNetworkPassword = 3,
+    EapConfigInputPin = 4,
+    EapConfigInputPSK = 5,
+    EapConfigInputEdit = 6,
+    EapConfigSmartCardUsername = 7,
+    EapConfigSmartCardError = 8,
+}}
+pub type PEAP_CONFIG_INPUT_FIELD_TYPE = *mut EAP_CONFIG_INPUT_FIELD_TYPE;
+pub const EAP_CREDENTIAL_VERSION: i32 = 1;
+pub const EAP_INTERACTIVE_UI_DATA_VERSION: i32 = 1;
+pub const EAPHOST_PEER_API_VERSION: i32 = 1;
+pub const EAPHOST_METHOD_API_VERSION: i32 = 1;
+pub const MAX_EAP_CONFIG_INPUT_FIELD_LENGTH: i32 = 256;
+pub const MAX_EAP_CONFIG_INPUT_FIELD_VALUE_LENGTH: i32 = 1024;
+STRUCT!{struct EAP_CONFIG_INPUT_FIELD_DATA {
+    dwSize: DWORD,
+    Type: EAP_CONFIG_INPUT_FIELD_TYPE,
+    dwFlagProps: DWORD,
+    pwszLabel: LPWSTR,
+    pwszData: LPWSTR,
+    dwMinDataLength: DWORD,
+    dwMaxDataLength: DWORD,
+}}
+pub type PEAP_CONFIG_INPUT_FIELD_DATA = *mut EAP_CONFIG_INPUT_FIELD_DATA;
+STRUCT!{struct EAP_CONFIG_INPUT_FIELD_ARRAY {
+    dwVersion: DWORD,
+    dwNumberOfFields: DWORD,
+    pFields: *mut EAP_CONFIG_INPUT_FIELD_DATA,
+}}
+pub type PEAP_CONFIG_INPUT_FIELD_ARRAY = *mut EAP_CONFIG_INPUT_FIELD_ARRAY;
+ENUM!{enum EAP_INTERACTIVE_UI_DATA_TYPE {
+    EapCredReq = 0,
+    EapCredResp = 1,
+    EapCredExpiryReq = 2,
+    EapCredExpiryResp = 3,
+    EapCredLogonReq = 4,
+    EapCredLogonResp = 5,
+}}
+pub type EAP_CRED_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY;
+pub type EAP_CRED_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY;
+pub type EAP_CRED_LOGON_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY;
+pub type EAP_CRED_LOGON_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY;
+STRUCT!{struct EAP_CRED_EXPIRY_REQ {
+    curCreds: EAP_CONFIG_INPUT_FIELD_ARRAY,
+    newCreds: EAP_CONFIG_INPUT_FIELD_ARRAY,
+}}
+pub type EAP_CRED_EXPIRY_RESP = EAP_CRED_EXPIRY_REQ;
+UNION!{union EAP_UI_DATA_FORMAT {
+    [usize; 1],
+    credData credData_mut: *mut EAP_CRED_REQ,
+    credExpiryData credExpiryData_mut: *mut EAP_CRED_EXPIRY_REQ,
+    credLogonData credLogonData_mut: *mut EAP_CRED_LOGON_REQ,
+}}
+STRUCT!{struct EAP_INTERACTIVE_UI_DATA {
+    dwVersion: DWORD,
+    dwSize: DWORD,
+    dwDataType: EAP_INTERACTIVE_UI_DATA_TYPE,
+    cbUiData: DWORD,
+    pbUiData: EAP_UI_DATA_FORMAT,
+}}
+ENUM!{enum EAP_METHOD_PROPERTY_TYPE {
+    emptPropCipherSuiteNegotiation = 0,
+    emptPropMutualAuth = 1,
+    emptPropIntegrity = 2,
+    emptPropReplayProtection = 3,
+    emptPropConfidentiality = 4,
+    emptPropKeyDerivation = 5,
+    emptPropKeyStrength64 = 6,
+    emptPropKeyStrength128 = 7,
+    emptPropKeyStrength256 = 8,
+    emptPropKeyStrength512 = 9,
+    emptPropKeyStrength1024 = 10,
+    emptPropDictionaryAttackResistance = 11,
+    emptPropFastReconnect = 12,
+    emptPropCryptoBinding = 13,
+    emptPropSessionIndependence = 14,
+    emptPropFragmentation = 15,
+    emptPropChannelBinding = 16,
+    emptPropNap = 17,
+    emptPropStandalone = 18,
+    emptPropMppeEncryption = 19,
+    emptPropTunnelMethod = 20,
+    emptPropSupportsConfig = 21,
+    emptPropCertifiedMethod = 22,
+    emptPropHiddenMethod = 23,
+    emptPropMachineAuth = 24,
+    emptPropUserAuth = 25,
+    emptPropIdentityPrivacy = 26,
+    emptPropMethodChaining = 27,
+    emptPropSharedStateEquivalence = 28,
+    emptLegacyMethodPropertyFlag = 31,
+    emptPropVendorSpecific = 255,
+}}
+ENUM!{enum EAP_METHOD_PROPERTY_VALUE_TYPE {
+    empvtBool = 0,
+    empvtDword = 1,
+    empvtString = 2,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_BOOL {
+    length: DWORD,
+    value: BOOL,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_DWORD {
+    length: DWORD,
+    value: DWORD,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_STRING {
+    length: DWORD,
+    value: *mut BYTE,
+}}
+UNION!{union EAP_METHOD_PROPERTY_VALUE {
+    [usize; 2],
+    empvBool empvBool_mut: EAP_METHOD_PROPERTY_VALUE_BOOL,
+    empvDword empvDword_mut: EAP_METHOD_PROPERTY_VALUE_DWORD,
+    empvString empvString_mut: EAP_METHOD_PROPERTY_VALUE_STRING,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY {
+    eapMethodPropertyType: EAP_METHOD_PROPERTY_TYPE,
+    eapMethodPropertyValueType: EAP_METHOD_PROPERTY_VALUE_TYPE,
+    eapMethodPropertyValue: EAP_METHOD_PROPERTY_VALUE,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY_ARRAY {
+    dwNumberOfProperties: DWORD,
+    pMethodProperty: *mut EAP_METHOD_PROPERTY,
+}}
+STRUCT!{struct EAPHOST_IDENTITY_UI_PARAMS {
+    eapMethodType: EAP_METHOD_TYPE,
+    dwFlags: DWORD,
+    dwSizeofConnectionData: DWORD,
+    pConnectionData: *mut BYTE,
+    dwSizeofUserData: DWORD,
+    pUserData: *mut BYTE,
+    dwSizeofUserDataOut: DWORD,
+    pUserDataOut: *mut BYTE,
+    pwszIdentity: LPWSTR,
+    dwError: DWORD,
+    pEapError: *mut EAP_ERROR,
+}}
+STRUCT!{struct EAPHOST_INTERACTIVE_UI_PARAMS {
+    dwSizeofContextData: DWORD,
+    pContextData: *mut BYTE,
+    dwSizeofInteractiveUIData: DWORD,
+    pInteractiveUIData: *mut BYTE,
+    dwError: DWORD,
+    pEapError: *mut EAP_ERROR,
+}}
+ENUM!{enum EapCredentialType {
+    EAP_EMPTY_CREDENTIAL = 0,
+    EAP_USERNAME_PASSWORD_CREDENTIAL = 1,
+    EAP_WINLOGON_CREDENTIAL = 2,
+    EAP_CERTIFICATE_CREDENTIAL = 3,
+    EAP_SIM_CREDENTIAL = 4,
+}}
+STRUCT!{struct EapUsernamePasswordCredential {
+    username: LPWSTR,
+    password: LPWSTR,
+}}
+pub const CERTIFICATE_HASH_LENGTH: usize = 20;
+STRUCT!{struct EapCertificateCredential {
+    certHash: [BYTE; CERTIFICATE_HASH_LENGTH],
+    password: LPWSTR,
+}}
+STRUCT!{struct EapSimCredential {
+    iccID: LPWSTR,
+}}
+UNION!{union EapCredentialTypeData {
+    [u32; 6] [u64; 4],
+    username_password username_password_mut: EapUsernamePasswordCredential,
+    certificate certificate_mut: EapCertificateCredential,
+    sim sim_mut: EapSimCredential,
+}}
+STRUCT!{struct EapCredential {
+    credType: EapCredentialType,
+    credData: EapCredentialTypeData,
+}}
diff --git a/src/um/l2cmn.rs b/src/um/l2cmn.rs
new file mode 100644
index 000000000..152aed13a
--- /dev/null
+++ b/src/um/l2cmn.rs
@@ -0,0 +1,55 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+//! Definitions and data structures for common layer 2.
+use shared::guiddef::GUID;
+use shared::minwindef::DWORD;
+use um::winnt::PVOID;
+pub const L2_PROFILE_MAX_NAME_LENGTH: usize = 256;
+pub const L2_NOTIFICATION_SOURCE_NONE: DWORD = 0;
+pub const L2_NOTIFICATION_SOURCE_DOT3_AUTO_CONFIG: DWORD = 0x00000001;
+pub const L2_NOTIFICATION_SOURCE_SECURITY: DWORD = 0x00000002;
+pub const L2_NOTIFICATION_SOURCE_ONEX: DWORD = 0x00000004;
+pub const L2_NOTIFICATION_SOURCE_WLAN_ACM: DWORD = 0x00000008;
+pub const L2_NOTIFICATION_SOURCE_WLAN_MSM: DWORD = 0x00000010;
+pub const L2_NOTIFICATION_SOURCE_WLAN_SECURITY: DWORD = 0x00000020;
+pub const L2_NOTIFICATION_SOURCE_WLAN_IHV: DWORD = 0x00000040;
+pub const L2_NOTIFICATION_SOURCE_WLAN_HNWK: DWORD = 0x00000080;
+pub const L2_NOTIFICATION_SOURCE_WCM: DWORD = 0x00000100;
+pub const L2_NOTIFICATION_SOURCE_WCM_CSP: DWORD = 0x00000200;
+pub const L2_NOTIFICATION_SOURCE_WFD: DWORD = 0x00000400;
+pub const L2_NOTIFICATION_SOURCE_ALL: DWORD = 0x0000ffff;
+pub const L2_NOTIFICATION_CODE_PUBLIC_BEGIN: DWORD = 0x00000000;
+pub const L2_NOTIFICATION_CODE_GROUP_SIZE: DWORD = 0x00001000;
+pub const L2_NOTIFICATION_CODE_V2_BEGIN: DWORD = L2_NOTIFICATION_CODE_PUBLIC_BEGIN
+    + L2_NOTIFICATION_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_GROUP_SIZE: u32 = 0x10000;
+pub const L2_REASON_CODE_GEN_BASE: u32 = 0x10000;
+pub const L2_REASON_CODE_DOT11_AC_BASE: u32 = L2_REASON_CODE_GEN_BASE + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_DOT11_MSM_BASE: u32 = L2_REASON_CODE_DOT11_AC_BASE
+    + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_DOT11_SECURITY_BASE: u32 = L2_REASON_CODE_DOT11_MSM_BASE
+    + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_ONEX_BASE: u32 = L2_REASON_CODE_DOT11_SECURITY_BASE
+    + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_DOT3_AC_BASE: u32 = L2_REASON_CODE_ONEX_BASE
+    + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_DOT3_MSM_BASE: u32 = L2_REASON_CODE_DOT3_AC_BASE
+    + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_PROFILE_BASE: u32 = L2_REASON_CODE_DOT3_MSM_BASE
+    + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_IHV_BASE: u32 = L2_REASON_CODE_PROFILE_BASE + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_WIMAX_BASE: u32 = L2_REASON_CODE_IHV_BASE + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_SUCCESS: u32 = 0;
+pub const L2_REASON_CODE_UNKNOWN: u32 = L2_REASON_CODE_GEN_BASE + 1;
+pub const L2_REASON_CODE_PROFILE_MISSING: u32 = 0x00000001;
+STRUCT!{struct L2_NOTIFICATION_DATA {
+    NotificationSource: DWORD,
+    NotificationCode: DWORD,
+    InterfaceGuid: GUID,
+    dwDataSize: DWORD,
+    pData: PVOID,
+}}
+pub type PL2_NOTIFICATION_DATA = *mut L2_NOTIFICATION_DATA;
diff --git a/src/um/mod.rs b/src/um/mod.rs
index 4276f982c..b7f0bca4e 100644
--- a/src/um/mod.rs
+++ b/src/um/mod.rs
@@ -7,6 +7,7 @@
 pub mod gl;
 #[cfg(feature = "accctrl")] pub mod accctrl;
 #[cfg(feature = "aclapi")] pub mod aclapi;
+#[cfg(feature = "adhoc")] pub mod adhoc;
 #[cfg(feature = "appmgmt")] pub mod appmgmt;
 #[cfg(feature = "audioclient")] pub mod audioclient;
 #[cfg(feature = "audiosessiontypes")] pub mod audiosessiontypes;
@@ -89,6 +90,7 @@ pub mod gl;
 #[cfg(feature = "dmusicc")] pub mod dmusicc;
 #[cfg(feature = "docobj")] pub mod docobj;
 #[cfg(feature = "documenttarget")] pub mod documenttarget;
+#[cfg(feature = "dot1x")] pub mod dot1x;
 #[cfg(feature = "dpa_dsa")] pub mod dpa_dsa;
 #[cfg(feature = "dpapi")] pub mod dpapi;
 #[cfg(feature = "dsgetdc")] pub mod dsgetdc;
@@ -105,6 +107,7 @@ pub mod gl;
 #[cfg(feature = "dxgidebug")] pub mod dxgidebug;
 #[cfg(feature = "dxva2api")] pub mod dxva2api;
 #[cfg(feature = "dxvahd")] pub mod dxvahd;
+#[cfg(feature = "eaptypes")] pub mod eaptypes;
 #[cfg(feature = "enclaveapi")] pub mod enclaveapi;
 #[cfg(feature = "endpointvolume")] pub mod endpointvolume;
 #[cfg(feature = "errhandlingapi")] pub mod errhandlingapi;
@@ -127,6 +130,7 @@ pub mod gl;
 #[cfg(feature = "jobapi2")] pub mod jobapi2;
 #[cfg(feature = "knownfolders")] pub mod knownfolders;
 #[cfg(feature = "ktmw32")] pub mod ktmw32;
+#[cfg(feature = "l2cmn")] pub mod l2cmn;
 #[cfg(feature = "libloaderapi")] pub mod libloaderapi;
 #[cfg(feature = "lmaccess")] pub mod lmaccess;
 #[cfg(feature = "lmalert")] pub mod lmalert;
@@ -285,6 +289,10 @@ pub mod gl;
 #[cfg(feature = "winusb")] pub mod winusb;
 #[cfg(feature = "winuser")] pub mod winuser;
 #[cfg(feature = "winver")] pub mod winver;
+#[cfg(feature = "wlanapi")] pub mod wlanapi;
+#[cfg(feature = "wlanihv")] pub mod wlanihv;
+#[cfg(feature = "wlanihvtypes")] pub mod wlanihvtypes;
+#[cfg(feature = "wlclient")] pub mod wlclient;
 #[cfg(feature = "wow64apiset")] pub mod wow64apiset;
 #[cfg(feature = "wpdmtpextensions")] pub mod wpdmtpextensions;
 #[cfg(feature = "ws2bth")] pub mod ws2bth;
diff --git a/src/um/wlanapi.rs b/src/um/wlanapi.rs
new file mode 100644
index 000000000..9584509da
--- /dev/null
+++ b/src/um/wlanapi.rs
@@ -0,0 +1,1459 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+//! Definitions and data structures for wlan auto config client side API.
+use shared::devpropdef::DEVPROPKEY;
+use shared::guiddef::{GUID, LPGUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, LPBYTE, PBOOL, PBYTE, PDWORD, PUCHAR, ULONG, USHORT};
+use shared::windef::HWND;
+use shared::windot11::{
+    DOT11_COUNTRY_OR_REGION_STRING, DOT11_HESSID, DOT11_MAC_ADDRESS, DOT11_PHY_TYPE,
+    DOT11_RATE_SET_MAX_LENGTH, PDOT11_BSSID_LIST, PDOT11_HESSID, PDOT11_MAC_ADDRESS,
+};
+use shared::wlantypes::{
+    DOT11_ACCESSNETWORKOPTIONS, DOT11_AUTH_ALGORITHM, DOT11_AUTH_CIPHER_PAIR, DOT11_BSS_TYPE,
+    DOT11_CIPHER_ALGORITHM, DOT11_SSID, DOT11_VENUEINFO, PDOT11_ACCESSNETWORKOPTIONS, PDOT11_SSID,
+};
+use um::eaptypes::EAP_METHOD_TYPE;
+use um::l2cmn::{
+    L2_NOTIFICATION_CODE_PUBLIC_BEGIN, L2_NOTIFICATION_CODE_V2_BEGIN, L2_NOTIFICATION_DATA,
+    L2_NOTIFICATION_SOURCE_ALL, L2_NOTIFICATION_SOURCE_NONE, L2_NOTIFICATION_SOURCE_ONEX,
+    L2_NOTIFICATION_SOURCE_WLAN_ACM, L2_NOTIFICATION_SOURCE_WLAN_HNWK,
+    L2_NOTIFICATION_SOURCE_WLAN_IHV, L2_NOTIFICATION_SOURCE_WLAN_MSM,
+    L2_NOTIFICATION_SOURCE_WLAN_SECURITY, L2_PROFILE_MAX_NAME_LENGTH,
+    L2_REASON_CODE_DOT11_AC_BASE, L2_REASON_CODE_DOT11_MSM_BASE,
+    L2_REASON_CODE_DOT11_SECURITY_BASE, L2_REASON_CODE_GROUP_SIZE, L2_REASON_CODE_PROFILE_BASE,
+    L2_REASON_CODE_SUCCESS, L2_REASON_CODE_UNKNOWN,
+};
+use um::winnt::{
+    BOOLEAN, DELETE, FILE_EXECUTE, FILE_READ_DATA, FILE_WRITE_DATA, HANDLE, LONG, LPCWSTR, LPWSTR,
+    PHANDLE, PVOID, PWCHAR, STANDARD_RIGHTS_EXECUTE, STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE,
+    ULONGLONG, WCHAR, WRITE_DAC,
+};
+pub const WLAN_API_VERSION_1_0: DWORD = 0x00000001;
+pub const WLAN_API_VERSION_2_0: DWORD = 0x00000002;
+#[inline]
+pub fn WLAN_API_VERSION_MAJOR(v: u32) -> u32 {
+    v & 0xffff
+}
+#[inline]
+pub fn WLAN_API_VERSION_MINOR(v: u32) -> u32 {
+    v >> 16
+}
+#[inline]
+pub fn WLAN_API_MAKE_VERSION(major: u32, minor: u32) -> u32 {
+    minor << 16 | major
+}
+pub const WLAN_API_VERSION: u32 = WLAN_API_VERSION_2_0;
+pub const WLAN_MAX_NAME_LENGTH: usize = L2_PROFILE_MAX_NAME_LENGTH;
+pub const WLAN_PROFILE_GROUP_POLICY: DWORD = 0x00000001;
+pub const WLAN_PROFILE_USER: DWORD = 0x00000002;
+pub const WLAN_PROFILE_GET_PLAINTEXT_KEY: DWORD = 0x00000004;
+pub const WLAN_PROFILE_CONNECTION_MODE_SET_BY_CLIENT: DWORD = 0x00010000;
+pub const WLAN_PROFILE_CONNECTION_MODE_AUTO: DWORD = 0x00020000;
+pub const WLAN_SET_EAPHOST_DATA_ALL_USERS: DWORD = 0x00000001;
+STRUCT!{struct WLAN_PROFILE_INFO {
+    strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+    dwFlags: DWORD,
+}}
+pub type PWLAN_PROFILE_INFO = *mut WLAN_PROFILE_INFO;
+STRUCT!{struct DOT11_NETWORK {
+    dot11Ssid: DOT11_SSID,
+    dot11BssType: DOT11_BSS_TYPE,
+}}
+pub type PDOT11_NETWORK = *mut DOT11_NETWORK;
+pub const DOT11_PSD_IE_MAX_DATA_SIZE: DWORD = 240;
+pub const DOT11_PSD_IE_MAX_ENTRY_NUMBER: DWORD = 5;
+STRUCT!{struct WLAN_RAW_DATA {
+    dwDataSize: DWORD,
+    DataBlob: [BYTE; 1],
+}}
+pub type PWLAN_RAW_DATA = *mut WLAN_RAW_DATA;
+STRUCT!{struct WLAN_RAW_DATA_LIST_DataList {
+    dwDataOffset: DWORD,
+    dwDataSize: DWORD,
+}}
+STRUCT!{struct WLAN_RAW_DATA_LIST {
+    dwTotalSize: DWORD,
+    dwNumberOfItems: DWORD,
+    DataList: [WLAN_RAW_DATA_LIST_DataList; 1],
+}}
+pub type PWLAN_RAW_DATA_LIST = *mut WLAN_RAW_DATA_LIST;
+ENUM!{enum WLAN_CONNECTION_MODE {
+    wlan_connection_mode_profile = 0,
+    wlan_connection_mode_temporary_profile = 1,
+    wlan_connection_mode_discovery_secure = 2,
+    wlan_connection_mode_discovery_unsecure = 3,
+    wlan_connection_mode_auto = 4,
+    wlan_connection_mode_invalid = 5,
+}}
+pub type PWLAN_CONNECTION_MODE = *mut WLAN_CONNECTION_MODE;
+pub type WLAN_REASON_CODE = DWORD;
+pub type PWLAN_REASON_CODE = *mut DWORD;
+pub const WLAN_REASON_CODE_SUCCESS: WLAN_REASON_CODE = L2_REASON_CODE_SUCCESS;
+pub const WLAN_REASON_CODE_UNKNOWN: WLAN_REASON_CODE = L2_REASON_CODE_UNKNOWN;
+pub const WLAN_REASON_CODE_RANGE_SIZE: WLAN_REASON_CODE = L2_REASON_CODE_GROUP_SIZE;
+pub const WLAN_REASON_CODE_BASE: WLAN_REASON_CODE = L2_REASON_CODE_DOT11_AC_BASE;
+pub const WLAN_REASON_CODE_AC_BASE: WLAN_REASON_CODE = L2_REASON_CODE_DOT11_AC_BASE;
+pub const WLAN_REASON_CODE_AC_CONNECT_BASE: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_BASE
+    + WLAN_REASON_CODE_RANGE_SIZE / 2;
+pub const WLAN_REASON_CODE_AC_END: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_BASE
+    + WLAN_REASON_CODE_RANGE_SIZE - 1;
+pub const WLAN_REASON_CODE_PROFILE_BASE: WLAN_REASON_CODE = L2_REASON_CODE_PROFILE_BASE;
+pub const WLAN_REASON_CODE_PROFILE_CONNECT_BASE: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+    + WLAN_REASON_CODE_RANGE_SIZE / 2;
+pub const WLAN_REASON_CODE_PROFILE_END: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+    + WLAN_REASON_CODE_RANGE_SIZE - 1;
+pub const WLAN_REASON_CODE_MSM_BASE: WLAN_REASON_CODE = L2_REASON_CODE_DOT11_MSM_BASE;
+pub const WLAN_REASON_CODE_MSM_CONNECT_BASE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE
+    + WLAN_REASON_CODE_RANGE_SIZE / 2;
+pub const WLAN_REASON_CODE_MSM_END: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE
+    + WLAN_REASON_CODE_RANGE_SIZE - 1;
+pub const WLAN_REASON_CODE_MSMSEC_BASE: WLAN_REASON_CODE = L2_REASON_CODE_DOT11_SECURITY_BASE;
+pub const WLAN_REASON_CODE_MSMSEC_CONNECT_BASE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE
+    + WLAN_REASON_CODE_RANGE_SIZE / 2;
+pub const WLAN_REASON_CODE_MSMSEC_END: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE
+    + WLAN_REASON_CODE_RANGE_SIZE - 1;
+pub const WLAN_REASON_CODE_NETWORK_NOT_COMPATIBLE: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_BASE + 1;
+pub const WLAN_REASON_CODE_PROFILE_NOT_COMPATIBLE: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_BASE + 2;
+pub const WLAN_REASON_CODE_NO_AUTO_CONNECTION: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+    + 1;
+pub const WLAN_REASON_CODE_NOT_VISIBLE: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 2;
+pub const WLAN_REASON_CODE_GP_DENIED: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 3;
+pub const WLAN_REASON_CODE_USER_DENIED: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 4;
+pub const WLAN_REASON_CODE_BSS_TYPE_NOT_ALLOWED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_AC_CONNECT_BASE + 5;
+pub const WLAN_REASON_CODE_IN_FAILED_LIST: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 6;
+pub const WLAN_REASON_CODE_IN_BLOCKED_LIST: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+    + 7;
+pub const WLAN_REASON_CODE_SSID_LIST_TOO_LONG: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+    + 8;
+pub const WLAN_REASON_CODE_CONNECT_CALL_FAIL: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+    + 9;
+pub const WLAN_REASON_CODE_SCAN_CALL_FAIL: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+    + 10;
+pub const WLAN_REASON_CODE_NETWORK_NOT_AVAILABLE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_AC_CONNECT_BASE + 11;
+pub const WLAN_REASON_CODE_PROFILE_CHANGED_OR_DELETED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_AC_CONNECT_BASE + 12;
+pub const WLAN_REASON_CODE_KEY_MISMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 13;
+pub const WLAN_REASON_CODE_USER_NOT_RESPOND: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+    + 14;
+pub const WLAN_REASON_CODE_AP_PROFILE_NOT_ALLOWED_FOR_CLIENT: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_AC_CONNECT_BASE + 15;
+pub const WLAN_REASON_CODE_AP_PROFILE_NOT_ALLOWED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_AC_CONNECT_BASE + 16;
+pub const WLAN_REASON_CODE_HOTSPOT2_PROFILE_DENIED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_AC_CONNECT_BASE + 17;
+pub const WLAN_REASON_CODE_INVALID_PROFILE_SCHEMA: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+    + 1;
+pub const WLAN_REASON_CODE_PROFILE_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 2;
+pub const WLAN_REASON_CODE_INVALID_PROFILE_NAME: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+    + 3;
+pub const WLAN_REASON_CODE_INVALID_PROFILE_TYPE: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+    + 4;
+pub const WLAN_REASON_CODE_INVALID_PHY_TYPE: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 5;
+pub const WLAN_REASON_CODE_MSM_SECURITY_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+    + 6;
+pub const WLAN_REASON_CODE_IHV_SECURITY_NOT_SUPPORTED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 7;
+pub const WLAN_REASON_CODE_IHV_OUI_MISMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 8;
+pub const WLAN_REASON_CODE_IHV_OUI_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 9;
+pub const WLAN_REASON_CODE_IHV_SETTINGS_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+    + 10;
+pub const WLAN_REASON_CODE_CONFLICT_SECURITY: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+    + 11;
+pub const WLAN_REASON_CODE_SECURITY_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 12;
+pub const WLAN_REASON_CODE_INVALID_BSS_TYPE: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 13;
+pub const WLAN_REASON_CODE_INVALID_ADHOC_CONNECTION_MODE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 14;
+pub const WLAN_REASON_CODE_NON_BROADCAST_SET_FOR_ADHOC: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 15;
+pub const WLAN_REASON_CODE_AUTO_SWITCH_SET_FOR_ADHOC: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 16;
+pub const WLAN_REASON_CODE_AUTO_SWITCH_SET_FOR_MANUAL_CONNECTION: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 17;
+pub const WLAN_REASON_CODE_IHV_SECURITY_ONEX_MISSING: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 18;
+pub const WLAN_REASON_CODE_PROFILE_SSID_INVALID: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+    + 19;
+pub const WLAN_REASON_CODE_TOO_MANY_SSID: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 20;
+pub const WLAN_REASON_CODE_IHV_CONNECTIVITY_NOT_SUPPORTED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 21;
+pub const WLAN_REASON_CODE_BAD_MAX_NUMBER_OF_CLIENTS_FOR_AP: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 22;
+pub const WLAN_REASON_CODE_INVALID_CHANNEL: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 23;
+pub const WLAN_REASON_CODE_OPERATION_MODE_NOT_SUPPORTED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 24;
+pub const WLAN_REASON_CODE_AUTO_AP_PROFILE_NOT_ALLOWED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 25;
+pub const WLAN_REASON_CODE_AUTO_CONNECTION_NOT_ALLOWED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 26;
+pub const WLAN_REASON_CODE_HOTSPOT2_PROFILE_NOT_ALLOWED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_PROFILE_BASE + 27;
+pub const WLAN_REASON_CODE_UNSUPPORTED_SECURITY_SET_BY_OS: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_BASE + 1;
+pub const WLAN_REASON_CODE_UNSUPPORTED_SECURITY_SET: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE
+    + 2;
+pub const WLAN_REASON_CODE_BSS_TYPE_UNMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE + 3;
+pub const WLAN_REASON_CODE_PHY_TYPE_UNMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE + 4;
+pub const WLAN_REASON_CODE_DATARATE_UNMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE + 5;
+pub const WLAN_REASON_CODE_USER_CANCELLED: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+    + 1;
+pub const WLAN_REASON_CODE_ASSOCIATION_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 2;
+pub const WLAN_REASON_CODE_ASSOCIATION_TIMEOUT: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 3;
+pub const WLAN_REASON_CODE_PRE_SECURITY_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 4;
+pub const WLAN_REASON_CODE_START_SECURITY_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 5;
+pub const WLAN_REASON_CODE_SECURITY_FAILURE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+    + 6;
+pub const WLAN_REASON_CODE_SECURITY_TIMEOUT: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+    + 7;
+pub const WLAN_REASON_CODE_ROAMING_FAILURE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+    + 8;
+pub const WLAN_REASON_CODE_ROAMING_SECURITY_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 9;
+pub const WLAN_REASON_CODE_ADHOC_SECURITY_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 10;
+pub const WLAN_REASON_CODE_DRIVER_DISCONNECTED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 11;
+pub const WLAN_REASON_CODE_DRIVER_OPERATION_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 12;
+pub const WLAN_REASON_CODE_IHV_NOT_AVAILABLE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+    + 13;
+pub const WLAN_REASON_CODE_IHV_NOT_RESPONDING: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+    + 14;
+pub const WLAN_REASON_CODE_DISCONNECT_TIMEOUT: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+    + 15;
+pub const WLAN_REASON_CODE_INTERNAL_FAILURE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+    + 16;
+pub const WLAN_REASON_CODE_UI_REQUEST_TIMEOUT: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+    + 17;
+pub const WLAN_REASON_CODE_TOO_MANY_SECURITY_ATTEMPTS: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 18;
+pub const WLAN_REASON_CODE_AP_STARTING_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSM_CONNECT_BASE + 19;
+pub const WLAN_REASON_CODE_MSMSEC_MIN: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_KEY_INDEX: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 1;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_PSK_PRESENT: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 2;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_KEY_LENGTH: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 3;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_PSK_LENGTH: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 4;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_NO_AUTH_CIPHER_SPECIFIED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 5;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_TOO_MANY_AUTH_CIPHER_SPECIFIED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 6;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_DUPLICATE_AUTH_CIPHER: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 7;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_RAWDATA_INVALID: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 8;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_AUTH_CIPHER: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 9;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_ONEX_DISABLED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 10;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_ONEX_ENABLED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 11;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PMKCACHE_MODE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 12;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PMKCACHE_SIZE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 13;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PMKCACHE_TTL: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 14;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PREAUTH_MODE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 15;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PREAUTH_THROTTLE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 16;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_PREAUTH_ONLY_ENABLED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 17;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_NETWORK: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 18;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_NIC: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE
+    + 19;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 20;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_DISCOVERY: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 21;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_PASSPHRASE_CHAR: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 22;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_KEYMATERIAL_CHAR: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 23;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_WRONG_KEYTYPE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 24;
+pub const WLAN_REASON_CODE_MSMSEC_MIXED_CELL: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE + 25;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_AUTH_TIMERS_INVALID: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 26;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_GKEY_INTV: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 27;
+pub const WLAN_REASON_CODE_MSMSEC_TRANSITION_NETWORK: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 28;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_KEY_UNMAPPED_CHAR: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 29;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE_AUTH: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 30;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE_CIPHER: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 31;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_SAFE_MODE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 32;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE_SAFE_MODE_NIC: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 33;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE_SAFE_MODE_NW: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 34;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_UNSUPPORTED_AUTH: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 35;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_UNSUPPORTED_CIPHER: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 36;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_MFP_NW_NIC: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_BASE + 37;
+pub const WLAN_REASON_CODE_MSMSEC_UI_REQUEST_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 1;
+pub const WLAN_REASON_CODE_MSMSEC_AUTH_START_TIMEOUT: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 2;
+pub const WLAN_REASON_CODE_MSMSEC_AUTH_SUCCESS_TIMEOUT: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 3;
+pub const WLAN_REASON_CODE_MSMSEC_KEY_START_TIMEOUT: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 4;
+pub const WLAN_REASON_CODE_MSMSEC_KEY_SUCCESS_TIMEOUT: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 5;
+pub const WLAN_REASON_CODE_MSMSEC_M3_MISSING_KEY_DATA: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 6;
+pub const WLAN_REASON_CODE_MSMSEC_M3_MISSING_IE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 7;
+pub const WLAN_REASON_CODE_MSMSEC_M3_MISSING_GRP_KEY: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 8;
+pub const WLAN_REASON_CODE_MSMSEC_PR_IE_MATCHING: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 9;
+pub const WLAN_REASON_CODE_MSMSEC_SEC_IE_MATCHING: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 10;
+pub const WLAN_REASON_CODE_MSMSEC_NO_PAIRWISE_KEY: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 11;
+pub const WLAN_REASON_CODE_MSMSEC_G1_MISSING_KEY_DATA: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 12;
+pub const WLAN_REASON_CODE_MSMSEC_G1_MISSING_GRP_KEY: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 13;
+pub const WLAN_REASON_CODE_MSMSEC_PEER_INDICATED_INSECURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 14;
+pub const WLAN_REASON_CODE_MSMSEC_NO_AUTHENTICATOR: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 15;
+pub const WLAN_REASON_CODE_MSMSEC_NIC_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 16;
+pub const WLAN_REASON_CODE_MSMSEC_CANCELLED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 17;
+pub const WLAN_REASON_CODE_MSMSEC_KEY_FORMAT: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 18;
+pub const WLAN_REASON_CODE_MSMSEC_DOWNGRADE_DETECTED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 19;
+pub const WLAN_REASON_CODE_MSMSEC_PSK_MISMATCH_SUSPECTED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 20;
+pub const WLAN_REASON_CODE_MSMSEC_FORCED_FAILURE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 21;
+pub const WLAN_REASON_CODE_MSMSEC_M3_TOO_MANY_RSNIE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 22;
+pub const WLAN_REASON_CODE_MSMSEC_M2_MISSING_KEY_DATA: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 23;
+pub const WLAN_REASON_CODE_MSMSEC_M2_MISSING_IE: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 24;
+pub const WLAN_REASON_CODE_MSMSEC_AUTH_WCN_COMPLETED: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 25;
+pub const WLAN_REASON_CODE_MSMSEC_M3_MISSING_MGMT_GRP_KEY: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 26;
+pub const WLAN_REASON_CODE_MSMSEC_G1_MISSING_MGMT_GRP_KEY: WLAN_REASON_CODE =
+    WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 27;
+pub const WLAN_REASON_CODE_MSMSEC_MAX: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_END;
+pub type WLAN_SIGNAL_QUALITY = ULONG;
+pub type PWLAN_SIGNAL_QUALITY = *mut ULONG;
+pub const WLAN_AVAILABLE_NETWORK_CONNECTED: DWORD = 0x00000001;
+pub const WLAN_AVAILABLE_NETWORK_HAS_PROFILE: DWORD = 0x00000002;
+pub const WLAN_AVAILABLE_NETWORK_CONSOLE_USER_PROFILE: DWORD = 0x00000004;
+pub const WLAN_AVAILABLE_NETWORK_INTERWORKING_SUPPORTED: DWORD = 0x00000008;
+pub const WLAN_AVAILABLE_NETWORK_HOTSPOT2_ENABLED: DWORD = 0x00000010;
+pub const WLAN_AVAILABLE_NETWORK_ANQP_SUPPORTED: DWORD = 0x00000020;
+pub const WLAN_AVAILABLE_NETWORK_HOTSPOT2_DOMAIN: DWORD = 0x00000040;
+pub const WLAN_AVAILABLE_NETWORK_HOTSPOT2_ROAMING: DWORD = 0x00000080;
+pub const WLAN_AVAILABLE_NETWORK_AUTO_CONNECT_FAILED: DWORD = 0x00000100;
+pub const WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES: DWORD = 0x00000001;
+pub const WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES: DWORD = 0x00000002;
+STRUCT!{struct WLAN_RATE_SET {
+    uRateSetLength: ULONG,
+    usRateSet: [USHORT; DOT11_RATE_SET_MAX_LENGTH],
+}}
+pub type PWLAN_RATE_SET = *mut WLAN_RATE_SET;
+pub const WLAN_MAX_PHY_TYPE_NUMBER: usize = 8;
+STRUCT!{struct WLAN_AVAILABLE_NETWORK {
+    strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+    dot11Ssid: DOT11_SSID,
+    dot11BssType: DOT11_BSS_TYPE,
+    uNumberOfBssids: ULONG,
+    bNetworkConnectable: BOOL,
+    wlanNotConnectableReason: WLAN_REASON_CODE,
+    uNumberOfPhyTypes: ULONG,
+    dot11PhyTypes: [DOT11_PHY_TYPE; WLAN_MAX_PHY_TYPE_NUMBER],
+    bMorePhyTypes: BOOL,
+    wlanSignalQuality: WLAN_SIGNAL_QUALITY,
+    bSecurityEnabled: BOOL,
+    dot11DefaultAuthAlgorithm: DOT11_AUTH_ALGORITHM,
+    dot11DefaultCipherAlgorithm: DOT11_CIPHER_ALGORITHM,
+    dwFlags: DWORD,
+    dwReserved: DWORD,
+}}
+pub type PWLAN_AVAILABLE_NETWORK = *mut WLAN_AVAILABLE_NETWORK;
+STRUCT!{struct WLAN_AVAILABLE_NETWORK_V2 {
+    strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+    dot11Ssid: DOT11_SSID,
+    dot11BssType: DOT11_BSS_TYPE,
+    uNumberOfBssids: ULONG,
+    bNetworkConnectable: BOOL,
+    wlanNotConnectableReason: WLAN_REASON_CODE,
+    uNumberOfPhyTypes: ULONG,
+    dot11PhyTypes: [DOT11_PHY_TYPE; WLAN_MAX_PHY_TYPE_NUMBER],
+    bMorePhyTypes: BOOL,
+    wlanSignalQuality: WLAN_SIGNAL_QUALITY,
+    bSecurityEnabled: BOOL,
+    dot11DefaultAuthAlgorithm: DOT11_AUTH_ALGORITHM,
+    dot11DefaultCipherAlgorithm: DOT11_CIPHER_ALGORITHM,
+    dwFlags: DWORD,
+    AccessNetworkOptions: DOT11_ACCESSNETWORKOPTIONS,
+    dot11HESSID: DOT11_HESSID,
+    VenueInfo: DOT11_VENUEINFO,
+    dwReserved: DWORD,
+}}
+pub type PWLAN_AVAILABLE_NETWORK_V2 = *mut WLAN_AVAILABLE_NETWORK_V2;
+STRUCT!{struct WLAN_BSS_ENTRY {
+    dot11Ssid: DOT11_SSID,
+    uPhyId: ULONG,
+    dot11Bssid: DOT11_MAC_ADDRESS,
+    dot11BssType: DOT11_BSS_TYPE,
+    dot11BssPhyType: DOT11_PHY_TYPE,
+    lRssi: LONG,
+    uLinkQuality: ULONG,
+    bInRegDomain: BOOLEAN,
+    usBeaconPeriod: USHORT,
+    ullTimestamp: ULONGLONG,
+    ullHostTimestamp: ULONGLONG,
+    usCapabilityInformation: USHORT,
+    ulChCenterFrequency: ULONG,
+    wlanRateSet: WLAN_RATE_SET,
+    ulIeOffset: ULONG,
+    ulIeSize: ULONG,
+}}
+pub type PWLAN_BSS_ENTRY = *mut WLAN_BSS_ENTRY;
+STRUCT!{struct WLAN_BSS_LIST {
+    dwTotalSize: DWORD,
+    dwNumberOfItems: DWORD,
+    wlanBssEntries: [WLAN_BSS_ENTRY; 1],
+}}
+pub type PWLAN_BSS_LIST = *mut WLAN_BSS_LIST;
+ENUM!{enum WLAN_INTERFACE_STATE {
+    wlan_interface_state_not_ready = 0,
+    wlan_interface_state_connected = 1,
+    wlan_interface_state_ad_hoc_network_formed = 2,
+    wlan_interface_state_disconnecting = 3,
+    wlan_interface_state_disconnected = 4,
+    wlan_interface_state_associating = 5,
+    wlan_interface_state_discovering = 6,
+    wlan_interface_state_authenticating = 7,
+}}
+pub type PWLAN_INTERFACE_STATE = *mut WLAN_INTERFACE_STATE;
+ENUM!{enum WLAN_ADHOC_NETWORK_STATE {
+    wlan_adhoc_network_state_formed = 0,
+    wlan_adhoc_network_state_connected = 1,
+}}
+pub type PWLAN_ADHOC_NETWORK_STATE = *mut WLAN_ADHOC_NETWORK_STATE;
+STRUCT!{struct WLAN_INTERFACE_INFO {
+    InterfaceGuid: GUID,
+    strInterfaceDescription: [WCHAR; WLAN_MAX_NAME_LENGTH],
+    isState: WLAN_INTERFACE_STATE,
+}}
+pub type PWLAN_INTERFACE_INFO = *mut WLAN_INTERFACE_INFO;
+STRUCT!{struct WLAN_ASSOCIATION_ATTRIBUTES {
+    dot11Ssid: DOT11_SSID,
+    dot11BssType: DOT11_BSS_TYPE,
+    dot11Bssid: DOT11_MAC_ADDRESS,
+    dot11PhyType: DOT11_PHY_TYPE,
+    uDot11PhyIndex: ULONG,
+    wlanSignalQuality: WLAN_SIGNAL_QUALITY,
+    ulRxRate: ULONG,
+    ulTxRate: ULONG,
+}}
+pub type PWLAN_ASSOCIATION_ATTRIBUTES = *mut WLAN_ASSOCIATION_ATTRIBUTES;
+STRUCT!{struct WLAN_SECURITY_ATTRIBUTES {
+    bSecurityEnabled: BOOL,
+    bOneXEnabled: BOOL,
+    dot11AuthAlgorithm: DOT11_AUTH_ALGORITHM,
+    dot11CipherAlgorithm: DOT11_CIPHER_ALGORITHM,
+}}
+pub type PWLAN_SECURITY_ATTRIBUTES = *mut WLAN_SECURITY_ATTRIBUTES;
+STRUCT!{struct WLAN_CONNECTION_ATTRIBUTES {
+    isState: WLAN_INTERFACE_STATE,
+    wlanConnectionMode: WLAN_CONNECTION_MODE,
+    strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+    wlanAssociationAttributes: WLAN_ASSOCIATION_ATTRIBUTES,
+    wlanSecurityAttributes: WLAN_SECURITY_ATTRIBUTES,
+}}
+pub type PWLAN_CONNECTION_ATTRIBUTES = *mut WLAN_CONNECTION_ATTRIBUTES;
+ENUM!{enum DOT11_RADIO_STATE {
+    dot11_radio_state_unknown = 0,
+    dot11_radio_state_on = 1,
+    dot11_radio_state_off = 2,
+}}
+pub type PDOT11_RADIO_STATE = *mut DOT11_RADIO_STATE;
+pub const WLAN_MAX_PHY_INDEX: usize = 64;
+STRUCT!{struct WLAN_PHY_RADIO_STATE {
+    dwPhyIndex: DWORD,
+    dot11SoftwareRadioState: DOT11_RADIO_STATE,
+    dot11HardwareRadioState: DOT11_RADIO_STATE,
+}}
+pub type PWLAN_PHY_RADIO_STATE = *mut WLAN_PHY_RADIO_STATE;
+STRUCT!{struct WLAN_RADIO_STATE {
+    dwNumberOfPhys: DWORD,
+    PhyRadioState: [WLAN_PHY_RADIO_STATE; WLAN_MAX_PHY_INDEX],
+}}
+pub type PWLAN_RADIO_STATE = *mut WLAN_RADIO_STATE;
+ENUM!{enum WLAN_OPERATIONAL_STATE {
+    wlan_operational_state_unknown = 0,
+    wlan_operational_state_off = 1,
+    wlan_operational_state_on = 2,
+    wlan_operational_state_going_off = 3,
+    wlan_operational_state_going_on = 4,
+}}
+pub type PWLAN_OPERATIONAL_STATE = *mut WLAN_OPERATIONAL_STATE;
+ENUM!{enum WLAN_INTERFACE_TYPE {
+    wlan_interface_type_emulated_802_11 = 0,
+    wlan_interface_type_native_802_11 = 1,
+    wlan_interface_type_invalid = 2,
+}}
+pub type PWLAN_INTERFACE_TYPE = *mut WLAN_INTERFACE_TYPE;
+STRUCT!{struct WLAN_INTERFACE_CAPABILITY {
+    interfaceType: WLAN_INTERFACE_TYPE,
+    bDot11DSupported: BOOL,
+    dwMaxDesiredSsidListSize: DWORD,
+    dwMaxDesiredBssidListSize: DWORD,
+    dwNumberOfSupportedPhys: DWORD,
+    dot11PhyTypes: [DOT11_PHY_TYPE; WLAN_MAX_PHY_INDEX],
+}}
+pub type PWLAN_INTERFACE_CAPABILITY = *mut WLAN_INTERFACE_CAPABILITY;
+STRUCT!{struct WLAN_AUTH_CIPHER_PAIR_LIST {
+    dwNumberOfItems: DWORD,
+    pAuthCipherPairList: [DOT11_AUTH_CIPHER_PAIR; 1],
+}}
+pub type PWLAN_AUTH_CIPHER_PAIR_LIST = *mut WLAN_AUTH_CIPHER_PAIR_LIST;
+STRUCT!{struct WLAN_COUNTRY_OR_REGION_STRING_LIST {
+    dwNumberOfItems: DWORD,
+    pCountryOrRegionStringList: [DOT11_COUNTRY_OR_REGION_STRING; 1],
+}}
+pub type PWLAN_COUNTRY_OR_REGION_STRING_LIST = *mut WLAN_COUNTRY_OR_REGION_STRING_LIST;
+STRUCT!{struct WLAN_PROFILE_INFO_LIST {
+    dwNumberOfItems: DWORD,
+    dwIndex: DWORD,
+    ProfileInfo: [WLAN_PROFILE_INFO; 1],
+}}
+pub type PWLAN_PROFILE_INFO_LIST = *mut WLAN_PROFILE_INFO_LIST;
+STRUCT!{struct WLAN_AVAILABLE_NETWORK_LIST {
+    dwNumberOfItems: DWORD,
+    dwIndex: DWORD,
+    Network: [WLAN_AVAILABLE_NETWORK; 1],
+}}
+pub type PWLAN_AVAILABLE_NETWORK_LIST = *mut WLAN_AVAILABLE_NETWORK_LIST;
+STRUCT!{struct WLAN_AVAILABLE_NETWORK_LIST_V2 {
+    dwNumberOfItems: DWORD,
+    dwIndex: DWORD,
+    Network: [WLAN_AVAILABLE_NETWORK_V2; 1],
+}}
+pub type PWLAN_AVAILABLE_NETWORK_LIST_V2 = *mut WLAN_AVAILABLE_NETWORK_LIST_V2;
+STRUCT!{struct WLAN_INTERFACE_INFO_LIST {
+    dwNumberOfItems: DWORD,
+    dwIndex: DWORD,
+    InterfaceInfo: [WLAN_INTERFACE_INFO; 1],
+}}
+pub type PWLAN_INTERFACE_INFO_LIST = *mut WLAN_INTERFACE_INFO_LIST;
+STRUCT!{struct DOT11_NETWORK_LIST {
+    dwNumberOfItems: DWORD,
+    dwIndex: DWORD,
+    Network: [DOT11_NETWORK; 1],
+}}
+pub type PDOT11_NETWORK_LIST = *mut DOT11_NETWORK_LIST;
+ENUM!{enum WLAN_POWER_SETTING {
+    wlan_power_setting_no_saving = 0,
+    wlan_power_setting_low_saving = 1,
+    wlan_power_setting_medium_saving = 2,
+    wlan_power_setting_maximum_saving = 3,
+    wlan_power_setting_invalid = 4,
+}}
+pub type PWLAN_POWER_SETTING = *mut WLAN_POWER_SETTING;
+pub const WLAN_CONNECTION_HIDDEN_NETWORK: DWORD = 0x00000001;
+pub const WLAN_CONNECTION_ADHOC_JOIN_ONLY: DWORD = 0x00000002;
+pub const WLAN_CONNECTION_IGNORE_PRIVACY_BIT: DWORD = 0x00000004;
+pub const WLAN_CONNECTION_EAPOL_PASSTHROUGH: DWORD = 0x00000008;
+pub const WLAN_CONNECTION_PERSIST_DISCOVERY_PROFILE: DWORD = 0x00000010;
+pub const WLAN_CONNECTION_PERSIST_DISCOVERY_PROFILE_CONNECTION_MODE_AUTO: DWORD = 0x00000020;
+pub const WLAN_CONNECTION_PERSIST_DISCOVERY_PROFILE_OVERWRITE_EXISTING: DWORD = 0x00000040;
+STRUCT!{struct WLAN_CONNECTION_PARAMETERS {
+    wlanConnectionMode: WLAN_CONNECTION_MODE,
+    strProfile: LPCWSTR,
+    pDot11Ssid: PDOT11_SSID,
+    pDesiredBssidList: PDOT11_BSSID_LIST,
+    dot11BssType: DOT11_BSS_TYPE,
+    dwFlags: DWORD,
+}}
+pub type PWLAN_CONNECTION_PARAMETERS = *mut WLAN_CONNECTION_PARAMETERS;
+STRUCT!{struct WLAN_CONNECTION_PARAMETERS_V2 {
+    wlanConnectionMode: WLAN_CONNECTION_MODE,
+    strProfile: LPCWSTR,
+    pDot11Ssid: PDOT11_SSID,
+    pDot11Hessid: PDOT11_HESSID,
+    pDesiredBssidList: PDOT11_BSSID_LIST,
+    dot11BssType: DOT11_BSS_TYPE,
+    dwFlags: DWORD,
+    pDot11AccessNetworkOptions: PDOT11_ACCESSNETWORKOPTIONS,
+}}
+pub type PWLAN_CONNECTION_PARAMETERS_V2 = *mut WLAN_CONNECTION_PARAMETERS_V2;
+STRUCT!{struct WLAN_MSM_NOTIFICATION_DATA {
+    wlanConnectionMode: WLAN_CONNECTION_MODE,
+    strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+    dot11Ssid: DOT11_SSID,
+    dot11BssType: DOT11_BSS_TYPE,
+    dot11MacAddr: DOT11_MAC_ADDRESS,
+    bSecurityEnabled: BOOL,
+    bFirstPeer: BOOL,
+    bLastPeer: BOOL,
+    wlanReasonCode: WLAN_REASON_CODE,
+}}
+pub type PWLAN_MSM_NOTIFICATION_DATA = *mut WLAN_MSM_NOTIFICATION_DATA;
+pub const WLAN_CONNECTION_NOTIFICATION_ADHOC_NETWORK_FORMED: DWORD = 0x00000001;
+pub const WLAN_CONNECTION_NOTIFICATION_CONSOLE_USER_PROFILE: DWORD = 0x00000004;
+STRUCT!{struct WLAN_CONNECTION_NOTIFICATION_DATA {
+    wlanConnectionMode: WLAN_CONNECTION_MODE,
+    strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+    dot11Ssid: DOT11_SSID,
+    dot11BssType: DOT11_BSS_TYPE,
+    bSecurityEnabled: BOOL,
+    wlanReasonCode: WLAN_REASON_CODE,
+    dwFlags: DWORD,
+    strProfileXml: [WCHAR; 1],
+}}
+pub type PWLAN_CONNECTION_NOTIFICATION_DATA = *mut WLAN_CONNECTION_NOTIFICATION_DATA;
+pub const WLAN_NOTIFICATION_SOURCE_NONE: DWORD = L2_NOTIFICATION_SOURCE_NONE;
+pub const WLAN_NOTIFICATION_SOURCE_ALL: DWORD = L2_NOTIFICATION_SOURCE_ALL;
+pub const WLAN_NOTIFICATION_SOURCE_ACM: DWORD = L2_NOTIFICATION_SOURCE_WLAN_ACM;
+pub const WLAN_NOTIFICATION_SOURCE_MSM: DWORD = L2_NOTIFICATION_SOURCE_WLAN_MSM;
+pub const WLAN_NOTIFICATION_SOURCE_SECURITY: DWORD = L2_NOTIFICATION_SOURCE_WLAN_SECURITY;
+pub const WLAN_NOTIFICATION_SOURCE_IHV: DWORD = L2_NOTIFICATION_SOURCE_WLAN_IHV;
+pub const WLAN_NOTIFICATION_SOURCE_HNWK: DWORD = L2_NOTIFICATION_SOURCE_WLAN_HNWK;
+pub const WLAN_NOTIFICATION_SOURCE_ONEX: DWORD = L2_NOTIFICATION_SOURCE_ONEX;
+ENUM!{enum WLAN_NOTIFICATION_ACM {
+    wlan_notification_acm_start = L2_NOTIFICATION_CODE_PUBLIC_BEGIN,
+    wlan_notification_acm_autoconf_enabled = 1,
+    wlan_notification_acm_autoconf_disabled = 2,
+    wlan_notification_acm_background_scan_enabled = 3,
+    wlan_notification_acm_background_scan_disabled = 4,
+    wlan_notification_acm_bss_type_change = 5,
+    wlan_notification_acm_power_setting_change = 6,
+    wlan_notification_acm_scan_complete = 7,
+    wlan_notification_acm_scan_fail = 8,
+    wlan_notification_acm_connection_start = 9,
+    wlan_notification_acm_connection_complete = 10,
+    wlan_notification_acm_connection_attempt_fail = 11,
+    wlan_notification_acm_filter_list_change = 12,
+    wlan_notification_acm_interface_arrival = 13,
+    wlan_notification_acm_interface_removal = 14,
+    wlan_notification_acm_profile_change = 15,
+    wlan_notification_acm_profile_name_change = 16,
+    wlan_notification_acm_profiles_exhausted = 17,
+    wlan_notification_acm_network_not_available = 18,
+    wlan_notification_acm_network_available = 19,
+    wlan_notification_acm_disconnecting = 20,
+    wlan_notification_acm_disconnected = 21,
+    wlan_notification_acm_adhoc_network_state_change = 22,
+    wlan_notification_acm_profile_unblocked = 23,
+    wlan_notification_acm_screen_power_change = 24,
+    wlan_notification_acm_profile_blocked = 25,
+    wlan_notification_acm_scan_list_refresh = 26,
+    wlan_notification_acm_operational_state_change = 27,
+    wlan_notification_acm_end = 28,
+}}
+pub type PWLAN_NOTIFICATION_ACM = *mut WLAN_NOTIFICATION_ACM;
+ENUM!{enum WLAN_NOTIFICATION_MSM {
+    wlan_notification_msm_start = L2_NOTIFICATION_CODE_PUBLIC_BEGIN,
+    wlan_notification_msm_associating = 1,
+    wlan_notification_msm_associated = 2,
+    wlan_notification_msm_authenticating = 3,
+    wlan_notification_msm_connected = 4,
+    wlan_notification_msm_roaming_start = 5,
+    wlan_notification_msm_roaming_end = 6,
+    wlan_notification_msm_radio_state_change = 7,
+    wlan_notification_msm_signal_quality_change = 8,
+    wlan_notification_msm_disassociating = 9,
+    wlan_notification_msm_disconnected = 10,
+    wlan_notification_msm_peer_join = 11,
+    wlan_notification_msm_peer_leave = 12,
+    wlan_notification_msm_adapter_removal = 13,
+    wlan_notification_msm_adapter_operation_mode_change = 14,
+    wlan_notification_msm_link_degraded = 15,
+    wlan_notification_msm_link_improved = 16,
+    wlan_notification_msm_end = 17,
+}}
+pub type PWLAN_NOTIFICATION_MSM = *mut WLAN_NOTIFICATION_MSM;
+ENUM!{enum WLAN_NOTIFICATION_SECURITY {
+    wlan_notification_security_start = L2_NOTIFICATION_CODE_PUBLIC_BEGIN,
+    wlan_notification_security_end = 1,
+}}
+pub type PWLAN_NOTIFICATION_SECURITY = *mut WLAN_NOTIFICATION_SECURITY;
+pub type WLAN_NOTIFICATION_DATA = L2_NOTIFICATION_DATA;
+pub type PWLAN_NOTIFICATION_DATA = *mut L2_NOTIFICATION_DATA;
+FN!{stdcall WLAN_NOTIFICATION_CALLBACK(
+    PWLAN_NOTIFICATION_DATA,
+    PVOID,
+) -> ()}
+ENUM!{enum WLAN_OPCODE_VALUE_TYPE {
+    wlan_opcode_value_type_query_only = 0,
+    wlan_opcode_value_type_set_by_group_policy = 1,
+    wlan_opcode_value_type_set_by_user = 2,
+    wlan_opcode_value_type_invalid = 3,
+}}
+pub type PWLAN_OPCODE_VALUE_TYPE = *mut WLAN_OPCODE_VALUE_TYPE;
+ENUM!{enum WLAN_INTF_OPCODE {
+    wlan_intf_opcode_autoconf_start = 0x000000000,
+    wlan_intf_opcode_autoconf_enabled = 1,
+    wlan_intf_opcode_background_scan_enabled = 2,
+    wlan_intf_opcode_media_streaming_mode = 3,
+    wlan_intf_opcode_radio_state = 4,
+    wlan_intf_opcode_bss_type = 5,
+    wlan_intf_opcode_interface_state = 6,
+    wlan_intf_opcode_current_connection = 7,
+    wlan_intf_opcode_channel_number = 8,
+    wlan_intf_opcode_supported_infrastructure_auth_cipher_pairs = 9,
+    wlan_intf_opcode_supported_adhoc_auth_cipher_pairs = 10,
+    wlan_intf_opcode_supported_country_or_region_string_list = 11,
+    wlan_intf_opcode_current_operation_mode = 12,
+    wlan_intf_opcode_supported_safe_mode = 13,
+    wlan_intf_opcode_certified_safe_mode = 14,
+    wlan_intf_opcode_hosted_network_capable = 15,
+    wlan_intf_opcode_management_frame_protection_capable = 16,
+    wlan_intf_opcode_autoconf_end = 0x0fffffff,
+    wlan_intf_opcode_msm_start = 0x10000100,
+    wlan_intf_opcode_statistics = 268435713,
+    wlan_intf_opcode_rssi = 268435714,
+    wlan_intf_opcode_msm_end = 0x1fffffff,
+    wlan_intf_opcode_security_start = 0x20010000,
+    wlan_intf_opcode_security_end = 0x2fffffff,
+    wlan_intf_opcode_ihv_start = 0x30000000,
+    wlan_intf_opcode_ihv_end = 0x3fffffff,
+}}
+pub type PWLAN_INTF_OPCODE = *mut WLAN_INTF_OPCODE;
+ENUM!{enum WLAN_AUTOCONF_OPCODE {
+    wlan_autoconf_opcode_start = 0,
+    wlan_autoconf_opcode_show_denied_networks = 1,
+    wlan_autoconf_opcode_power_setting = 2,
+    wlan_autoconf_opcode_only_use_gp_profiles_for_allowed_networks = 3,
+    wlan_autoconf_opcode_allow_explicit_creds = 4,
+    wlan_autoconf_opcode_block_period = 5,
+    wlan_autoconf_opcode_allow_virtual_station_extensibility = 6,
+    wlan_autoconf_opcode_end = 7,
+}}
+pub type PWLAN_AUTOCONF_OPCODE = *mut WLAN_AUTOCONF_OPCODE;
+ENUM!{enum WLAN_IHV_CONTROL_TYPE {
+    wlan_ihv_control_type_service = 0,
+    wlan_ihv_control_type_driver = 1,
+}}
+pub type PWLAN_IHV_CONTROL_TYPE = *mut WLAN_IHV_CONTROL_TYPE;
+ENUM!{enum WLAN_FILTER_LIST_TYPE {
+    wlan_filter_list_type_gp_permit = 0,
+    wlan_filter_list_type_gp_deny = 1,
+    wlan_filter_list_type_user_permit = 2,
+    wlan_filter_list_type_user_deny = 3,
+}}
+pub type PWLAN_FILTER_LIST_TYPE = *mut WLAN_FILTER_LIST_TYPE;
+STRUCT!{struct WLAN_PHY_FRAME_STATISTICS {
+    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: ULONGLONG,
+}}
+pub type PWLAN_PHY_FRAME_STATISTICS = *mut WLAN_PHY_FRAME_STATISTICS;
+STRUCT!{struct WLAN_MAC_FRAME_STATISTICS {
+    ullTransmittedFrameCount: ULONGLONG,
+    ullReceivedFrameCount: ULONGLONG,
+    ullWEPExcludedCount: ULONGLONG,
+    ullTKIPLocalMICFailures: ULONGLONG,
+    ullTKIPReplays: ULONGLONG,
+    ullTKIPICVErrorCount: ULONGLONG,
+    ullCCMPReplays: ULONGLONG,
+    ullCCMPDecryptErrors: ULONGLONG,
+    ullWEPUndecryptableCount: ULONGLONG,
+    ullWEPICVErrorCount: ULONGLONG,
+    ullDecryptSuccessCount: ULONGLONG,
+    ullDecryptFailureCount: ULONGLONG,
+}}
+pub type PWLAN_MAC_FRAME_STATISTICS = *mut WLAN_MAC_FRAME_STATISTICS;
+STRUCT!{struct WLAN_STATISTICS {
+    ullFourWayHandshakeFailures: ULONGLONG,
+    ullTKIPCounterMeasuresInvoked: ULONGLONG,
+    ullReserved: ULONGLONG,
+    MacUcastCounters: WLAN_MAC_FRAME_STATISTICS,
+    MacMcastCounters: WLAN_MAC_FRAME_STATISTICS,
+    dwNumberOfPhys: DWORD,
+    PhyCounters: [WLAN_PHY_FRAME_STATISTICS; 1],
+}}
+pub type PWLAN_STATISTICS = *mut WLAN_STATISTICS;
+pub const WLAN_READ_ACCESS: DWORD = STANDARD_RIGHTS_READ | FILE_READ_DATA;
+pub const WLAN_EXECUTE_ACCESS: DWORD = WLAN_READ_ACCESS | STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE;
+pub const WLAN_WRITE_ACCESS: DWORD = WLAN_READ_ACCESS | WLAN_EXECUTE_ACCESS | STANDARD_RIGHTS_WRITE
+    | FILE_WRITE_DATA | DELETE | WRITE_DAC;
+ENUM!{enum WLAN_SECURABLE_OBJECT {
+    wlan_secure_permit_list = 0,
+    wlan_secure_deny_list = 1,
+    wlan_secure_ac_enabled = 2,
+    wlan_secure_bc_scan_enabled = 3,
+    wlan_secure_bss_type = 4,
+    wlan_secure_show_denied = 5,
+    wlan_secure_interface_properties = 6,
+    wlan_secure_ihv_control = 7,
+    wlan_secure_all_user_profiles_order = 8,
+    wlan_secure_add_new_all_user_profiles = 9,
+    wlan_secure_add_new_per_user_profiles = 10,
+    wlan_secure_media_streaming_mode_enabled = 11,
+    wlan_secure_current_operation_mode = 12,
+    wlan_secure_get_plaintext_key = 13,
+    wlan_secure_hosted_network_elevated_access = 14,
+    wlan_secure_virtual_station_extensibility = 15,
+    wlan_secure_wfd_elevated_access = 16,
+    WLAN_SECURABLE_OBJECT_COUNT = 17,
+}}
+pub type PWLAN_SECURABLE_OBJECT = *mut WLAN_SECURABLE_OBJECT;
+STRUCT!{struct WLAN_DEVICE_SERVICE_GUID_LIST {
+    dwNumberOfItems: DWORD,
+    dwIndex: DWORD,
+    DeviceService: [GUID; 1],
+}}
+pub type PWLAN_DEVICE_SERVICE_GUID_LIST = *mut WLAN_DEVICE_SERVICE_GUID_LIST;
+pub const WFD_API_VERSION_1_0: DWORD = 0x00000001;
+pub const WFD_API_VERSION: DWORD = WFD_API_VERSION_1_0;
+ENUM!{enum WFD_ROLE_TYPE {
+    WFD_ROLE_TYPE_NONE = 0x00,
+    WFD_ROLE_TYPE_DEVICE = 0x01,
+    WFD_ROLE_TYPE_GROUP_OWNER = 0x02,
+    WFD_ROLE_TYPE_CLIENT = 0x04,
+    WFD_ROLE_TYPE_MAX = 0x05,
+}}
+pub type PWFD_ROLE_TYPE = *mut WFD_ROLE_TYPE;
+STRUCT!{struct WFD_GROUP_ID {
+    DeviceAddress: DOT11_MAC_ADDRESS,
+    GroupSSID: DOT11_SSID,
+}}
+pub type PWFD_GROUP_ID = *mut WFD_GROUP_ID;
+extern "system" {
+    pub fn WlanOpenHandle(
+        dwClientVersion: DWORD,
+        pReserved: PVOID,
+        pdwNegotiatedVersion: PDWORD,
+        phClientHandle: PHANDLE,
+    ) -> DWORD;
+    pub fn WlanCloseHandle(
+        hClientHandle: HANDLE,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanEnumInterfaces(
+        hClientHandle: HANDLE,
+        pReserved: PVOID,
+        ppInterfaceList: *mut PWLAN_INTERFACE_INFO_LIST,
+    ) -> DWORD;
+    pub fn WlanSetAutoConfigParameter(
+        hClientHandle: HANDLE,
+        OpCode: WLAN_AUTOCONF_OPCODE,
+        dwDataSize: DWORD,
+        pData: PVOID,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanQueryAutoConfigParameter(
+        hClientHandle: HANDLE,
+        OpCode: WLAN_AUTOCONF_OPCODE,
+        pReserved: PVOID,
+        pdwDataSize: PDWORD,
+        ppData: *mut PVOID,
+        pWlanOpcodeValueType: PWLAN_OPCODE_VALUE_TYPE,
+    ) -> DWORD;
+    pub fn WlanGetInterfaceCapability(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        pReserved: PVOID,
+        ppCapability: *mut PWLAN_INTERFACE_CAPABILITY,
+    ) -> DWORD;
+    pub fn WlanSetInterface(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        OpCode: WLAN_INTF_OPCODE,
+        dwDataSize: DWORD,
+        pData: PVOID,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanQueryInterface(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        OpCode: WLAN_INTF_OPCODE,
+        pReserved: PVOID,
+        pdwDataSize: PDWORD,
+        ppData: *mut PVOID,
+        pWlanOpcodeValueType: PWLAN_OPCODE_VALUE_TYPE,
+    ) -> DWORD;
+    pub fn WlanIhvControl(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        Type: WLAN_IHV_CONTROL_TYPE,
+        dwInBufferSize: DWORD,
+        pInBuffer: PVOID,
+        dwOutBufferSize: DWORD,
+        pOutBuffer: PVOID,
+        pdwBytesReturned: PDWORD,
+    ) -> DWORD;
+    pub fn WlanScan(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        pDot11Ssid: PDOT11_SSID,
+        pIeData: PWLAN_RAW_DATA,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanGetAvailableNetworkList(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        dwFlags: DWORD,
+        pReserved: PVOID,
+        ppAvailableNetworkList: *mut PWLAN_AVAILABLE_NETWORK_LIST,
+    ) -> DWORD;
+    pub fn WlanGetAvailableNetworkList2(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        dwFlags: DWORD,
+        pReserved: PVOID,
+        ppAvailableNetworkList: *mut PWLAN_AVAILABLE_NETWORK_LIST_V2,
+    ) -> DWORD;
+    pub fn WlanGetNetworkBssList(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        pDot11Ssid: PDOT11_SSID,
+        dot11BssType: DOT11_BSS_TYPE,
+        bSecurityEnabled: BOOL,
+        pReserved: PVOID,
+        ppWlanBssList: *mut PWLAN_BSS_LIST,
+    ) -> DWORD;
+    pub fn WlanConnect(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        pConnectionParameters: PWLAN_CONNECTION_PARAMETERS,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanConnect2(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        pConnectionParameters: PWLAN_CONNECTION_PARAMETERS_V2,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanDisconnect(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanRegisterNotification(
+        hClientHandle: HANDLE,
+        dwNotifSource: DWORD,
+        bIgnoreDuplicate: BOOL,
+        funcCallback: WLAN_NOTIFICATION_CALLBACK,
+        pCallbackContext: PVOID,
+        pReserved: PVOID,
+        pdwPrevNotifSource: PDWORD,
+    ) -> DWORD;
+    pub fn WlanGetProfile(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        strProfileName: LPCWSTR,
+        pReserved: PVOID,
+        pstrProfileXml: *mut LPWSTR,
+        pdwFlags: *mut DWORD,
+        pdwGrantedAccess: *mut DWORD,
+    ) -> DWORD;
+    pub fn WlanSetProfileEapUserData(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        strProfileName: LPCWSTR,
+        eapType: EAP_METHOD_TYPE,
+        dwFlags: DWORD,
+        dwEapUserDataSize: DWORD,
+        pbEapUserData: LPBYTE,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanSetProfileEapXmlUserData(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        strProfileName: LPCWSTR,
+        dwFlags: DWORD,
+        strEapXmlUserData: LPCWSTR,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanSetProfile(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        dwFlags: DWORD,
+        strProfileXml: LPCWSTR,
+        strAllUserProfileSecurity: LPCWSTR,
+        bOverwrite: BOOL,
+        pReserved: PVOID,
+        pdwReasonCode: *mut DWORD,
+    ) -> DWORD;
+    pub fn WlanDeleteProfile(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        strProfileName: LPCWSTR,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanRenameProfile(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        strOldProfileName: LPCWSTR,
+        strNewProfileName: LPCWSTR,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanGetProfileList(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        pReserved: PVOID,
+        ppProfileList: *mut PWLAN_PROFILE_INFO_LIST,
+    ) -> DWORD;
+    pub fn WlanSetProfileList(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        dwItems: DWORD,
+        strProfileNames: *mut LPCWSTR,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanSetProfilePosition(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        strProfileName: LPCWSTR,
+        dwPosition: DWORD,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanSetProfileCustomUserData(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        strProfileName: LPCWSTR,
+        dwDataSize: DWORD,
+        pData: PBYTE,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanGetProfileCustomUserData(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        strProfileName: LPCWSTR,
+        pReserved: PVOID,
+        pdwDataSize: *mut DWORD,
+        ppData: *mut PBYTE,
+    ) -> DWORD;
+    pub fn WlanSetFilterList(
+        hClientHandle: HANDLE,
+        wlanFilterListType: WLAN_FILTER_LIST_TYPE,
+        pNetworkList: PDOT11_NETWORK_LIST,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanGetFilterList(
+        hClientHandle: HANDLE,
+        wlanFilterListType: WLAN_FILTER_LIST_TYPE,
+        pReserved: PVOID,
+        ppNetworkList: *mut PDOT11_NETWORK_LIST,
+    ) -> DWORD;
+    pub fn WlanSetPsdIEDataList(
+        hClientHandle: HANDLE,
+        strFormat: LPCWSTR,
+        pPsdIEDataList: PWLAN_RAW_DATA_LIST,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanSaveTemporaryProfile(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        strProfileName: LPCWSTR,
+        strAllUserProfileSecurity: LPCWSTR,
+        dwFlags: DWORD,
+        bOverWrite: BOOL,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanDeviceServiceCommand(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        pDeviceServiceGuid: LPGUID,
+        dwOpCode: DWORD,
+        dwInBufferSize: DWORD,
+        pInBuffer: PVOID,
+        dwOutBufferSize: DWORD,
+        pOutBuffer: PVOID,
+        pdwBytesReturned: PDWORD,
+    ) -> DWORD;
+    pub fn WlanGetSupportedDeviceServices(
+        hClientHandle: HANDLE,
+        pInterfaceGuid: *const GUID,
+        ppDevSvcGuidList: *mut PWLAN_DEVICE_SERVICE_GUID_LIST,
+    ) -> DWORD;
+    pub fn WlanExtractPsdIEDataList(
+        hClientHandle: HANDLE,
+        dwIeDataSize: DWORD,
+        pRawIeData: PBYTE,
+        strFormat: LPCWSTR,
+        pReserved: PVOID,
+        ppPsdIEDataList: *mut PWLAN_RAW_DATA_LIST,
+    ) -> DWORD;
+    pub fn WlanReasonCodeToString(
+        dwReasonCode: DWORD,
+        dwBufferSize: DWORD,
+        pStringBuffer: PWCHAR,
+        pReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanAllocateMemory(
+        dwMemorySize: DWORD,
+    ) -> PVOID;
+    pub fn WlanFreeMemory(
+        pMemory: PVOID,
+    );
+    pub fn WlanSetSecuritySettings(
+        hClientHandle: HANDLE,
+        SecurableObject: WLAN_SECURABLE_OBJECT,
+        strModifiedSDDL: LPCWSTR,
+    ) -> DWORD;
+    pub fn WlanGetSecuritySettings(
+        hClientHandle: HANDLE,
+        SecurableObject: WLAN_SECURABLE_OBJECT,
+        pValueType: PWLAN_OPCODE_VALUE_TYPE,
+        pstrCurrentSDDL: *mut LPWSTR,
+        pdwGrantedAccess: PDWORD,
+    ) -> DWORD;
+}
+pub const WLAN_UI_API_VERSION: DWORD = 1;
+pub const WLAN_UI_API_INITIAL_VERSION: DWORD = 1;
+ENUM!{enum WL_DISPLAY_PAGES {
+    WLConnectionPage = 0,
+    WLSecurityPage = 1,
+    WLAdvPage = 2,
+}}
+pub type PWL_DISPLAY_PAGES = *mut WL_DISPLAY_PAGES;
+extern "system" {
+    pub fn WlanUIEditProfile(
+        dwClientVersion: DWORD,
+        wstrProfileName: LPCWSTR,
+        pInterfaceGuid: *mut GUID,
+        hWnd: HWND,
+        wlStartPage: WL_DISPLAY_PAGES,
+        pReserved: PVOID,
+        pWlanReasonCode: PWLAN_REASON_CODE,
+    ) -> DWORD;
+}
+ENUM!{enum WLAN_HOSTED_NETWORK_STATE {
+    wlan_hosted_network_unavailable = 0,
+    wlan_hosted_network_idle = 1,
+    wlan_hosted_network_active = 2,
+}}
+pub type PWLAN_HOSTED_NETWORK_STATE = *mut WLAN_HOSTED_NETWORK_STATE;
+ENUM!{enum WLAN_HOSTED_NETWORK_REASON {
+    wlan_hosted_network_reason_success = 0,
+    wlan_hosted_network_reason_unspecified = 1,
+    wlan_hosted_network_reason_bad_parameters = 2,
+    wlan_hosted_network_reason_service_shutting_down = 3,
+    wlan_hosted_network_reason_insufficient_resources = 4,
+    wlan_hosted_network_reason_elevation_required = 5,
+    wlan_hosted_network_reason_read_only = 6,
+    wlan_hosted_network_reason_persistence_failed = 7,
+    wlan_hosted_network_reason_crypt_error = 8,
+    wlan_hosted_network_reason_impersonation = 9,
+    wlan_hosted_network_reason_stop_before_start = 10,
+    wlan_hosted_network_reason_interface_available = 11,
+    wlan_hosted_network_reason_interface_unavailable = 12,
+    wlan_hosted_network_reason_miniport_stopped = 13,
+    wlan_hosted_network_reason_miniport_started = 14,
+    wlan_hosted_network_reason_incompatible_connection_started = 15,
+    wlan_hosted_network_reason_incompatible_connection_stopped = 16,
+    wlan_hosted_network_reason_user_action = 17,
+    wlan_hosted_network_reason_client_abort = 18,
+    wlan_hosted_network_reason_ap_start_failed = 19,
+    wlan_hosted_network_reason_peer_arrived = 20,
+    wlan_hosted_network_reason_peer_departed = 21,
+    wlan_hosted_network_reason_peer_timeout = 22,
+    wlan_hosted_network_reason_gp_denied = 23,
+    wlan_hosted_network_reason_service_unavailable = 24,
+    wlan_hosted_network_reason_device_change = 25,
+    wlan_hosted_network_reason_properties_change = 26,
+    wlan_hosted_network_reason_virtual_station_blocking_use = 27,
+    wlan_hosted_network_reason_service_available_on_virtual_station = 28,
+}}
+pub type PWLAN_HOSTED_NETWORK_REASON = *mut WLAN_HOSTED_NETWORK_REASON;
+ENUM!{enum WLAN_HOSTED_NETWORK_PEER_AUTH_STATE {
+    wlan_hosted_network_peer_state_invalid = 0,
+    wlan_hosted_network_peer_state_authenticated = 1,
+}}
+pub type PWLAN_HOSTED_NETWORK_PEER_AUTH_STATE = *mut WLAN_HOSTED_NETWORK_PEER_AUTH_STATE;
+extern "system" {
+    pub fn WlanHostedNetworkStartUsing(
+        hClientHandle: HANDLE,
+        pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+        pvReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanHostedNetworkStopUsing(
+        hClientHandle: HANDLE,
+        pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+        pvReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanHostedNetworkForceStart(
+        hClientHandle: HANDLE,
+        pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+        pvReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanHostedNetworkForceStop(
+        hClientHandle: HANDLE,
+        pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+        pvReserved: PVOID,
+    ) -> DWORD;
+}
+STRUCT!{struct WLAN_HOSTED_NETWORK_PEER_STATE {
+    PeerMacAddress: DOT11_MAC_ADDRESS,
+    PeerAuthState: WLAN_HOSTED_NETWORK_PEER_AUTH_STATE,
+}}
+pub type PWLAN_HOSTED_NETWORK_PEER_STATE = *mut WLAN_HOSTED_NETWORK_PEER_STATE;
+STRUCT!{struct WLAN_HOSTED_NETWORK_RADIO_STATE {
+    dot11SoftwareRadioState: DOT11_RADIO_STATE,
+    dot11HardwareRadioState: DOT11_RADIO_STATE,
+}}
+pub type PWLAN_HOSTED_NETWORK_RADIO_STATE = *mut WLAN_HOSTED_NETWORK_RADIO_STATE;
+ENUM!{enum WLAN_HOSTED_NETWORK_NOTIFICATION_CODE {
+    wlan_hosted_network_state_change = L2_NOTIFICATION_CODE_V2_BEGIN,
+    wlan_hosted_network_peer_state_change = 4097,
+    wlan_hosted_network_radio_state_change = 4098,
+}}
+pub type PWLAN_HOSTED_NETWORK_NOTIFICATION_CODE = *mut WLAN_HOSTED_NETWORK_NOTIFICATION_CODE;
+STRUCT!{struct WLAN_HOSTED_NETWORK_STATE_CHANGE {
+    OldState: WLAN_HOSTED_NETWORK_STATE,
+    NewState: WLAN_HOSTED_NETWORK_STATE,
+    StateChangeReason: WLAN_HOSTED_NETWORK_REASON,
+}}
+pub type PWLAN_HOSTED_NETWORK_STATE_CHANGE = *mut WLAN_HOSTED_NETWORK_STATE_CHANGE;
+STRUCT!{struct WLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE {
+    OldState: WLAN_HOSTED_NETWORK_PEER_STATE,
+    NewState: WLAN_HOSTED_NETWORK_PEER_STATE,
+    PeerStateChangeReason: WLAN_HOSTED_NETWORK_REASON,
+}}
+pub type PWLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE =
+    *mut WLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE;
+ENUM!{enum WLAN_HOSTED_NETWORK_OPCODE {
+    wlan_hosted_network_opcode_connection_settings = 0,
+    wlan_hosted_network_opcode_security_settings = 1,
+    wlan_hosted_network_opcode_station_profile = 2,
+    wlan_hosted_network_opcode_enable = 3,
+}}
+pub type PWLAN_HOSTED_NETWORK_OPCODE = *mut WLAN_HOSTED_NETWORK_OPCODE;
+STRUCT!{struct WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS {
+    hostedNetworkSSID: DOT11_SSID,
+    dwMaxNumberOfPeers: DWORD,
+}}
+pub type PWLAN_HOSTED_NETWORK_CONNECTION_SETTINGS = *mut WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS;
+STRUCT!{struct WLAN_HOSTED_NETWORK_SECURITY_SETTINGS {
+    dot11AuthAlgo: DOT11_AUTH_ALGORITHM,
+    dot11CipherAlgo: DOT11_CIPHER_ALGORITHM,
+}}
+pub type PWLAN_HOSTED_NETWORK_SECURITY_SETTINGS = *mut WLAN_HOSTED_NETWORK_SECURITY_SETTINGS;
+extern "system" {
+    pub fn WlanHostedNetworkQueryProperty(
+        hClientHandle: HANDLE,
+        OpCode: WLAN_HOSTED_NETWORK_OPCODE,
+        pdwDataSize: PDWORD,
+        ppvData: *mut PVOID,
+        pWlanOpcodeValueType: PWLAN_OPCODE_VALUE_TYPE,
+        pvReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanHostedNetworkSetProperty(
+        hClientHandle: HANDLE,
+        OpCode: WLAN_HOSTED_NETWORK_OPCODE,
+        dwDataSize: DWORD,
+        pvData: PVOID,
+        pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+        pvReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanHostedNetworkInitSettings(
+        hClientHandle: HANDLE,
+        pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+        pvReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanHostedNetworkRefreshSecuritySettings(
+        hClientHandle: HANDLE,
+        pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+        pvReserved: PVOID,
+    ) -> DWORD;
+}
+STRUCT!{struct WLAN_HOSTED_NETWORK_STATUS {
+    HostedNetworkState: WLAN_HOSTED_NETWORK_STATE,
+    IPDeviceID: GUID,
+    wlanHostedNetworkBSSID: DOT11_MAC_ADDRESS,
+    dot11PhyType: DOT11_PHY_TYPE,
+    ulChannelFrequency: ULONG,
+    dwNumberOfPeers: DWORD,
+    PeerList: [WLAN_HOSTED_NETWORK_PEER_STATE; 1],
+}}
+pub type PWLAN_HOSTED_NETWORK_STATUS = *mut WLAN_HOSTED_NETWORK_STATUS;
+extern "system" {
+    pub fn WlanHostedNetworkQueryStatus(
+        hClientHandle: HANDLE,
+        ppWlanHostedNetworkStatus: *mut PWLAN_HOSTED_NETWORK_STATUS,
+        pvReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanHostedNetworkSetSecondaryKey(
+        hClientHandle: HANDLE,
+        dwKeyLength: DWORD,
+        pucKeyData: PUCHAR,
+        bIsPassPhrase: BOOL,
+        bPersistent: BOOL,
+        pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+        pvReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanHostedNetworkQuerySecondaryKey(
+        hClientHandle: HANDLE,
+        pdwKeyLength: PDWORD,
+        ppucKeyData: *mut PUCHAR,
+        pbIsPassPhrase: PBOOL,
+        pbPersistent: PBOOL,
+        pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+        pvReserved: PVOID,
+    ) -> DWORD;
+    pub fn WlanRegisterVirtualStationNotification(
+        hClientHandle: HANDLE,
+        bRegister: BOOL,
+        pReserved: PVOID,
+    ) -> DWORD;
+}
+DEFINE_GUID!{GUID_DEVINTERFACE_WIFIDIRECT_DEVICE,
+    0x439b20af, 0x8955, 0x405b, 0x99, 0xf0, 0xa6, 0x2a, 0xf0, 0xc6, 0x8d, 0x43}
+DEFINE_GUID!{GUID_AEPSERVICE_WIFIDIRECT_DEVICE,
+    0xcc29827c, 0x9caf, 0x4928, 0x99, 0xa9, 0x18, 0xf7, 0xc2, 0x38, 0x13, 0x89}
+DEFINE_GUID!{GUID_DEVINTERFACE_ASP_INFRA_DEVICE,
+    0xff823995, 0x7a72, 0x4c80, 0x87, 0x57, 0xc6, 0x7e, 0xe1, 0x3d, 0x1a, 0x49}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_DeviceAddress,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x01}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_InterfaceAddress,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x02}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_InterfaceGuid,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x03}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_GroupId,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x04}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsConnected,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x05}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsVisible,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x06}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsLegacyDevice,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x07}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_MiracastVersion,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x08}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsMiracastLCPSupported,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x09}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_Services,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0a}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_SupportedChannelList,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0b}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_InformationElements,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0c}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_DeviceAddressCopy,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0d}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsRecentlyAssociated,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0e}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_Service_Aeps,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0f}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_NoMiracastAutoProject,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x10}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_Supported,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x11}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_StreamSecuritySupported,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x12}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_AccessPointBssid,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x13}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_SinkHostName,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x14}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_ChallengeAep,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x15}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsDMGCapable,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x16}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_DevnodeAep,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x17}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_FoundWsbService,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x18}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_HostName_ResolutionMode,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x19}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_SinkIpAddress,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x1a}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_TransientAssociation,
+    0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x1b}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_ServiceAddress,
+    0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x02}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_ServiceName,
+    0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x03}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_ServiceInformation,
+    0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x04}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_AdvertisementId,
+    0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x05}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_ServiceConfigMethods,
+    0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x06}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_RequestServiceInformation,
+    0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x07}
+extern "system" {
+    pub fn WFDOpenHandle(
+        dwClientVersion: DWORD,
+        pdwNegotiatedVersion: PDWORD,
+        phClientHandle: PHANDLE,
+    ) -> DWORD;
+    pub fn WFDCloseHandle(
+        hClientHandle: HANDLE,
+    ) -> DWORD;
+}
+FN!{stdcall WFD_OPEN_SESSION_COMPLETE_CALLBACK(
+    hSessionHandle: HANDLE,
+    pvContext: PVOID,
+    guidSessionInterface: GUID,
+    dwError: DWORD,
+    dwReasonCode: DWORD,
+) -> ()}
+extern "system" {
+    pub fn WFDStartOpenSession(
+        hClientHandle: HANDLE,
+        pDeviceAddress: PDOT11_MAC_ADDRESS,
+        pvContext: PVOID,
+        pfnCallback: WFD_OPEN_SESSION_COMPLETE_CALLBACK,
+        phSessionHandle: PHANDLE,
+    ) -> DWORD;
+    pub fn WFDCancelOpenSession(
+        hSessionHandle: HANDLE,
+    ) -> DWORD;
+    pub fn WFDOpenLegacySession(
+        hClientHandle: HANDLE,
+        pLegacyMacAddress: PDOT11_MAC_ADDRESS,
+        phSessionHandle: *mut HANDLE,
+        pGuidSessionInterface: *mut GUID,
+    ) -> DWORD;
+    pub fn WFDCloseSession(
+        hSessionHandle: HANDLE,
+    ) -> DWORD;
+    pub fn WFDUpdateDeviceVisibility(
+        pDeviceAddress: PDOT11_MAC_ADDRESS,
+    ) -> DWORD;
+}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFi_InterfaceGuid,
+    0xef1167eb, 0xcbfc, 0x4341, 0xa5, 0x68, 0xa7, 0xc9, 0x1a, 0x68, 0x98, 0x2c, 0x02}
diff --git a/src/um/wlanihv.rs b/src/um/wlanihv.rs
new file mode 100644
index 000000000..e2fa8fb17
--- /dev/null
+++ b/src/um/wlanihv.rs
@@ -0,0 +1,410 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+//! Definition of public APIs for WLAN Extensibility Framework.
+use shared::basetsd::UINT32;
+use shared::guiddef::{CLSID, GUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, LPVOID, PBOOL, PBYTE, PDWORD, UCHAR, ULONG, USHORT};
+use shared::windot11::{
+    DOT11_ASSOC_STATUS, DOT11_DIRECTION, PDOT11_ASSOCIATION_COMPLETION_PARAMETERS,
+    PDOT11_CIPHER_DEFAULT_KEY_VALUE, PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE, PDOT11_MAC_ADDRESS,
+    PDOT11_PRIVACY_EXEMPTION,
+};
+use shared::wlantypes::{DOT11_AUTH_ALGORITHM, DOT11_BSS_TYPE, DOT11_CIPHER_ALGORITHM, DOT11_SSID};
+use um::dot1x::{ONEX_AUTH_STATUS, ONEX_REASON_CODE};
+use um::eaptypes::EAP_ATTRIBUTES;
+use um::l2cmn::PL2_NOTIFICATION_DATA;
+use um::winnt::{HANDLE, LPWSTR, PHANDLE, WCHAR};
+use um::winuser::PWTSSESSION_NOTIFICATION;
+use um::wlanihvtypes::{MS_MAX_PROFILE_NAME_LENGTH, PDOT11EXT_IHV_PROFILE_PARAMS};
+use um::wlclient::{PDOT11_ADAPTER, PDOT11_BSS_LIST, PDOT11_PORT_STATE};
+STRUCT!{struct DOT11EXT_APIS {
+    Dot11ExtAllocateBuffer: DOT11EXT_ALLOCATE_BUFFER,
+    Dot11ExtFreeBuffer: DOT11EXT_FREE_BUFFER,
+    Dot11ExtSetProfileCustomUserData: DOT11EXT_SET_PROFILE_CUSTOM_USER_DATA,
+    Dot11ExtGetProfileCustomUserData: DOT11EXT_GET_PROFILE_CUSTOM_USER_DATA,
+    Dot11ExtSetCurrentProfile: DOT11EXT_SET_CURRENT_PROFILE,
+    Dot11ExtSendUIRequest: DOT11EXT_SEND_UI_REQUEST,
+    Dot11ExtPreAssociateCompletion: DOT11EXT_PRE_ASSOCIATE_COMPLETION,
+    Dot11ExtPostAssociateCompletion: DOT11EXT_POST_ASSOCIATE_COMPLETION,
+    Dot11ExtSendNotification: DOT11EXT_SEND_NOTIFICATION,
+    Dot11ExtSendPacket: DOT11EXT_SEND_PACKET,
+    Dot11ExtSetEtherTypeHandling: DOT11EXT_SET_ETHERTYPE_HANDLING,
+    Dot11ExtSetAuthAlgorithm: DOT11EXT_SET_AUTH_ALGORITHM,
+    Dot11ExtSetUnicastCipherAlgorithm: DOT11EXT_SET_UNICAST_CIPHER_ALGORITHM,
+    Dot11ExtSetMulticastCipherAlgorithm: DOT11EXT_SET_MULTICAST_CIPHER_ALGORITHM,
+    Dot11ExtSetDefaultKey: DOT11EXT_SET_DEFAULT_KEY,
+    Dot11ExtSetKeyMappingKey: DOT11EXT_SET_KEY_MAPPING_KEY,
+    Dot11ExtSetDefaultKeyId: DOT11EXT_SET_DEFAULT_KEY_ID,
+    Dot11ExtNicSpecificExtension: DOT11EXT_NIC_SPECIFIC_EXTENSION,
+    Dot11ExtSetExcludeUnencrypted: DOT11EXT_SET_EXCLUDE_UNENCRYPTED,
+    Dot11ExtStartOneX: DOT11EXT_ONEX_START,
+    Dot11ExtStopOneX: DOT11EXT_ONEX_STOP,
+    Dot11ExtProcessSecurityPacket: DOT11EXT_PROCESS_ONEX_PACKET,
+}}
+pub type PDOT11EXT_APIS = *mut DOT11EXT_APIS;
+STRUCT!{struct DOT11EXT_IHV_HANDLERS {
+    Dot11ExtIhvDeinitService: DOT11EXTIHV_DEINIT_SERVICE,
+    Dot11ExtIhvInitAdapter: DOT11EXTIHV_INIT_ADAPTER,
+    Dot11ExtIhvDeinitAdapter: DOT11EXTIHV_DEINIT_ADAPTER,
+    Dot11ExtIhvPerformPreAssociate: DOT11EXTIHV_PERFORM_PRE_ASSOCIATE,
+    Dot11ExtIhvAdapterReset: DOT11EXTIHV_ADAPTER_RESET,
+    Dot11ExtIhvPerformPostAssociate: DOT11EXTIHV_PERFORM_POST_ASSOCIATE,
+    Dot11ExtIhvStopPostAssociate: DOT11EXTIHV_STOP_POST_ASSOCIATE,
+    Dot11ExtIhvValidateProfile: DOT11EXTIHV_VALIDATE_PROFILE,
+    Dot11ExtIhvPerformCapabilityMatch: DOT11EXTIHV_PERFORM_CAPABILITY_MATCH,
+    Dot11ExtIhvCreateDiscoveryProfiles: DOT11EXTIHV_CREATE_DISCOVERY_PROFILES,
+    Dot11ExtIhvProcessSessionChange: DOT11EXTIHV_PROCESS_SESSION_CHANGE,
+    Dot11ExtIhvReceiveIndication: DOT11EXTIHV_RECEIVE_INDICATION,
+    Dot11ExtIhvReceivePacket: DOT11EXTIHV_RECEIVE_PACKET,
+    Dot11ExtIhvSendPacketCompletion: DOT11EXTIHV_SEND_PACKET_COMPLETION,
+    Dot11ExtIhvIsUIRequestPending: DOT11EXTIHV_IS_UI_REQUEST_PENDING,
+    Dot11ExtIhvProcessUIResponse: DOT11EXTIHV_PROCESS_UI_RESPONSE,
+    Dot11ExtIhvQueryUIRequest: DOT11EXTIHV_QUERY_UI_REQUEST,
+    Dot11ExtIhvOnexIndicateResult: DOT11EXTIHV_ONEX_INDICATE_RESULT,
+    Dot11ExtIhvControl: DOT11EXTIHV_CONTROL,
+}}
+pub type PDOT11EXT_IHV_HANDLERS = *mut DOT11EXT_IHV_HANDLERS;
+STRUCT!{struct DOT11EXT_VIRTUAL_STATION_APIS {
+    Dot11ExtRequestVirtualStation: DOT11EXT_REQUEST_VIRTUAL_STATION,
+    Dot11ExtReleaseVirtualStation: DOT11EXT_RELEASE_VIRTUAL_STATION,
+    Dot11ExtQueryVirtualStationProperties: DOT11EXT_QUERY_VIRTUAL_STATION_PROPERTIES,
+    Dot11ExtSetVirtualStationAPProperties: DOT11EXT_SET_VIRTUAL_STATION_AP_PROPERTIES,
+}}
+pub type PDOT11EXT_VIRTUAL_STATION_APIS = *mut DOT11EXT_VIRTUAL_STATION_APIS;
+STRUCT!{struct DOT11_IHV_VERSION_INFO {
+    dwVerMin: DWORD,
+    dwVerMax: DWORD,
+}}
+pub type PDOT11_IHV_VERSION_INFO = *mut DOT11_IHV_VERSION_INFO;
+ENUM!{enum DOT11EXT_IHV_CONNECTION_PHASE {
+    connection_phase_any = 0,
+    connection_phase_initial_connection = 1,
+    connection_phase_post_l3_connection = 2,
+}}
+pub type PDOT11EXT_IHV_CONNECTION_PHASE = *mut DOT11EXT_IHV_CONNECTION_PHASE;
+STRUCT!{struct DOT11EXT_IHV_UI_REQUEST {
+    dwSessionId: DWORD,
+    guidUIRequest: GUID,
+    UIPageClsid: CLSID,
+    dwByteCount: DWORD,
+    pvUIRequest: *mut BYTE,
+}}
+pub type PDOT11EXT_IHV_UI_REQUEST = *mut DOT11EXT_IHV_UI_REQUEST;
+ENUM!{enum DOT11_MSONEX_RESULT {
+    DOT11_MSONEX_SUCCESS = 0,
+    DOT11_MSONEX_FAILURE = 1,
+    DOT11_MSONEX_IN_PROGRESS = 2,
+}}
+pub type PDOT11_MSONEX_RESULT = *mut DOT11_MSONEX_RESULT;
+STRUCT!{struct DOT11_EAP_RESULT {
+    dwFailureReasonCode: UINT32,
+    pAttribArray: *mut EAP_ATTRIBUTES,
+}}
+pub type PDOT11_EAP_RESULT = *mut DOT11_EAP_RESULT;
+STRUCT!{struct DOT11_MSONEX_RESULT_PARAMS {
+    Dot11OnexAuthStatus: ONEX_AUTH_STATUS,
+    Dot11OneXReasonCode: ONEX_REASON_CODE,
+    pbMPPESendKey: PBYTE,
+    dwMPPESendKeyLen: DWORD,
+    pbMPPERecvKey: PBYTE,
+    dwMPPERecvKeyLen: DWORD,
+    pDot11EapResult: PDOT11_EAP_RESULT,
+}}
+pub type PDOT11_MSONEX_RESULT_PARAMS = *mut DOT11_MSONEX_RESULT_PARAMS;
+STRUCT!{struct DOT11EXT_IHV_CONNECTIVITY_PROFILE {
+    pszXmlFragmentIhvConnectivity: LPWSTR,
+}}
+pub type PDOT11EXT_IHV_CONNECTIVITY_PROFILE = *mut DOT11EXT_IHV_CONNECTIVITY_PROFILE;
+STRUCT!{struct DOT11EXT_IHV_SECURITY_PROFILE {
+    pszXmlFragmentIhvSecurity: LPWSTR,
+    bUseMSOnex: BOOL,
+}}
+pub type PDOT11EXT_IHV_SECURITY_PROFILE = *mut DOT11EXT_IHV_SECURITY_PROFILE;
+STRUCT!{struct DOT11EXT_IHV_DISCOVERY_PROFILE {
+    IhvConnectivityProfile: DOT11EXT_IHV_CONNECTIVITY_PROFILE,
+    IhvSecurityProfile: DOT11EXT_IHV_SECURITY_PROFILE,
+}}
+pub type PDOT11EXT_IHV_DISCOVERY_PROFILE = *mut DOT11EXT_IHV_DISCOVERY_PROFILE;
+STRUCT!{struct DOT11EXT_IHV_DISCOVERY_PROFILE_LIST {
+    dwCount: DWORD,
+    pIhvDiscoveryProfiles: PDOT11EXT_IHV_DISCOVERY_PROFILE,
+}}
+pub type PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST = *mut DOT11EXT_IHV_DISCOVERY_PROFILE_LIST;
+ENUM!{enum DOT11EXT_IHV_INDICATION_TYPE {
+    IndicationTypeNicSpecificNotification = 0,
+    IndicationTypePmkidCandidateList = 1,
+    IndicationTypeTkipMicFailure = 2,
+    IndicationTypePhyStateChange = 3,
+    IndicationTypeLinkQuality = 4,
+}}
+pub type PDOT11EXT_IHV_INDICATION_TYPE = *mut DOT11EXT_IHV_INDICATION_TYPE;
+pub const DOT11EXT_PSK_MAX_LENGTH: usize = 64;
+STRUCT!{struct DOT11EXT_VIRTUAL_STATION_AP_PROPERTY {
+    dot11SSID: DOT11_SSID,
+    dot11AuthAlgo: DOT11_AUTH_ALGORITHM,
+    dot11CipherAlgo: DOT11_CIPHER_ALGORITHM,
+    bIsPassPhrase: BOOL,
+    dwKeyLength: DWORD,
+    ucKeyData: [UCHAR; DOT11EXT_PSK_MAX_LENGTH],
+}}
+pub type PDOT11EXT_VIRTUAL_STATION_AP_PROPERTY = *mut DOT11EXT_VIRTUAL_STATION_AP_PROPERTY;
+pub const WDIAG_IHV_WLAN_ID_FLAG_SECURITY_ENABLED: DWORD = 0x00000001;
+STRUCT!{struct WDIAG_IHV_WLAN_ID {
+    strProfileName: [WCHAR; MS_MAX_PROFILE_NAME_LENGTH],
+    Ssid: DOT11_SSID,
+    BssType: DOT11_BSS_TYPE,
+    dwFlags: DWORD,
+    dwReasonCode: DWORD,
+}}
+pub type PWDIAG_IHV_WLAN_ID = *mut WDIAG_IHV_WLAN_ID;
+FN!{stdcall DOT11EXT_ALLOCATE_BUFFER(
+    dwByteCount: DWORD,
+    ppvBuffer: *mut LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_FREE_BUFFER(
+    pvMemory: LPVOID,
+) -> ()}
+FN!{stdcall DOT11EXT_SET_PROFILE_CUSTOM_USER_DATA(
+    hDot11SvcHandle: HANDLE,
+    hConnectSession: HANDLE,
+    dwSessionID: DWORD,
+    dwDataSize: DWORD,
+    pvData: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_GET_PROFILE_CUSTOM_USER_DATA(
+    hDot11SvcHandle: HANDLE,
+    hConnectSession: HANDLE,
+    dwSessionID: DWORD,
+    pdwDataSize: *mut DWORD,
+    ppvData: *mut LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_CURRENT_PROFILE(
+    hDot11SvcHandle: HANDLE,
+    hConnectSession: HANDLE,
+    pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
+    pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SEND_UI_REQUEST(
+    hDot11SvcHandle: HANDLE,
+    pIhvUIRequest: PDOT11EXT_IHV_UI_REQUEST,
+) -> DWORD}
+FN!{stdcall DOT11EXT_PRE_ASSOCIATE_COMPLETION(
+    hDot11SvcHandle: HANDLE,
+    hConnectSession: HANDLE,
+    dwReasonCode: DWORD,
+    dwWin32Error: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_POST_ASSOCIATE_COMPLETION(
+    hDot11SvcHandle: HANDLE,
+    hSecuritySessionID: HANDLE,
+    pPeer: PDOT11_MAC_ADDRESS,
+    dwReasonCode: DWORD,
+    dwWin32Error: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SEND_NOTIFICATION(
+    hDot11SvcHandle: HANDLE,
+    pNotificationData: PL2_NOTIFICATION_DATA,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SEND_PACKET(
+    hDot11SvcHandle: HANDLE,
+    uPacketLen: ULONG,
+    pvPacket: LPVOID,
+    hSendCompletion: HANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_ETHERTYPE_HANDLING(
+    hDot11SvcHandle: HANDLE,
+    uMaxBackLog: ULONG,
+    uNumOfExemption: ULONG,
+    pExemption: PDOT11_PRIVACY_EXEMPTION,
+    uNumOfRegistration: ULONG,
+    pusRegistration: *mut USHORT,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_AUTH_ALGORITHM(
+    hDot11SvcHandle: HANDLE,
+    dwAuthAlgo: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_UNICAST_CIPHER_ALGORITHM(
+    hDot11SvcHandle: HANDLE,
+    dwUnicastCipherAlgo: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_MULTICAST_CIPHER_ALGORITHM(
+    hDot11SvcHandle: HANDLE,
+    dwMulticastCipherAlgo: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_DEFAULT_KEY(
+    hDot11SvcHandle: HANDLE,
+    pKey: PDOT11_CIPHER_DEFAULT_KEY_VALUE,
+    dot11Direction: DOT11_DIRECTION,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_KEY_MAPPING_KEY(
+    hDot11SvcHandle: HANDLE,
+    pKey: PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_DEFAULT_KEY_ID(
+    hDot11SvcHandle: HANDLE,
+    uDefaultKeyId: ULONG,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_EXCLUDE_UNENCRYPTED(
+    hDot11SvcHandle: HANDLE,
+    bExcludeUnencrypted: BOOL,
+) -> DWORD}
+FN!{stdcall DOT11EXT_NIC_SPECIFIC_EXTENSION(
+    hDot11SvcHandle: HANDLE,
+    dwInBufferSize: DWORD,
+    pvInBuffer: LPVOID,
+    pdwOutBufferSize: *mut DWORD,
+    pvOutBuffer: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_ONEX_START(
+    hDot11SvcHandle: HANDLE,
+    pEapAttributes: *mut EAP_ATTRIBUTES,
+) -> DWORD}
+FN!{stdcall DOT11EXT_ONEX_STOP(
+    hDot11SvcHandle: HANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXT_PROCESS_ONEX_PACKET(
+    hDot11SvcHandle: HANDLE,
+    dwInPacketSize: DWORD,
+    pvInPacket: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_REQUEST_VIRTUAL_STATION(
+    hDot11PrimaryHandle: HANDLE,
+    pvReserved: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_RELEASE_VIRTUAL_STATION(
+    hDot11PrimaryHandle: HANDLE,
+    pvReserved: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_QUERY_VIRTUAL_STATION_PROPERTIES(
+    hDot11SvcHandle: HANDLE,
+    pbIsVirtualStation: *mut BOOL,
+    pgPrimary: *mut GUID,
+    pvReserved: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_VIRTUAL_STATION_AP_PROPERTIES(
+    hDot11SvcHandle: HANDLE,
+    hConnectSession: HANDLE,
+    dwNumProperties: DWORD,
+    pProperties: PDOT11EXT_VIRTUAL_STATION_AP_PROPERTY,
+    pvReserved: LPVOID,
+) -> DWORD}
+pub const IHV_VERSION_FUNCTION_NAME: &'static str = "Dot11ExtIhvGetVersionInfo";
+pub const IHV_INIT_FUNCTION_NAME: &'static str = "Dot11ExtIhvInitService";
+pub const IHV_INIT_VS_FUNCTION_NAME: &'static str = "Dot11ExtIhvInitVirtualStation";
+FN!{stdcall DOT11EXTIHV_GET_VERSION_INFO(
+    pDot11IHVVersionInfo: PDOT11_IHV_VERSION_INFO,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_INIT_SERVICE(
+    dwVerNumUsed: DWORD,
+    pDot11ExtAPI: PDOT11EXT_APIS,
+    pvReserved: LPVOID,
+    pDot11IHVHandlers: PDOT11EXT_IHV_HANDLERS,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_INIT_VIRTUAL_STATION(
+    pDot11ExtVSAPI: PDOT11EXT_VIRTUAL_STATION_APIS,
+    pvReserved: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_DEINIT_SERVICE() -> ()}
+FN!{stdcall DOT11EXTIHV_INIT_ADAPTER(
+    pDot11Adapter: PDOT11_ADAPTER,
+    hDot11SvcHandle: HANDLE,
+    phIhvExtAdapter: PHANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_DEINIT_ADAPTER(
+    hIhvExtAdapter: HANDLE,
+) -> ()}
+FN!{stdcall DOT11EXTIHV_PERFORM_PRE_ASSOCIATE(
+    hIhvExtAdapter: HANDLE,
+    hConnectSession: HANDLE,
+    pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
+    pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
+    pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
+    pConnectableBssid: PDOT11_BSS_LIST,
+    pdwReasonCode: PDWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_ADAPTER_RESET(
+    hIhvExtAdapter: HANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_PERFORM_POST_ASSOCIATE(
+    hIhvExtAdapter: HANDLE,
+    hSecuritySessionID: HANDLE,
+    pPortState: PDOT11_PORT_STATE,
+    uDot11AssocParamsBytes: ULONG,
+    pDot11AssocParams: PDOT11_ASSOCIATION_COMPLETION_PARAMETERS,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_STOP_POST_ASSOCIATE(
+    hIhvExtAdapter: HANDLE,
+    pPeer: PDOT11_MAC_ADDRESS,
+    dot11AssocStatus: DOT11_ASSOC_STATUS,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_VALIDATE_PROFILE(
+    hIhvExtAdapter: HANDLE,
+    pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
+    pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
+    pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
+    pdwReasonCode: PDWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_PERFORM_CAPABILITY_MATCH(
+    hIhvExtAdapter: HANDLE,
+    pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
+    pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
+    pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
+    pConnectableBssid: PDOT11_BSS_LIST,
+    pdwReasonCode: PDWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_CREATE_DISCOVERY_PROFILES(
+    hIhvExtAdapter: HANDLE,
+    bInsecure: BOOL,
+    pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
+    pConnectableBssid: PDOT11_BSS_LIST,
+    pIhvDiscoveryProfileList: PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST,
+    pdwReasonCode: PDWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_PROCESS_SESSION_CHANGE(
+    uEventType: ULONG,
+    pSessionNotification: PWTSSESSION_NOTIFICATION,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_RECEIVE_INDICATION(
+    hIhvExtAdapter: HANDLE,
+    indicationType: DOT11EXT_IHV_INDICATION_TYPE,
+    uBufferLength: ULONG,
+    pvBuffer: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_RECEIVE_PACKET(
+    hIhvExtAdapter: HANDLE,
+    dwInBufferSize: DWORD,
+    pvInBuffer: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_SEND_PACKET_COMPLETION(
+    hSendCompletion: HANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_IS_UI_REQUEST_PENDING(
+    guidUIRequest: GUID,
+    pbIsRequestPending: PBOOL,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_PROCESS_UI_RESPONSE(
+    guidUIRequest: GUID,
+    dwByteCount: DWORD,
+    pvResponseBuffer: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_QUERY_UI_REQUEST(
+    hIhvExtAdapter: HANDLE,
+    connectionPhase: DOT11EXT_IHV_CONNECTION_PHASE,
+    ppIhvUIRequest: *mut PDOT11EXT_IHV_UI_REQUEST,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_ONEX_INDICATE_RESULT(
+    hIhvExtAdapter: HANDLE,
+    msOneXResult: DOT11_MSONEX_RESULT,
+    pDot11MsOneXResultParams: PDOT11_MSONEX_RESULT_PARAMS,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_CONTROL(
+    hIhvExtAdapter: HANDLE,
+    dwInBufferSize: DWORD,
+    pInBuffer: PBYTE,
+    dwOutBufferSize: DWORD,
+    pOutBuffer: PBYTE,
+    pdwBytesReturned: PDWORD,
+) -> DWORD}
diff --git a/src/um/wlanihvtypes.rs b/src/um/wlanihvtypes.rs
new file mode 100644
index 000000000..d87d7b239
--- /dev/null
+++ b/src/um/wlanihvtypes.rs
@@ -0,0 +1,41 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+//! Structures used to hold information for IHV.
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, BYTE, DWORD, ULONG};
+use shared::wlantypes::{DOT11_AUTH_ALGORITHM, DOT11_BSS_TYPE, DOT11_CIPHER_ALGORITHM, DOT11_SSID};
+use um::eaptypes::EAP_METHOD_TYPE;
+use um::winnt::WCHAR;
+STRUCT!{struct DOT11_MSSECURITY_SETTINGS {
+    dot11AuthAlgorithm: DOT11_AUTH_ALGORITHM,
+    dot11CipherAlgorithm: DOT11_CIPHER_ALGORITHM,
+    fOneXEnabled: BOOL,
+    eapMethodType: EAP_METHOD_TYPE,
+    dwEapConnectionDataLen: DWORD,
+    pEapConnectionData: *mut BYTE,
+}}
+pub type PDOT11_MSSECURITY_SETTINGS = *mut DOT11_MSSECURITY_SETTINGS;
+STRUCT!{struct DOT11EXT_IHV_SSID_LIST {
+    ulCount: ULONG,
+    SSIDs: [DOT11_SSID; 1],
+}}
+pub type PDOT11EXT_IHV_SSID_LIST = *mut DOT11EXT_IHV_SSID_LIST;
+STRUCT!{struct DOT11EXT_IHV_PROFILE_PARAMS {
+    pSsidList: PDOT11EXT_IHV_SSID_LIST,
+    BssType: DOT11_BSS_TYPE,
+    pMSSecuritySettings: PDOT11_MSSECURITY_SETTINGS,
+}}
+pub type PDOT11EXT_IHV_PROFILE_PARAMS = *mut DOT11EXT_IHV_PROFILE_PARAMS;
+pub const MS_MAX_PROFILE_NAME_LENGTH: usize = 256;
+pub const MS_PROFILE_GROUP_POLICY: DWORD = 0x00000001;
+pub const MS_PROFILE_USER: DWORD = 0x00000002;
+STRUCT!{struct DOT11EXT_IHV_PARAMS {
+    dot11ExtIhvProfileParams: DOT11EXT_IHV_PROFILE_PARAMS,
+    wstrProfileName: [WCHAR; MS_MAX_PROFILE_NAME_LENGTH],
+    dwProfileTypeFlags: DWORD,
+    interfaceGuid: GUID,
+}}
+pub type PDOT11EXT_IHV_PARAMS = *mut DOT11EXT_IHV_PARAMS;
diff --git a/src/um/wlclient.rs b/src/um/wlclient.rs
new file mode 100644
index 000000000..e8af80119
--- /dev/null
+++ b/src/um/wlclient.rs
@@ -0,0 +1,33 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, PUCHAR, UCHAR, ULONG, USHORT};
+use shared::windot11::{DOT11_CURRENT_OPERATION_MODE, DOT11_MAC_ADDRESS};
+use um::winnt::LPWSTR;
+STRUCT!{struct DOT11_ADAPTER {
+    gAdapterId: GUID,
+    pszDescription: LPWSTR,
+    Dot11CurrentOpMode: DOT11_CURRENT_OPERATION_MODE,
+}}
+pub type PDOT11_ADAPTER = *mut DOT11_ADAPTER;
+STRUCT!{struct DOT11_BSS_LIST {
+    uNumOfBytes: ULONG,
+    pucBuffer: PUCHAR,
+}}
+pub type PDOT11_BSS_LIST = *mut DOT11_BSS_LIST;
+STRUCT!{struct DOT11_PORT_STATE {
+    PeerMacAddress: DOT11_MAC_ADDRESS,
+    uSessionId: ULONG,
+    bPortControlled: BOOL,
+    bPortAuthorized: BOOL,
+}}
+pub type PDOT11_PORT_STATE = *mut DOT11_PORT_STATE;
+STRUCT!{#[repr(packed)] struct DOT11_SECURITY_PACKET_HEADER {
+    PeerMac: DOT11_MAC_ADDRESS,
+    usEtherType: USHORT,
+    Data: [UCHAR; 1],
+}}
+pub type PDOT11_SECURITY_PACKET_HEADER = *mut DOT11_SECURITY_PACKET_HEADER;


Test patch:
diff --git a/tests/structs_x86.rs b/tests/structs_x86.rs
index 44b310c33..15bca31fd 100644
--- a/tests/structs_x86.rs
+++ b/tests/structs_x86.rs
@@ -899,6 +899,12 @@ fn shared_nldef() {
     assert_eq!(size_of::<NL_BANDWIDTH_INFORMATION>(), 24);
     assert_eq!(align_of::<NL_BANDWIDTH_INFORMATION>(), 8);
 }
+#[cfg(feature = "ntddndis")] #[test]
+fn shared_ntddndis() {
+    use winapi::shared::ntddndis::*;
+    assert_eq!(size_of::<NDIS_OBJECT_HEADER>(), 4);
+    assert_eq!(align_of::<NDIS_OBJECT_HEADER>(), 2);
+}
 #[cfg(feature = "ntddscsi")] #[test]
 fn shared_ntddscsi() {
     use winapi::shared::ntddscsi::*;
@@ -1613,6 +1619,410 @@ fn shared_windef() {
     assert_eq!(size_of::<POINTS>(), 4);
     assert_eq!(align_of::<POINTS>(), 2);
 }
+#[cfg(feature = "windot11")] #[test]
+fn shared_windot11() {
+    use winapi::shared::windot11::*;
+    assert_eq!(size_of::<DOT11_BSSID_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_BSSID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_RATE_SET>(), 132);
+    assert_eq!(align_of::<DOT11_RATE_SET>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_SESSION_INFO>(), 146);
+    assert_eq!(align_of::<DOT11_WFD_SESSION_INFO>(), 2);
+    assert_eq!(size_of::<DOT11_OFFLOAD_CAPABILITY>(), 28);
+    assert_eq!(align_of::<DOT11_OFFLOAD_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_CURRENT_OFFLOAD_CAPABILITY>(), 8);
+    assert_eq!(align_of::<DOT11_CURRENT_OFFLOAD_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_IV48_COUNTER>(), 8);
+    assert_eq!(align_of::<DOT11_IV48_COUNTER>(), 4);
+    assert_eq!(size_of::<DOT11_WEP_OFFLOAD>(), 208);
+    assert_eq!(align_of::<DOT11_WEP_OFFLOAD>(), 4);
+    assert_eq!(size_of::<DOT11_WEP_UPLOAD>(), 176);
+    assert_eq!(align_of::<DOT11_WEP_UPLOAD>(), 4);
+    assert_eq!(size_of::<DOT11_DEFAULT_WEP_OFFLOAD>(), 208);
+    assert_eq!(align_of::<DOT11_DEFAULT_WEP_OFFLOAD>(), 4);
+    assert_eq!(size_of::<DOT11_DEFAULT_WEP_UPLOAD>(), 176);
+    assert_eq!(align_of::<DOT11_DEFAULT_WEP_UPLOAD>(), 4);
+    assert_eq!(size_of::<DOT11_OPERATION_MODE_CAPABILITY>(), 24);
+    assert_eq!(align_of::<DOT11_OPERATION_MODE_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_CURRENT_OPERATION_MODE>(), 8);
+    assert_eq!(align_of::<DOT11_CURRENT_OPERATION_MODE>(), 4);
+    assert_eq!(size_of::<DOT11_SCAN_REQUEST>(), 84);
+    assert_eq!(align_of::<DOT11_SCAN_REQUEST>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_TYPE_INFO>(), 32);
+    assert_eq!(align_of::<DOT11_PHY_TYPE_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_SCAN_REQUEST_V2>(), 60);
+    assert_eq!(align_of::<DOT11_SCAN_REQUEST_V2>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_TYPE_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_PHY_TYPE_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_BSS_DESCRIPTION>(), 48);
+    assert_eq!(align_of::<DOT11_BSS_DESCRIPTION>(), 8);
+    assert_eq!(size_of::<DOT11_JOIN_REQUEST>(), 192);
+    assert_eq!(align_of::<DOT11_JOIN_REQUEST>(), 8);
+    assert_eq!(size_of::<DOT11_START_REQUEST>(), 192);
+    assert_eq!(align_of::<DOT11_START_REQUEST>(), 8);
+    assert_eq!(size_of::<DOT11_UPDATE_IE>(), 12);
+    assert_eq!(align_of::<DOT11_UPDATE_IE>(), 4);
+    assert_eq!(size_of::<DOT11_RESET_REQUEST>(), 12);
+    assert_eq!(align_of::<DOT11_RESET_REQUEST>(), 4);
+    assert_eq!(size_of::<DOT11_OPTIONAL_CAPABILITY>(), 8);
+    assert_eq!(align_of::<DOT11_OPTIONAL_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_CURRENT_OPTIONAL_CAPABILITY>(), 8);
+    assert_eq!(align_of::<DOT11_CURRENT_OPTIONAL_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_POWER_MGMT_MODE>(), 16);
+    assert_eq!(align_of::<DOT11_POWER_MGMT_MODE>(), 4);
+    assert_eq!(size_of::<DOT11_COUNTERS_ENTRY>(), 52);
+    assert_eq!(align_of::<DOT11_COUNTERS_ENTRY>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_PHY_TYPES>(), 12);
+    assert_eq!(align_of::<DOT11_SUPPORTED_PHY_TYPES>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_POWER_LEVELS>(), 36);
+    assert_eq!(align_of::<DOT11_SUPPORTED_POWER_LEVELS>(), 4);
+    assert_eq!(size_of::<DOT11_REG_DOMAIN_VALUE>(), 8);
+    assert_eq!(align_of::<DOT11_REG_DOMAIN_VALUE>(), 4);
+    assert_eq!(size_of::<DOT11_REG_DOMAINS_SUPPORT_VALUE>(), 16);
+    assert_eq!(align_of::<DOT11_REG_DOMAINS_SUPPORT_VALUE>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_ANTENNA>(), 8);
+    assert_eq!(align_of::<DOT11_SUPPORTED_ANTENNA>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_ANTENNA_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_SUPPORTED_ANTENNA_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_DIVERSITY_SELECTION_RX>(), 8);
+    assert_eq!(align_of::<DOT11_DIVERSITY_SELECTION_RX>(), 4);
+    assert_eq!(size_of::<DOT11_DIVERSITY_SELECTION_RX_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_DIVERSITY_SELECTION_RX_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_DATA_RATES_VALUE>(), 16);
+    assert_eq!(align_of::<DOT11_SUPPORTED_DATA_RATES_VALUE>(), 1);
+    assert_eq!(size_of::<DOT11_SUPPORTED_DATA_RATES_VALUE_V2>(), 510);
+    assert_eq!(align_of::<DOT11_SUPPORTED_DATA_RATES_VALUE_V2>(), 1);
+    assert_eq!(size_of::<DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY>(), 16);
+    assert_eq!(align_of::<DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY>(), 4);
+    assert_eq!(size_of::<DOT11_MD_CAPABILITY_ENTRY_LIST>(), 24);
+    assert_eq!(align_of::<DOT11_MD_CAPABILITY_ENTRY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_HOPPING_PATTERN_ENTRY>(), 8);
+    assert_eq!(align_of::<DOT11_HOPPING_PATTERN_ENTRY>(), 4);
+    assert_eq!(size_of::<DOT11_HOPPING_PATTERN_ENTRY_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_HOPPING_PATTERN_ENTRY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WPA_TSC>(), 20);
+    assert_eq!(align_of::<DOT11_WPA_TSC>(), 4);
+    assert_eq!(size_of::<DOT11_RSSI_RANGE>(), 12);
+    assert_eq!(align_of::<DOT11_RSSI_RANGE>(), 4);
+    assert_eq!(size_of::<DOT11_NIC_SPECIFIC_EXTENSION>(), 12);
+    assert_eq!(align_of::<DOT11_NIC_SPECIFIC_EXTENSION>(), 4);
+    assert_eq!(size_of::<DOT11_AP_JOIN_REQUEST>(), 192);
+    assert_eq!(align_of::<DOT11_AP_JOIN_REQUEST>(), 8);
+    assert_eq!(size_of::<DOT11_RECV_SENSITIVITY>(), 12);
+    assert_eq!(align_of::<DOT11_RECV_SENSITIVITY>(), 4);
+    assert_eq!(size_of::<DOT11_RECV_SENSITIVITY_LIST>(), 24);
+    assert_eq!(align_of::<DOT11_RECV_SENSITIVITY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WME_AC_PARAMETERS>(), 6);
+    assert_eq!(align_of::<DOT11_WME_AC_PARAMETERS>(), 2);
+    assert_eq!(size_of::<DOT11_WME_AC_PARAMETERS_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_WME_AC_PARAMETERS_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WME_UPDATE_IE>(), 24);
+    assert_eq!(align_of::<DOT11_WME_UPDATE_IE>(), 4);
+    assert_eq!(size_of::<DOT11_QOS_TX_DURATION>(), 12);
+    assert_eq!(align_of::<DOT11_QOS_TX_DURATION>(), 4);
+    assert_eq!(size_of::<DOT11_QOS_TX_MEDIUM_TIME>(), 12);
+    assert_eq!(align_of::<DOT11_QOS_TX_MEDIUM_TIME>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_OFDM_FREQUENCY>(), 4);
+    assert_eq!(align_of::<DOT11_SUPPORTED_OFDM_FREQUENCY>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_OFDM_FREQUENCY_LIST>(), 12);
+    assert_eq!(align_of::<DOT11_SUPPORTED_OFDM_FREQUENCY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_DSSS_CHANNEL>(), 4);
+    assert_eq!(align_of::<DOT11_SUPPORTED_DSSS_CHANNEL>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_DSSS_CHANNEL_LIST>(), 12);
+    assert_eq!(align_of::<DOT11_SUPPORTED_DSSS_CHANNEL_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_BYTE_ARRAY>(), 16);
+    assert_eq!(align_of::<DOT11_BYTE_ARRAY>(), 4);
+    assert_eq!(size_of::<DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO>(), 12);
+    assert_eq!(align_of::<DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_BSS_ENTRY>(), 72);
+    assert_eq!(align_of::<DOT11_BSS_ENTRY>(), 8);
+    assert_eq!(size_of::<DOT11_SSID_LIST>(), 48);
+    assert_eq!(align_of::<DOT11_SSID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_MAC_ADDRESS_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_MAC_ADDRESS_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_PMKID_ENTRY>(), 28);
+    assert_eq!(align_of::<DOT11_PMKID_ENTRY>(), 4);
+    assert_eq!(size_of::<DOT11_PMKID_LIST>(), 40);
+    assert_eq!(align_of::<DOT11_PMKID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_FRAME_STATISTICS>(), 144);
+    assert_eq!(align_of::<DOT11_PHY_FRAME_STATISTICS>(), 8);
+    assert_eq!(size_of::<DOT11_MAC_FRAME_STATISTICS>(), 112);
+    assert_eq!(align_of::<DOT11_MAC_FRAME_STATISTICS>(), 8);
+    assert_eq!(size_of::<DOT11_STATISTICS>(), 400);
+    assert_eq!(align_of::<DOT11_STATISTICS>(), 8);
+    assert_eq!(size_of::<DOT11_PRIVACY_EXEMPTION>(), 6);
+    assert_eq!(align_of::<DOT11_PRIVACY_EXEMPTION>(), 2);
+    assert_eq!(size_of::<DOT11_PRIVACY_EXEMPTION_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_PRIVACY_EXEMPTION_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_AUTH_ALGORITHM_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_AUTH_ALGORITHM_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_AUTH_CIPHER_PAIR_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_AUTH_CIPHER_PAIR_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_CIPHER_ALGORITHM_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_CIPHER_ALGORITHM_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_CIPHER_DEFAULT_KEY_VALUE>(), 24);
+    assert_eq!(align_of::<DOT11_CIPHER_DEFAULT_KEY_VALUE>(), 4);
+    assert_eq!(size_of::<DOT11_KEY_ALGO_TKIP_MIC>(), 20);
+    assert_eq!(align_of::<DOT11_KEY_ALGO_TKIP_MIC>(), 4);
+    assert_eq!(size_of::<DOT11_KEY_ALGO_CCMP>(), 16);
+    assert_eq!(align_of::<DOT11_KEY_ALGO_CCMP>(), 4);
+    assert_eq!(size_of::<DOT11_KEY_ALGO_GCMP>(), 16);
+    assert_eq!(align_of::<DOT11_KEY_ALGO_GCMP>(), 4);
+    assert_eq!(size_of::<DOT11_KEY_ALGO_BIP>(), 16);
+    assert_eq!(align_of::<DOT11_KEY_ALGO_BIP>(), 4);
+    assert_eq!(size_of::<DOT11_CIPHER_KEY_MAPPING_KEY_VALUE>(), 24);
+    assert_eq!(align_of::<DOT11_CIPHER_KEY_MAPPING_KEY_VALUE>(), 4);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_INFO_EX>(), 328);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_INFO_EX>(), 8);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_INFO_LIST>(), 344);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_INFO_LIST>(), 8);
+    assert_eq!(size_of::<DOT11_PHY_ID_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_PHY_ID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_EXTSTA_CAPABILITY>(), 44);
+    assert_eq!(align_of::<DOT11_EXTSTA_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_DATA_RATE_MAPPING_ENTRY>(), 4);
+    assert_eq!(align_of::<DOT11_DATA_RATE_MAPPING_ENTRY>(), 2);
+    assert_eq!(size_of::<DOT11_DATA_RATE_MAPPING_TABLE>(), 512);
+    assert_eq!(align_of::<DOT11_DATA_RATE_MAPPING_TABLE>(), 4);
+    assert_eq!(size_of::<DOT11_COUNTRY_OR_REGION_STRING_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_COUNTRY_OR_REGION_STRING_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_PORT_STATE_NOTIFICATION>(), 12);
+    assert_eq!(align_of::<DOT11_PORT_STATE_NOTIFICATION>(), 2);
+    assert_eq!(size_of::<DOT11_IBSS_PARAMS>(), 16);
+    assert_eq!(align_of::<DOT11_IBSS_PARAMS>(), 4);
+    assert_eq!(size_of::<DOT11_QOS_PARAMS>(), 6);
+    assert_eq!(align_of::<DOT11_QOS_PARAMS>(), 2);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_PARAMS>(), 20);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_PARAMS>(), 4);
+    assert_eq!(size_of::<DOT11_FRAGMENT_DESCRIPTOR>(), 8);
+    assert_eq!(align_of::<DOT11_FRAGMENT_DESCRIPTOR>(), 4);
+    assert_eq!(size_of::<DOT11_PER_MSDU_COUNTERS>(), 20);
+    assert_eq!(align_of::<DOT11_PER_MSDU_COUNTERS>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_ATTRIBUTES>(), 1092);
+    assert_eq!(align_of::<DOT11_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_HRDSSS_PHY_ATTRIBUTES>(), 8);
+    assert_eq!(align_of::<DOT11_HRDSSS_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_OFDM_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(align_of::<DOT11_OFDM_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_ERP_PHY_ATTRIBUTES>(), 12);
+    assert_eq!(align_of::<DOT11_ERP_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_EXTSTA_ATTRIBUTES>(), 116);
+    assert_eq!(align_of::<DOT11_EXTSTA_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_RECV_EXTENSION_INFO>(), 88);
+    assert_eq!(align_of::<DOT11_RECV_EXTENSION_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_RECV_EXTENSION_INFO_V2>(), 80);
+    assert_eq!(align_of::<DOT11_RECV_EXTENSION_INFO_V2>(), 4);
+    assert_eq!(size_of::<DOT11_STATUS_INDICATION>(), 8);
+    assert_eq!(align_of::<DOT11_STATUS_INDICATION>(), 4);
+    assert_eq!(size_of::<DOT11_MPDU_MAX_LENGTH_INDICATION>(), 12);
+    assert_eq!(align_of::<DOT11_MPDU_MAX_LENGTH_INDICATION>(), 4);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_START_PARAMETERS>(), 56);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_START_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_ENCAP_ENTRY>(), 4);
+    assert_eq!(align_of::<DOT11_ENCAP_ENTRY>(), 2);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_COMPLETION_PARAMETERS>(), 96);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_COMPLETION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_CONNECTION_START_PARAMETERS>(), 52);
+    assert_eq!(align_of::<DOT11_CONNECTION_START_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_CONNECTION_COMPLETION_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_CONNECTION_COMPLETION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_ROAMING_START_PARAMETERS>(), 52);
+    assert_eq!(align_of::<DOT11_ROAMING_START_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_ROAMING_COMPLETION_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_ROAMING_COMPLETION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_DISASSOCIATION_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_DISASSOCIATION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_TKIPMIC_FAILURE_PARAMETERS>(), 20);
+    assert_eq!(align_of::<DOT11_TKIPMIC_FAILURE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_PMKID_CANDIDATE_LIST_PARAMETERS>(), 12);
+    assert_eq!(align_of::<DOT11_PMKID_CANDIDATE_LIST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_BSSID_CANDIDATE>(), 12);
+    assert_eq!(align_of::<DOT11_BSSID_CANDIDATE>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_STATE_PARAMETERS>(), 12);
+    assert_eq!(align_of::<DOT11_PHY_STATE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_LINK_QUALITY_ENTRY>(), 7);
+    assert_eq!(align_of::<DOT11_LINK_QUALITY_ENTRY>(), 1);
+    assert_eq!(size_of::<DOT11_LINK_QUALITY_PARAMETERS>(), 12);
+    assert_eq!(align_of::<DOT11_LINK_QUALITY_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_EXTSTA_SEND_CONTEXT>(), 24);
+    assert_eq!(align_of::<DOT11_EXTSTA_SEND_CONTEXT>(), 4);
+    assert_eq!(size_of::<DOT11_EXTSTA_RECV_CONTEXT>(), 48);
+    assert_eq!(align_of::<DOT11_EXTSTA_RECV_CONTEXT>(), 8);
+    assert_eq!(size_of::<DOT11_EXTAP_ATTRIBUTES>(), 56);
+    assert_eq!(align_of::<DOT11_EXTAP_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_STARTED_PARAMETERS>(), 10);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_STARTED_PARAMETERS>(), 2);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS>(), 20);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS>(), 64);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_STOP_AP_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_STOP_AP_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS>(), 12);
+    assert_eq!(align_of::<DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_CAN_SUSTAIN_AP_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_CAN_SUSTAIN_AP_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_AVAILABLE_CHANNEL_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_AVAILABLE_CHANNEL_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_AVAILABLE_FREQUENCY_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_AVAILABLE_FREQUENCY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_DISASSOCIATE_PEER_REQUEST>(), 12);
+    assert_eq!(align_of::<DOT11_DISASSOCIATE_PEER_REQUEST>(), 2);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_DECISION>(), 24);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_DECISION>(), 4);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_DECISION_V2>(), 28);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_DECISION_V2>(), 4);
+    assert_eq!(size_of::<DOT11_ADDITIONAL_IE>(), 20);
+    assert_eq!(align_of::<DOT11_ADDITIONAL_IE>(), 4);
+    assert_eq!(size_of::<DOT11_PEER_STATISTICS>(), 48);
+    assert_eq!(align_of::<DOT11_PEER_STATISTICS>(), 8);
+    assert_eq!(size_of::<DOT11_PEER_INFO>(), 352);
+    assert_eq!(align_of::<DOT11_PEER_INFO>(), 8);
+    assert_eq!(size_of::<DOT11_PEER_INFO_LIST>(), 368);
+    assert_eq!(align_of::<DOT11_PEER_INFO_LIST>(), 8);
+    assert_eq!(size_of::<DOT11_VWIFI_COMBINATION>(), 16);
+    assert_eq!(align_of::<DOT11_VWIFI_COMBINATION>(), 4);
+    assert_eq!(size_of::<DOT11_VWIFI_COMBINATION_V2>(), 20);
+    assert_eq!(align_of::<DOT11_VWIFI_COMBINATION_V2>(), 4);
+    assert_eq!(size_of::<DOT11_VWIFI_COMBINATION_V3>(), 24);
+    assert_eq!(align_of::<DOT11_VWIFI_COMBINATION_V3>(), 4);
+    assert_eq!(size_of::<DOT11_VWIFI_ATTRIBUTES>(), 24);
+    assert_eq!(align_of::<DOT11_VWIFI_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_MAC_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_MAC_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_MAC_INFO>(), 16);
+    assert_eq!(align_of::<DOT11_MAC_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_ATTRIBUTES>(), 56);
+    assert_eq!(align_of::<DOT11_WFD_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_TYPE>(), 8);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_TYPE>(), 2);
+    assert_eq!(size_of::<DOT11_WPS_DEVICE_NAME>(), 36);
+    assert_eq!(align_of::<DOT11_WPS_DEVICE_NAME>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_CONFIGURATION_TIMEOUT>(), 2);
+    assert_eq!(align_of::<DOT11_WFD_CONFIGURATION_TIMEOUT>(), 1);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_ID>(), 44);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_ID>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_GO_INTENT>(), 1);
+    assert_eq!(align_of::<DOT11_WFD_GO_INTENT>(), 1);
+    assert_eq!(size_of::<DOT11_WFD_CHANNEL>(), 5);
+    assert_eq!(align_of::<DOT11_WFD_CHANNEL>(), 1);
+    assert_eq!(size_of::<WFDSVC_CONNECTION_CAPABILITY>(), 3);
+    assert_eq!(align_of::<WFDSVC_CONNECTION_CAPABILITY>(), 1);
+    assert_eq!(size_of::<DOT11_WFD_SERVICE_HASH_LIST>(), 8);
+    assert_eq!(align_of::<DOT11_WFD_SERVICE_HASH_LIST>(), 2);
+    assert_eq!(size_of::<DOT11_WFD_ADVERTISEMENT_ID>(), 12);
+    assert_eq!(align_of::<DOT11_WFD_ADVERTISEMENT_ID>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_SESSION_ID>(), 12);
+    assert_eq!(align_of::<DOT11_WFD_SESSION_ID>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_ADVERTISED_SERVICE_DESCRIPTOR>(), 264);
+    assert_eq!(align_of::<DOT11_WFD_ADVERTISED_SERVICE_DESCRIPTOR>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_ADVERTISED_SERVICE_LIST>(), 268);
+    assert_eq!(align_of::<DOT11_WFD_ADVERTISED_SERVICE_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS>(), 20);
+    assert_eq!(align_of::<DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS>(), 32);
+    assert_eq!(align_of::<DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS>(), 32);
+    assert_eq!(align_of::<DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS>(), 28);
+    assert_eq!(align_of::<DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS>(), 32);
+    assert_eq!(align_of::<DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS>(), 32);
+    assert_eq!(align_of::<DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS>(), 28);
+    assert_eq!(align_of::<DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_ANQP_QUERY_COMPLETE_PARAMETERS>(), 16);
+    assert_eq!(align_of::<DOT11_ANQP_QUERY_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_CAPABILITY_CONFIG>(), 16);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_CAPABILITY_CONFIG>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG>(), 16);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_V2>(), 20);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_V2>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_INFO>(), 56);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DISCOVER_DEVICE_FILTER>(), 44);
+    assert_eq!(align_of::<DOT11_WFD_DISCOVER_DEVICE_FILTER>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DISCOVER_REQUEST>(), 36);
+    assert_eq!(align_of::<DOT11_WFD_DISCOVER_REQUEST>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_ENTRY>(), 96);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_ENTRY>(), 8);
+    assert_eq!(size_of::<DOT11_WFD_ADDITIONAL_IE>(), 28);
+    assert_eq!(align_of::<DOT11_WFD_ADDITIONAL_IE>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS>(), 36);
+    assert_eq!(align_of::<DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS>(), 88);
+    assert_eq!(align_of::<DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS>(), 80);
+    assert_eq!(align_of::<DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_INVITATION_FLAGS>(), 1);
+    assert_eq!(align_of::<DOT11_WFD_INVITATION_FLAGS>(), 1);
+    assert_eq!(size_of::<DOT11_SEND_INVITATION_REQUEST_PARAMETERS>(), 88);
+    assert_eq!(align_of::<DOT11_SEND_INVITATION_REQUEST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_INVITATION_RESPONSE_PARAMETERS>(), 44);
+    assert_eq!(align_of::<DOT11_SEND_INVITATION_RESPONSE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS>(), 76);
+    assert_eq!(align_of::<DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS>(), 28);
+    assert_eq!(align_of::<DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_LISTEN_CHANNEL>(), 6);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_LISTEN_CHANNEL>(), 2);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_START_PARAMETERS>(), 10);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_START_PARAMETERS>(), 2);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_JOIN_PARAMETERS>(), 20);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_JOIN_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO>(), 6);
+    assert_eq!(align_of::<DOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO>(), 2);
+    assert_eq!(size_of::<DOT11_POWER_MGMT_MODE_STATUS_INFO>(), 16);
+    assert_eq!(align_of::<DOT11_POWER_MGMT_MODE_STATUS_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_CHANNEL_HINT>(), 8);
+    assert_eq!(align_of::<DOT11_CHANNEL_HINT>(), 4);
+    assert_eq!(size_of::<DOT11_OFFLOAD_NETWORK>(), 76);
+    assert_eq!(align_of::<DOT11_OFFLOAD_NETWORK>(), 4);
+    assert_eq!(size_of::<DOT11_OFFLOAD_NETWORK_LIST_INFO>(), 100);
+    assert_eq!(align_of::<DOT11_OFFLOAD_NETWORK_LIST_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_OFFLOAD_NETWORK_STATUS_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_OFFLOAD_NETWORK_STATUS_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_TEST>(), 12);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_TEST>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_SELF_TEST_SET_PARAMS>(), 24);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_SELF_TEST_SET_PARAMS>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_SELF_TEST_QUERY_RESULTS>(), 28);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_SELF_TEST_QUERY_RESULTS>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_RX>(), 16);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_RX>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_TX>(), 20);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_TX>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_QUERY_ADC>(), 12);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_QUERY_ADC>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_TEST_SET_DATA>(), 16);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_TEST_SET_DATA>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_TEST_QUERY_DATA>(), 20);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_TEST_QUERY_DATA>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_TEST_SLEEP>(), 8);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_TEST_SLEEP>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_CALLBACK_PARAMETERS>(), 16);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_CALLBACK_PARAMETERS>(), 4);
+}
 #[cfg(feature = "winusbio")] #[test]
 fn shared_winusbio() {
     use winapi::shared::winusbio::*;
@@ -1621,6 +2031,20 @@ fn shared_winusbio() {
     assert_eq!(size_of::<WINUSB_PIPE_INFORMATION_EX>(), 16);
     assert_eq!(align_of::<WINUSB_PIPE_INFORMATION_EX>(), 4);
 }
+#[cfg(feature = "wlantypes")] #[test]
+fn shared_wlantypes() {
+    use winapi::shared::wlantypes::*;
+    assert_eq!(size_of::<DOT11_SSID>(), 36);
+    assert_eq!(align_of::<DOT11_SSID>(), 4);
+    assert_eq!(size_of::<DOT11_AUTH_CIPHER_PAIR>(), 8);
+    assert_eq!(align_of::<DOT11_AUTH_CIPHER_PAIR>(), 4);
+    assert_eq!(size_of::<DOT11_OI>(), 8);
+    assert_eq!(align_of::<DOT11_OI>(), 2);
+    assert_eq!(size_of::<DOT11_ACCESSNETWORKOPTIONS>(), 5);
+    assert_eq!(align_of::<DOT11_ACCESSNETWORKOPTIONS>(), 1);
+    assert_eq!(size_of::<DOT11_VENUEINFO>(), 2);
+    assert_eq!(align_of::<DOT11_VENUEINFO>(), 1);
+}
 #[cfg(feature = "wmistr")] #[test]
 fn shared_wmistr() {
     use winapi::shared::wmistr::*;
@@ -3393,6 +3817,22 @@ fn um_docobj() {
     assert_eq!(size_of::<OLECMDTEXT>(), 16);
     assert_eq!(align_of::<OLECMDTEXT>(), 4);
 }
+#[cfg(feature = "dot1x")] #[test]
+fn um_dot1x() {
+    use winapi::um::dot1x::*;
+    assert_eq!(size_of::<ONEX_VARIABLE_BLOB>(), 8);
+    assert_eq!(align_of::<ONEX_VARIABLE_BLOB>(), 4);
+    assert_eq!(size_of::<ONEX_AUTH_PARAMS>(), 64);
+    assert_eq!(align_of::<ONEX_AUTH_PARAMS>(), 4);
+    assert_eq!(size_of::<ONEX_EAP_ERROR>(), 92);
+    assert_eq!(align_of::<ONEX_EAP_ERROR>(), 4);
+    assert_eq!(size_of::<ONEX_STATUS>(), 12);
+    assert_eq!(align_of::<ONEX_STATUS>(), 4);
+    assert_eq!(size_of::<ONEX_RESULT_UPDATE_DATA>(), 40);
+    assert_eq!(align_of::<ONEX_RESULT_UPDATE_DATA>(), 4);
+    assert_eq!(size_of::<ONEX_USER_INFO>(), 24);
+    assert_eq!(align_of::<ONEX_USER_INFO>(), 4);
+}
 #[cfg(feature = "dpapi")] #[test]
 fn um_dpapi() {
     use winapi::um::dpapi::*;
@@ -3671,6 +4111,64 @@ fn um_dxvahd() {
     assert_eq!(size_of::<DXVAHDETW_DESTROYVIDEOPROCESSOR>(), 8);
     assert_eq!(align_of::<DXVAHDETW_DESTROYVIDEOPROCESSOR>(), 8);
 }
+#[cfg(feature = "eaptypes")] #[test]
+fn um_eaptypes() {
+    use winapi::um::eaptypes::*;
+    assert_eq!(size_of::<EAP_TYPE>(), 12);
+    assert_eq!(align_of::<EAP_TYPE>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_TYPE>(), 16);
+    assert_eq!(align_of::<EAP_METHOD_TYPE>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_INFO>(), 32);
+    assert_eq!(align_of::<EAP_METHOD_INFO>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_INFO_ARRAY_EX>(), 8);
+    assert_eq!(align_of::<EAP_METHOD_INFO_ARRAY_EX>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_INFO_EX>(), 32);
+    assert_eq!(align_of::<EAP_METHOD_INFO_EX>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_INFO_ARRAY>(), 8);
+    assert_eq!(align_of::<EAP_METHOD_INFO_ARRAY>(), 4);
+    assert_eq!(size_of::<EAP_ERROR>(), 80);
+    assert_eq!(align_of::<EAP_ERROR>(), 4);
+    assert_eq!(size_of::<EAP_ATTRIBUTE>(), 12);
+    assert_eq!(align_of::<EAP_ATTRIBUTE>(), 4);
+    assert_eq!(size_of::<EAP_ATTRIBUTES>(), 8);
+    assert_eq!(align_of::<EAP_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<EAP_CONFIG_INPUT_FIELD_DATA>(), 28);
+    assert_eq!(align_of::<EAP_CONFIG_INPUT_FIELD_DATA>(), 4);
+    assert_eq!(size_of::<EAP_CONFIG_INPUT_FIELD_ARRAY>(), 12);
+    assert_eq!(align_of::<EAP_CONFIG_INPUT_FIELD_ARRAY>(), 4);
+    assert_eq!(size_of::<EAP_CRED_EXPIRY_REQ>(), 24);
+    assert_eq!(align_of::<EAP_CRED_EXPIRY_REQ>(), 4);
+    assert_eq!(size_of::<EAP_UI_DATA_FORMAT>(), 4);
+    assert_eq!(align_of::<EAP_UI_DATA_FORMAT>(), 4);
+    assert_eq!(size_of::<EAP_INTERACTIVE_UI_DATA>(), 20);
+    assert_eq!(align_of::<EAP_INTERACTIVE_UI_DATA>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_VALUE_BOOL>(), 8);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_VALUE_BOOL>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_VALUE_DWORD>(), 8);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_VALUE_DWORD>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_VALUE_STRING>(), 8);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_VALUE_STRING>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_VALUE>(), 8);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_VALUE>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY>(), 16);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_ARRAY>(), 8);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_ARRAY>(), 4);
+    assert_eq!(size_of::<EAPHOST_IDENTITY_UI_PARAMS>(), 56);
+    assert_eq!(align_of::<EAPHOST_IDENTITY_UI_PARAMS>(), 4);
+    assert_eq!(size_of::<EAPHOST_INTERACTIVE_UI_PARAMS>(), 24);
+    assert_eq!(align_of::<EAPHOST_INTERACTIVE_UI_PARAMS>(), 4);
+    assert_eq!(size_of::<EapUsernamePasswordCredential>(), 8);
+    assert_eq!(align_of::<EapUsernamePasswordCredential>(), 4);
+    assert_eq!(size_of::<EapCertificateCredential>(), 24);
+    assert_eq!(align_of::<EapCertificateCredential>(), 4);
+    assert_eq!(size_of::<EapSimCredential>(), 4);
+    assert_eq!(align_of::<EapSimCredential>(), 4);
+    assert_eq!(size_of::<EapCredentialTypeData>(), 24);
+    assert_eq!(align_of::<EapCredentialTypeData>(), 4);
+    assert_eq!(size_of::<EapCredential>(), 28);
+    assert_eq!(align_of::<EapCredential>(), 4);
+}
 #[cfg(feature = "endpointvolume")] #[test]
 fn um_endpointvolume() {
     use winapi::um::endpointvolume::*;
@@ -3977,6 +4475,12 @@ fn um_imm() {
     assert_eq!(size_of::<COMPOSITIONFORM>(), 28);
     assert_eq!(align_of::<COMPOSITIONFORM>(), 4);
 }
+#[cfg(feature = "l2cmn")] #[test]
+fn um_l2cmn() {
+    use winapi::um::l2cmn::*;
+    assert_eq!(size_of::<L2_NOTIFICATION_DATA>(), 32);
+    assert_eq!(align_of::<L2_NOTIFICATION_DATA>(), 4);
+}
 #[cfg(feature = "lmaccess")] #[test]
 fn um_lmaccess() {
     use winapi::um::lmaccess::*;
@@ -9150,6 +9654,144 @@ fn um_ws2bth() {
     assert_eq!(size_of::<BTH_INFO_RSP>(), 47);
     assert_eq!(align_of::<BTH_INFO_RSP>(), 1);
 }
+#[cfg(feature = "wlanapi")] #[test]
+fn um_wlanapi() {
+    use winapi::um::wlanapi::*;
+    assert_eq!(size_of::<WLAN_PROFILE_INFO>(), 516);
+    assert_eq!(align_of::<WLAN_PROFILE_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_NETWORK>(), 40);
+    assert_eq!(align_of::<DOT11_NETWORK>(), 4);
+    assert_eq!(size_of::<WLAN_RAW_DATA>(), 8);
+    assert_eq!(align_of::<WLAN_RAW_DATA>(), 4);
+    assert_eq!(size_of::<WLAN_RAW_DATA_LIST_DataList>(), 8);
+    assert_eq!(align_of::<WLAN_RAW_DATA_LIST_DataList>(), 4);
+    assert_eq!(size_of::<WLAN_RAW_DATA_LIST>(), 16);
+    assert_eq!(align_of::<WLAN_RAW_DATA_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_RATE_SET>(), 256);
+    assert_eq!(align_of::<WLAN_RATE_SET>(), 4);
+    assert_eq!(size_of::<WLAN_AVAILABLE_NETWORK>(), 628);
+    assert_eq!(align_of::<WLAN_AVAILABLE_NETWORK>(), 4);
+    assert_eq!(size_of::<WLAN_AVAILABLE_NETWORK_V2>(), 644);
+    assert_eq!(align_of::<WLAN_AVAILABLE_NETWORK_V2>(), 4);
+    assert_eq!(size_of::<WLAN_BSS_ENTRY>(), 360);
+    assert_eq!(align_of::<WLAN_BSS_ENTRY>(), 8);
+    assert_eq!(size_of::<WLAN_BSS_LIST>(), 368);
+    assert_eq!(align_of::<WLAN_BSS_LIST>(), 8);
+    assert_eq!(size_of::<WLAN_INTERFACE_INFO>(), 532);
+    assert_eq!(align_of::<WLAN_INTERFACE_INFO>(), 4);
+    assert_eq!(size_of::<WLAN_ASSOCIATION_ATTRIBUTES>(), 68);
+    assert_eq!(align_of::<WLAN_ASSOCIATION_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<WLAN_SECURITY_ATTRIBUTES>(), 16);
+    assert_eq!(align_of::<WLAN_SECURITY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<WLAN_CONNECTION_ATTRIBUTES>(), 604);
+    assert_eq!(align_of::<WLAN_CONNECTION_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<WLAN_PHY_RADIO_STATE>(), 12);
+    assert_eq!(align_of::<WLAN_PHY_RADIO_STATE>(), 4);
+    assert_eq!(size_of::<WLAN_RADIO_STATE>(), 772);
+    assert_eq!(align_of::<WLAN_RADIO_STATE>(), 4);
+    assert_eq!(size_of::<WLAN_INTERFACE_CAPABILITY>(), 276);
+    assert_eq!(align_of::<WLAN_INTERFACE_CAPABILITY>(), 4);
+    assert_eq!(size_of::<WLAN_AUTH_CIPHER_PAIR_LIST>(), 12);
+    assert_eq!(align_of::<WLAN_AUTH_CIPHER_PAIR_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_COUNTRY_OR_REGION_STRING_LIST>(), 8);
+    assert_eq!(align_of::<WLAN_COUNTRY_OR_REGION_STRING_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_PROFILE_INFO_LIST>(), 524);
+    assert_eq!(align_of::<WLAN_PROFILE_INFO_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_AVAILABLE_NETWORK_LIST>(), 636);
+    assert_eq!(align_of::<WLAN_AVAILABLE_NETWORK_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_AVAILABLE_NETWORK_LIST_V2>(), 652);
+    assert_eq!(align_of::<WLAN_AVAILABLE_NETWORK_LIST_V2>(), 4);
+    assert_eq!(size_of::<WLAN_INTERFACE_INFO_LIST>(), 540);
+    assert_eq!(align_of::<WLAN_INTERFACE_INFO_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_NETWORK_LIST>(), 48);
+    assert_eq!(align_of::<DOT11_NETWORK_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_CONNECTION_PARAMETERS>(), 24);
+    assert_eq!(align_of::<WLAN_CONNECTION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<WLAN_CONNECTION_PARAMETERS_V2>(), 32);
+    assert_eq!(align_of::<WLAN_CONNECTION_PARAMETERS_V2>(), 4);
+    assert_eq!(size_of::<WLAN_MSM_NOTIFICATION_DATA>(), 580);
+    assert_eq!(align_of::<WLAN_MSM_NOTIFICATION_DATA>(), 4);
+    assert_eq!(size_of::<WLAN_CONNECTION_NOTIFICATION_DATA>(), 572);
+    assert_eq!(align_of::<WLAN_CONNECTION_NOTIFICATION_DATA>(), 4);
+    assert_eq!(size_of::<WLAN_PHY_FRAME_STATISTICS>(), 144);
+    assert_eq!(align_of::<WLAN_PHY_FRAME_STATISTICS>(), 8);
+    assert_eq!(size_of::<WLAN_MAC_FRAME_STATISTICS>(), 96);
+    assert_eq!(align_of::<WLAN_MAC_FRAME_STATISTICS>(), 8);
+    assert_eq!(size_of::<WLAN_STATISTICS>(), 368);
+    assert_eq!(align_of::<WLAN_STATISTICS>(), 8);
+    assert_eq!(size_of::<WLAN_DEVICE_SERVICE_GUID_LIST>(), 24);
+    assert_eq!(align_of::<WLAN_DEVICE_SERVICE_GUID_LIST>(), 4);
+    assert_eq!(size_of::<WFD_GROUP_ID>(), 44);
+    assert_eq!(align_of::<WFD_GROUP_ID>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_PEER_STATE>(), 12);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_PEER_STATE>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_RADIO_STATE>(), 8);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_RADIO_STATE>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_STATE_CHANGE>(), 12);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_STATE_CHANGE>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE>(), 28);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS>(), 40);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_SECURITY_SETTINGS>(), 8);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_SECURITY_SETTINGS>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_STATUS>(), 52);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_STATUS>(), 4);
+}
+#[cfg(feature = "wlanihv")] #[test]
+fn um_wlanihv() {
+    use winapi::um::wlanihv::*;
+    assert_eq!(size_of::<DOT11EXT_APIS>(), 88);
+    assert_eq!(align_of::<DOT11EXT_APIS>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_HANDLERS>(), 76);
+    assert_eq!(align_of::<DOT11EXT_IHV_HANDLERS>(), 4);
+    assert_eq!(size_of::<DOT11EXT_VIRTUAL_STATION_APIS>(), 16);
+    assert_eq!(align_of::<DOT11EXT_VIRTUAL_STATION_APIS>(), 4);
+    assert_eq!(size_of::<DOT11_IHV_VERSION_INFO>(), 8);
+    assert_eq!(align_of::<DOT11_IHV_VERSION_INFO>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_UI_REQUEST>(), 44);
+    assert_eq!(align_of::<DOT11EXT_IHV_UI_REQUEST>(), 4);
+    assert_eq!(size_of::<DOT11_EAP_RESULT>(), 8);
+    assert_eq!(align_of::<DOT11_EAP_RESULT>(), 4);
+    assert_eq!(size_of::<DOT11_MSONEX_RESULT_PARAMS>(), 28);
+    assert_eq!(align_of::<DOT11_MSONEX_RESULT_PARAMS>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_CONNECTIVITY_PROFILE>(), 4);
+    assert_eq!(align_of::<DOT11EXT_IHV_CONNECTIVITY_PROFILE>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_SECURITY_PROFILE>(), 8);
+    assert_eq!(align_of::<DOT11EXT_IHV_SECURITY_PROFILE>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_DISCOVERY_PROFILE>(), 12);
+    assert_eq!(align_of::<DOT11EXT_IHV_DISCOVERY_PROFILE>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_DISCOVERY_PROFILE_LIST>(), 8);
+    assert_eq!(align_of::<DOT11EXT_IHV_DISCOVERY_PROFILE_LIST>(), 4);
+    assert_eq!(size_of::<DOT11EXT_VIRTUAL_STATION_AP_PROPERTY>(), 116);
+    assert_eq!(align_of::<DOT11EXT_VIRTUAL_STATION_AP_PROPERTY>(), 4);
+    assert_eq!(size_of::<WDIAG_IHV_WLAN_ID>(), 560);
+    assert_eq!(align_of::<WDIAG_IHV_WLAN_ID>(), 4);
+}
+#[cfg(feature = "wlanihvtypes")] #[test]
+fn um_wlanihvtypes() {
+    use winapi::um::wlanihvtypes::*;
+    assert_eq!(size_of::<DOT11_MSSECURITY_SETTINGS>(), 36);
+    assert_eq!(align_of::<DOT11_MSSECURITY_SETTINGS>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_SSID_LIST>(), 40);
+    assert_eq!(align_of::<DOT11EXT_IHV_SSID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_PROFILE_PARAMS>(), 12);
+    assert_eq!(align_of::<DOT11EXT_IHV_PROFILE_PARAMS>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_PARAMS>(), 544);
+    assert_eq!(align_of::<DOT11EXT_IHV_PARAMS>(), 4);
+}
+#[cfg(feature = "wlclient")] #[test]
+fn um_wlclient() {
+    use winapi::um::wlclient::*;
+    assert_eq!(size_of::<DOT11_ADAPTER>(), 28);
+    assert_eq!(align_of::<DOT11_ADAPTER>(), 4);
+    assert_eq!(size_of::<DOT11_BSS_LIST>(), 8);
+    assert_eq!(align_of::<DOT11_BSS_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_PORT_STATE>(), 20);
+    assert_eq!(align_of::<DOT11_PORT_STATE>(), 4);
+    assert_eq!(size_of::<DOT11_SECURITY_PACKET_HEADER>(), 9);
+    assert_eq!(align_of::<DOT11_SECURITY_PACKET_HEADER>(), 1);
+}
 #[cfg(feature = "ws2spi")] #[test]
 fn um_ws2spi() {
     use winapi::um::ws2spi::*;
diff --git a/tests/structs_x86_64.rs b/tests/structs_x86_64.rs
index 132f0fc62..763cffa3d 100644
--- a/tests/structs_x86_64.rs
+++ b/tests/structs_x86_64.rs
@@ -896,6 +896,12 @@ fn shared_nldef() {
     assert_eq!(size_of::<NL_BANDWIDTH_INFORMATION>(), 24);
     assert_eq!(align_of::<NL_BANDWIDTH_INFORMATION>(), 8);
 }
+#[cfg(feature = "ntddndis")] #[test]
+fn shared_ntddndis() {
+    use winapi::shared::ntddndis::*;
+    assert_eq!(size_of::<NDIS_OBJECT_HEADER>(), 4);
+    assert_eq!(align_of::<NDIS_OBJECT_HEADER>(), 2);
+}
 #[cfg(feature = "ntddscsi")] #[test]
 fn shared_ntddscsi() {
     use winapi::shared::ntddscsi::*;
@@ -1630,6 +1636,410 @@ fn shared_windef() {
     assert_eq!(size_of::<POINTS>(), 4);
     assert_eq!(align_of::<POINTS>(), 2);
 }
+#[cfg(feature = "windot11")] #[test]
+fn shared_windot11() {
+    use winapi::shared::windot11::*;
+    assert_eq!(size_of::<DOT11_BSSID_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_BSSID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_RATE_SET>(), 132);
+    assert_eq!(align_of::<DOT11_RATE_SET>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_SESSION_INFO>(), 146);
+    assert_eq!(align_of::<DOT11_WFD_SESSION_INFO>(), 2);
+    assert_eq!(size_of::<DOT11_OFFLOAD_CAPABILITY>(), 28);
+    assert_eq!(align_of::<DOT11_OFFLOAD_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_CURRENT_OFFLOAD_CAPABILITY>(), 8);
+    assert_eq!(align_of::<DOT11_CURRENT_OFFLOAD_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_IV48_COUNTER>(), 8);
+    assert_eq!(align_of::<DOT11_IV48_COUNTER>(), 4);
+    assert_eq!(size_of::<DOT11_WEP_OFFLOAD>(), 224);
+    assert_eq!(align_of::<DOT11_WEP_OFFLOAD>(), 8);
+    assert_eq!(size_of::<DOT11_WEP_UPLOAD>(), 184);
+    assert_eq!(align_of::<DOT11_WEP_UPLOAD>(), 8);
+    assert_eq!(size_of::<DOT11_DEFAULT_WEP_OFFLOAD>(), 224);
+    assert_eq!(align_of::<DOT11_DEFAULT_WEP_OFFLOAD>(), 8);
+    assert_eq!(size_of::<DOT11_DEFAULT_WEP_UPLOAD>(), 184);
+    assert_eq!(align_of::<DOT11_DEFAULT_WEP_UPLOAD>(), 8);
+    assert_eq!(size_of::<DOT11_OPERATION_MODE_CAPABILITY>(), 24);
+    assert_eq!(align_of::<DOT11_OPERATION_MODE_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_CURRENT_OPERATION_MODE>(), 8);
+    assert_eq!(align_of::<DOT11_CURRENT_OPERATION_MODE>(), 4);
+    assert_eq!(size_of::<DOT11_SCAN_REQUEST>(), 84);
+    assert_eq!(align_of::<DOT11_SCAN_REQUEST>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_TYPE_INFO>(), 32);
+    assert_eq!(align_of::<DOT11_PHY_TYPE_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_SCAN_REQUEST_V2>(), 60);
+    assert_eq!(align_of::<DOT11_SCAN_REQUEST_V2>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_TYPE_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_PHY_TYPE_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_BSS_DESCRIPTION>(), 48);
+    assert_eq!(align_of::<DOT11_BSS_DESCRIPTION>(), 8);
+    assert_eq!(size_of::<DOT11_JOIN_REQUEST>(), 192);
+    assert_eq!(align_of::<DOT11_JOIN_REQUEST>(), 8);
+    assert_eq!(size_of::<DOT11_START_REQUEST>(), 192);
+    assert_eq!(align_of::<DOT11_START_REQUEST>(), 8);
+    assert_eq!(size_of::<DOT11_UPDATE_IE>(), 12);
+    assert_eq!(align_of::<DOT11_UPDATE_IE>(), 4);
+    assert_eq!(size_of::<DOT11_RESET_REQUEST>(), 12);
+    assert_eq!(align_of::<DOT11_RESET_REQUEST>(), 4);
+    assert_eq!(size_of::<DOT11_OPTIONAL_CAPABILITY>(), 8);
+    assert_eq!(align_of::<DOT11_OPTIONAL_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_CURRENT_OPTIONAL_CAPABILITY>(), 8);
+    assert_eq!(align_of::<DOT11_CURRENT_OPTIONAL_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_POWER_MGMT_MODE>(), 16);
+    assert_eq!(align_of::<DOT11_POWER_MGMT_MODE>(), 4);
+    assert_eq!(size_of::<DOT11_COUNTERS_ENTRY>(), 52);
+    assert_eq!(align_of::<DOT11_COUNTERS_ENTRY>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_PHY_TYPES>(), 12);
+    assert_eq!(align_of::<DOT11_SUPPORTED_PHY_TYPES>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_POWER_LEVELS>(), 36);
+    assert_eq!(align_of::<DOT11_SUPPORTED_POWER_LEVELS>(), 4);
+    assert_eq!(size_of::<DOT11_REG_DOMAIN_VALUE>(), 8);
+    assert_eq!(align_of::<DOT11_REG_DOMAIN_VALUE>(), 4);
+    assert_eq!(size_of::<DOT11_REG_DOMAINS_SUPPORT_VALUE>(), 16);
+    assert_eq!(align_of::<DOT11_REG_DOMAINS_SUPPORT_VALUE>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_ANTENNA>(), 8);
+    assert_eq!(align_of::<DOT11_SUPPORTED_ANTENNA>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_ANTENNA_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_SUPPORTED_ANTENNA_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_DIVERSITY_SELECTION_RX>(), 8);
+    assert_eq!(align_of::<DOT11_DIVERSITY_SELECTION_RX>(), 4);
+    assert_eq!(size_of::<DOT11_DIVERSITY_SELECTION_RX_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_DIVERSITY_SELECTION_RX_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_DATA_RATES_VALUE>(), 16);
+    assert_eq!(align_of::<DOT11_SUPPORTED_DATA_RATES_VALUE>(), 1);
+    assert_eq!(size_of::<DOT11_SUPPORTED_DATA_RATES_VALUE_V2>(), 510);
+    assert_eq!(align_of::<DOT11_SUPPORTED_DATA_RATES_VALUE_V2>(), 1);
+    assert_eq!(size_of::<DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY>(), 16);
+    assert_eq!(align_of::<DOT11_MULTI_DOMAIN_CAPABILITY_ENTRY>(), 4);
+    assert_eq!(size_of::<DOT11_MD_CAPABILITY_ENTRY_LIST>(), 24);
+    assert_eq!(align_of::<DOT11_MD_CAPABILITY_ENTRY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_HOPPING_PATTERN_ENTRY>(), 8);
+    assert_eq!(align_of::<DOT11_HOPPING_PATTERN_ENTRY>(), 4);
+    assert_eq!(size_of::<DOT11_HOPPING_PATTERN_ENTRY_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_HOPPING_PATTERN_ENTRY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WPA_TSC>(), 24);
+    assert_eq!(align_of::<DOT11_WPA_TSC>(), 8);
+    assert_eq!(size_of::<DOT11_RSSI_RANGE>(), 12);
+    assert_eq!(align_of::<DOT11_RSSI_RANGE>(), 4);
+    assert_eq!(size_of::<DOT11_NIC_SPECIFIC_EXTENSION>(), 12);
+    assert_eq!(align_of::<DOT11_NIC_SPECIFIC_EXTENSION>(), 4);
+    assert_eq!(size_of::<DOT11_AP_JOIN_REQUEST>(), 192);
+    assert_eq!(align_of::<DOT11_AP_JOIN_REQUEST>(), 8);
+    assert_eq!(size_of::<DOT11_RECV_SENSITIVITY>(), 12);
+    assert_eq!(align_of::<DOT11_RECV_SENSITIVITY>(), 4);
+    assert_eq!(size_of::<DOT11_RECV_SENSITIVITY_LIST>(), 24);
+    assert_eq!(align_of::<DOT11_RECV_SENSITIVITY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WME_AC_PARAMETERS>(), 6);
+    assert_eq!(align_of::<DOT11_WME_AC_PARAMETERS>(), 2);
+    assert_eq!(size_of::<DOT11_WME_AC_PARAMETERS_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_WME_AC_PARAMETERS_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WME_UPDATE_IE>(), 24);
+    assert_eq!(align_of::<DOT11_WME_UPDATE_IE>(), 4);
+    assert_eq!(size_of::<DOT11_QOS_TX_DURATION>(), 12);
+    assert_eq!(align_of::<DOT11_QOS_TX_DURATION>(), 4);
+    assert_eq!(size_of::<DOT11_QOS_TX_MEDIUM_TIME>(), 12);
+    assert_eq!(align_of::<DOT11_QOS_TX_MEDIUM_TIME>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_OFDM_FREQUENCY>(), 4);
+    assert_eq!(align_of::<DOT11_SUPPORTED_OFDM_FREQUENCY>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_OFDM_FREQUENCY_LIST>(), 12);
+    assert_eq!(align_of::<DOT11_SUPPORTED_OFDM_FREQUENCY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_DSSS_CHANNEL>(), 4);
+    assert_eq!(align_of::<DOT11_SUPPORTED_DSSS_CHANNEL>(), 4);
+    assert_eq!(size_of::<DOT11_SUPPORTED_DSSS_CHANNEL_LIST>(), 12);
+    assert_eq!(align_of::<DOT11_SUPPORTED_DSSS_CHANNEL_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_BYTE_ARRAY>(), 16);
+    assert_eq!(align_of::<DOT11_BYTE_ARRAY>(), 4);
+    assert_eq!(size_of::<DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO>(), 12);
+    assert_eq!(align_of::<DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_BSS_ENTRY>(), 72);
+    assert_eq!(align_of::<DOT11_BSS_ENTRY>(), 8);
+    assert_eq!(size_of::<DOT11_SSID_LIST>(), 48);
+    assert_eq!(align_of::<DOT11_SSID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_MAC_ADDRESS_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_MAC_ADDRESS_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_PMKID_ENTRY>(), 28);
+    assert_eq!(align_of::<DOT11_PMKID_ENTRY>(), 4);
+    assert_eq!(size_of::<DOT11_PMKID_LIST>(), 40);
+    assert_eq!(align_of::<DOT11_PMKID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_FRAME_STATISTICS>(), 144);
+    assert_eq!(align_of::<DOT11_PHY_FRAME_STATISTICS>(), 8);
+    assert_eq!(size_of::<DOT11_MAC_FRAME_STATISTICS>(), 112);
+    assert_eq!(align_of::<DOT11_MAC_FRAME_STATISTICS>(), 8);
+    assert_eq!(size_of::<DOT11_STATISTICS>(), 400);
+    assert_eq!(align_of::<DOT11_STATISTICS>(), 8);
+    assert_eq!(size_of::<DOT11_PRIVACY_EXEMPTION>(), 6);
+    assert_eq!(align_of::<DOT11_PRIVACY_EXEMPTION>(), 2);
+    assert_eq!(size_of::<DOT11_PRIVACY_EXEMPTION_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_PRIVACY_EXEMPTION_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_AUTH_ALGORITHM_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_AUTH_ALGORITHM_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_AUTH_CIPHER_PAIR_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_AUTH_CIPHER_PAIR_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_CIPHER_ALGORITHM_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_CIPHER_ALGORITHM_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_CIPHER_DEFAULT_KEY_VALUE>(), 24);
+    assert_eq!(align_of::<DOT11_CIPHER_DEFAULT_KEY_VALUE>(), 4);
+    assert_eq!(size_of::<DOT11_KEY_ALGO_TKIP_MIC>(), 20);
+    assert_eq!(align_of::<DOT11_KEY_ALGO_TKIP_MIC>(), 4);
+    assert_eq!(size_of::<DOT11_KEY_ALGO_CCMP>(), 16);
+    assert_eq!(align_of::<DOT11_KEY_ALGO_CCMP>(), 4);
+    assert_eq!(size_of::<DOT11_KEY_ALGO_GCMP>(), 16);
+    assert_eq!(align_of::<DOT11_KEY_ALGO_GCMP>(), 4);
+    assert_eq!(size_of::<DOT11_KEY_ALGO_BIP>(), 16);
+    assert_eq!(align_of::<DOT11_KEY_ALGO_BIP>(), 4);
+    assert_eq!(size_of::<DOT11_CIPHER_KEY_MAPPING_KEY_VALUE>(), 24);
+    assert_eq!(align_of::<DOT11_CIPHER_KEY_MAPPING_KEY_VALUE>(), 4);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_INFO_EX>(), 328);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_INFO_EX>(), 8);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_INFO_LIST>(), 344);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_INFO_LIST>(), 8);
+    assert_eq!(size_of::<DOT11_PHY_ID_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_PHY_ID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_EXTSTA_CAPABILITY>(), 44);
+    assert_eq!(align_of::<DOT11_EXTSTA_CAPABILITY>(), 4);
+    assert_eq!(size_of::<DOT11_DATA_RATE_MAPPING_ENTRY>(), 4);
+    assert_eq!(align_of::<DOT11_DATA_RATE_MAPPING_ENTRY>(), 2);
+    assert_eq!(size_of::<DOT11_DATA_RATE_MAPPING_TABLE>(), 512);
+    assert_eq!(align_of::<DOT11_DATA_RATE_MAPPING_TABLE>(), 4);
+    assert_eq!(size_of::<DOT11_COUNTRY_OR_REGION_STRING_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_COUNTRY_OR_REGION_STRING_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_PORT_STATE_NOTIFICATION>(), 12);
+    assert_eq!(align_of::<DOT11_PORT_STATE_NOTIFICATION>(), 2);
+    assert_eq!(size_of::<DOT11_IBSS_PARAMS>(), 16);
+    assert_eq!(align_of::<DOT11_IBSS_PARAMS>(), 4);
+    assert_eq!(size_of::<DOT11_QOS_PARAMS>(), 6);
+    assert_eq!(align_of::<DOT11_QOS_PARAMS>(), 2);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_PARAMS>(), 20);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_PARAMS>(), 4);
+    assert_eq!(size_of::<DOT11_FRAGMENT_DESCRIPTOR>(), 8);
+    assert_eq!(align_of::<DOT11_FRAGMENT_DESCRIPTOR>(), 4);
+    assert_eq!(size_of::<DOT11_PER_MSDU_COUNTERS>(), 20);
+    assert_eq!(align_of::<DOT11_PER_MSDU_COUNTERS>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_ATTRIBUTES>(), 1092);
+    assert_eq!(align_of::<DOT11_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_HRDSSS_PHY_ATTRIBUTES>(), 8);
+    assert_eq!(align_of::<DOT11_HRDSSS_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_OFDM_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(align_of::<DOT11_OFDM_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_ERP_PHY_ATTRIBUTES>(), 12);
+    assert_eq!(align_of::<DOT11_ERP_PHY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_EXTSTA_ATTRIBUTES>(), 160);
+    assert_eq!(align_of::<DOT11_EXTSTA_ATTRIBUTES>(), 8);
+    assert_eq!(size_of::<DOT11_RECV_EXTENSION_INFO>(), 112);
+    assert_eq!(align_of::<DOT11_RECV_EXTENSION_INFO>(), 8);
+    assert_eq!(size_of::<DOT11_RECV_EXTENSION_INFO_V2>(), 104);
+    assert_eq!(align_of::<DOT11_RECV_EXTENSION_INFO_V2>(), 8);
+    assert_eq!(size_of::<DOT11_STATUS_INDICATION>(), 8);
+    assert_eq!(align_of::<DOT11_STATUS_INDICATION>(), 4);
+    assert_eq!(size_of::<DOT11_MPDU_MAX_LENGTH_INDICATION>(), 12);
+    assert_eq!(align_of::<DOT11_MPDU_MAX_LENGTH_INDICATION>(), 4);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_START_PARAMETERS>(), 56);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_START_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_ENCAP_ENTRY>(), 4);
+    assert_eq!(align_of::<DOT11_ENCAP_ENTRY>(), 2);
+    assert_eq!(size_of::<DOT11_ASSOCIATION_COMPLETION_PARAMETERS>(), 96);
+    assert_eq!(align_of::<DOT11_ASSOCIATION_COMPLETION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_CONNECTION_START_PARAMETERS>(), 52);
+    assert_eq!(align_of::<DOT11_CONNECTION_START_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_CONNECTION_COMPLETION_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_CONNECTION_COMPLETION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_ROAMING_START_PARAMETERS>(), 52);
+    assert_eq!(align_of::<DOT11_ROAMING_START_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_ROAMING_COMPLETION_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_ROAMING_COMPLETION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_DISASSOCIATION_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_DISASSOCIATION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_TKIPMIC_FAILURE_PARAMETERS>(), 20);
+    assert_eq!(align_of::<DOT11_TKIPMIC_FAILURE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_PMKID_CANDIDATE_LIST_PARAMETERS>(), 12);
+    assert_eq!(align_of::<DOT11_PMKID_CANDIDATE_LIST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_BSSID_CANDIDATE>(), 12);
+    assert_eq!(align_of::<DOT11_BSSID_CANDIDATE>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_STATE_PARAMETERS>(), 12);
+    assert_eq!(align_of::<DOT11_PHY_STATE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_LINK_QUALITY_ENTRY>(), 7);
+    assert_eq!(align_of::<DOT11_LINK_QUALITY_ENTRY>(), 1);
+    assert_eq!(size_of::<DOT11_LINK_QUALITY_PARAMETERS>(), 12);
+    assert_eq!(align_of::<DOT11_LINK_QUALITY_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_EXTSTA_SEND_CONTEXT>(), 32);
+    assert_eq!(align_of::<DOT11_EXTSTA_SEND_CONTEXT>(), 8);
+    assert_eq!(size_of::<DOT11_EXTSTA_RECV_CONTEXT>(), 48);
+    assert_eq!(align_of::<DOT11_EXTSTA_RECV_CONTEXT>(), 8);
+    assert_eq!(size_of::<DOT11_EXTAP_ATTRIBUTES>(), 80);
+    assert_eq!(align_of::<DOT11_EXTAP_ATTRIBUTES>(), 8);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_STARTED_PARAMETERS>(), 10);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_STARTED_PARAMETERS>(), 2);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS>(), 20);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS>(), 64);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_STOP_AP_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_STOP_AP_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS>(), 12);
+    assert_eq!(align_of::<DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_CAN_SUSTAIN_AP_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_CAN_SUSTAIN_AP_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_AVAILABLE_CHANNEL_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_AVAILABLE_CHANNEL_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_AVAILABLE_FREQUENCY_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_AVAILABLE_FREQUENCY_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_DISASSOCIATE_PEER_REQUEST>(), 12);
+    assert_eq!(align_of::<DOT11_DISASSOCIATE_PEER_REQUEST>(), 2);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_DECISION>(), 24);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_DECISION>(), 4);
+    assert_eq!(size_of::<DOT11_INCOMING_ASSOC_DECISION_V2>(), 28);
+    assert_eq!(align_of::<DOT11_INCOMING_ASSOC_DECISION_V2>(), 4);
+    assert_eq!(size_of::<DOT11_ADDITIONAL_IE>(), 20);
+    assert_eq!(align_of::<DOT11_ADDITIONAL_IE>(), 4);
+    assert_eq!(size_of::<DOT11_PEER_STATISTICS>(), 48);
+    assert_eq!(align_of::<DOT11_PEER_STATISTICS>(), 8);
+    assert_eq!(size_of::<DOT11_PEER_INFO>(), 352);
+    assert_eq!(align_of::<DOT11_PEER_INFO>(), 8);
+    assert_eq!(size_of::<DOT11_PEER_INFO_LIST>(), 368);
+    assert_eq!(align_of::<DOT11_PEER_INFO_LIST>(), 8);
+    assert_eq!(size_of::<DOT11_VWIFI_COMBINATION>(), 16);
+    assert_eq!(align_of::<DOT11_VWIFI_COMBINATION>(), 4);
+    assert_eq!(size_of::<DOT11_VWIFI_COMBINATION_V2>(), 20);
+    assert_eq!(align_of::<DOT11_VWIFI_COMBINATION_V2>(), 4);
+    assert_eq!(size_of::<DOT11_VWIFI_COMBINATION_V3>(), 24);
+    assert_eq!(align_of::<DOT11_VWIFI_COMBINATION_V3>(), 4);
+    assert_eq!(size_of::<DOT11_VWIFI_ATTRIBUTES>(), 24);
+    assert_eq!(align_of::<DOT11_VWIFI_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<DOT11_MAC_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_MAC_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_MAC_INFO>(), 16);
+    assert_eq!(align_of::<DOT11_MAC_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_ATTRIBUTES>(), 72);
+    assert_eq!(align_of::<DOT11_WFD_ATTRIBUTES>(), 8);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_TYPE>(), 8);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_TYPE>(), 2);
+    assert_eq!(size_of::<DOT11_WPS_DEVICE_NAME>(), 36);
+    assert_eq!(align_of::<DOT11_WPS_DEVICE_NAME>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_CONFIGURATION_TIMEOUT>(), 2);
+    assert_eq!(align_of::<DOT11_WFD_CONFIGURATION_TIMEOUT>(), 1);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_ID>(), 44);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_ID>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_GO_INTENT>(), 1);
+    assert_eq!(align_of::<DOT11_WFD_GO_INTENT>(), 1);
+    assert_eq!(size_of::<DOT11_WFD_CHANNEL>(), 5);
+    assert_eq!(align_of::<DOT11_WFD_CHANNEL>(), 1);
+    assert_eq!(size_of::<WFDSVC_CONNECTION_CAPABILITY>(), 3);
+    assert_eq!(align_of::<WFDSVC_CONNECTION_CAPABILITY>(), 1);
+    assert_eq!(size_of::<DOT11_WFD_SERVICE_HASH_LIST>(), 8);
+    assert_eq!(align_of::<DOT11_WFD_SERVICE_HASH_LIST>(), 2);
+    assert_eq!(size_of::<DOT11_WFD_ADVERTISEMENT_ID>(), 12);
+    assert_eq!(align_of::<DOT11_WFD_ADVERTISEMENT_ID>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_SESSION_ID>(), 12);
+    assert_eq!(align_of::<DOT11_WFD_SESSION_ID>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_ADVERTISED_SERVICE_DESCRIPTOR>(), 264);
+    assert_eq!(align_of::<DOT11_WFD_ADVERTISED_SERVICE_DESCRIPTOR>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_ADVERTISED_SERVICE_LIST>(), 268);
+    assert_eq!(align_of::<DOT11_WFD_ADVERTISED_SERVICE_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS>(), 32);
+    assert_eq!(align_of::<DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS>(), 8);
+    assert_eq!(size_of::<DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS>(), 32);
+    assert_eq!(align_of::<DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS>(), 8);
+    assert_eq!(size_of::<DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS>(), 20);
+    assert_eq!(align_of::<DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS>(), 32);
+    assert_eq!(align_of::<DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS>(), 40);
+    assert_eq!(align_of::<DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS>(), 8);
+    assert_eq!(size_of::<DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS>(), 28);
+    assert_eq!(align_of::<DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS>(), 32);
+    assert_eq!(align_of::<DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS>(), 40);
+    assert_eq!(align_of::<DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS>(), 8);
+    assert_eq!(size_of::<DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS>(), 28);
+    assert_eq!(align_of::<DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_ANQP_QUERY_COMPLETE_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_ANQP_QUERY_COMPLETE_PARAMETERS>(), 8);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_CAPABILITY_CONFIG>(), 16);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_CAPABILITY_CONFIG>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG>(), 16);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_V2>(), 20);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_V2>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_INFO>(), 56);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST>(), 20);
+    assert_eq!(align_of::<DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DISCOVER_DEVICE_FILTER>(), 44);
+    assert_eq!(align_of::<DOT11_WFD_DISCOVER_DEVICE_FILTER>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DISCOVER_REQUEST>(), 36);
+    assert_eq!(align_of::<DOT11_WFD_DISCOVER_REQUEST>(), 4);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_ENTRY>(), 96);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_ENTRY>(), 8);
+    assert_eq!(size_of::<DOT11_WFD_ADDITIONAL_IE>(), 28);
+    assert_eq!(align_of::<DOT11_WFD_ADDITIONAL_IE>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS>(), 36);
+    assert_eq!(align_of::<DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS>(), 96);
+    assert_eq!(align_of::<DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS>(), 8);
+    assert_eq!(size_of::<DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS>(), 88);
+    assert_eq!(align_of::<DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS>(), 8);
+    assert_eq!(size_of::<DOT11_WFD_INVITATION_FLAGS>(), 1);
+    assert_eq!(align_of::<DOT11_WFD_INVITATION_FLAGS>(), 1);
+    assert_eq!(size_of::<DOT11_SEND_INVITATION_REQUEST_PARAMETERS>(), 88);
+    assert_eq!(align_of::<DOT11_SEND_INVITATION_REQUEST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_INVITATION_RESPONSE_PARAMETERS>(), 56);
+    assert_eq!(align_of::<DOT11_SEND_INVITATION_RESPONSE_PARAMETERS>(), 8);
+    assert_eq!(size_of::<DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS>(), 76);
+    assert_eq!(align_of::<DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS>(), 40);
+    assert_eq!(align_of::<DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS>(), 8);
+    assert_eq!(size_of::<DOT11_WFD_DEVICE_LISTEN_CHANNEL>(), 6);
+    assert_eq!(align_of::<DOT11_WFD_DEVICE_LISTEN_CHANNEL>(), 2);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_START_PARAMETERS>(), 10);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_START_PARAMETERS>(), 2);
+    assert_eq!(size_of::<DOT11_WFD_GROUP_JOIN_PARAMETERS>(), 20);
+    assert_eq!(align_of::<DOT11_WFD_GROUP_JOIN_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO>(), 6);
+    assert_eq!(align_of::<DOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO>(), 2);
+    assert_eq!(size_of::<DOT11_POWER_MGMT_MODE_STATUS_INFO>(), 16);
+    assert_eq!(align_of::<DOT11_POWER_MGMT_MODE_STATUS_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_CHANNEL_HINT>(), 8);
+    assert_eq!(align_of::<DOT11_CHANNEL_HINT>(), 4);
+    assert_eq!(size_of::<DOT11_OFFLOAD_NETWORK>(), 76);
+    assert_eq!(align_of::<DOT11_OFFLOAD_NETWORK>(), 4);
+    assert_eq!(size_of::<DOT11_OFFLOAD_NETWORK_LIST_INFO>(), 100);
+    assert_eq!(align_of::<DOT11_OFFLOAD_NETWORK_LIST_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_OFFLOAD_NETWORK_STATUS_PARAMETERS>(), 8);
+    assert_eq!(align_of::<DOT11_OFFLOAD_NETWORK_STATUS_PARAMETERS>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_TEST>(), 12);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_TEST>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_SELF_TEST_SET_PARAMS>(), 32);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_SELF_TEST_SET_PARAMS>(), 8);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_SELF_TEST_QUERY_RESULTS>(), 32);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_SELF_TEST_QUERY_RESULTS>(), 8);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_RX>(), 16);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_RX>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_TX>(), 20);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_TX>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_QUERY_ADC>(), 12);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_FUNCTIONAL_TEST_QUERY_ADC>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_TEST_SET_DATA>(), 16);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_TEST_SET_DATA>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_TEST_QUERY_DATA>(), 20);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_TEST_QUERY_DATA>(), 4);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_TEST_SLEEP>(), 16);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_TEST_SLEEP>(), 8);
+    assert_eq!(size_of::<DOT11_MANUFACTURING_CALLBACK_PARAMETERS>(), 24);
+    assert_eq!(align_of::<DOT11_MANUFACTURING_CALLBACK_PARAMETERS>(), 8);
+}
 #[cfg(feature = "winusbio")] #[test]
 fn shared_winusbio() {
     use winapi::shared::winusbio::*;
@@ -1638,6 +2048,20 @@ fn shared_winusbio() {
     assert_eq!(size_of::<WINUSB_PIPE_INFORMATION_EX>(), 16);
     assert_eq!(align_of::<WINUSB_PIPE_INFORMATION_EX>(), 4);
 }
+#[cfg(feature = "wlantypes")] #[test]
+fn shared_wlantypes() {
+    use winapi::shared::wlantypes::*;
+    assert_eq!(size_of::<DOT11_SSID>(), 36);
+    assert_eq!(align_of::<DOT11_SSID>(), 4);
+    assert_eq!(size_of::<DOT11_AUTH_CIPHER_PAIR>(), 8);
+    assert_eq!(align_of::<DOT11_AUTH_CIPHER_PAIR>(), 4);
+    assert_eq!(size_of::<DOT11_OI>(), 8);
+    assert_eq!(align_of::<DOT11_OI>(), 2);
+    assert_eq!(size_of::<DOT11_ACCESSNETWORKOPTIONS>(), 5);
+    assert_eq!(align_of::<DOT11_ACCESSNETWORKOPTIONS>(), 1);
+    assert_eq!(size_of::<DOT11_VENUEINFO>(), 2);
+    assert_eq!(align_of::<DOT11_VENUEINFO>(), 1);
+}
 #[cfg(feature = "wmistr")] #[test]
 fn shared_wmistr() {
     use winapi::shared::wmistr::*;
@@ -3408,6 +3832,22 @@ fn um_docobj() {
     assert_eq!(size_of::<OLECMDTEXT>(), 16);
     assert_eq!(align_of::<OLECMDTEXT>(), 4);
 }
+#[cfg(feature = "dot1x")] #[test]
+fn um_dot1x() {
+    use winapi::um::dot1x::*;
+    assert_eq!(size_of::<ONEX_VARIABLE_BLOB>(), 8);
+    assert_eq!(align_of::<ONEX_VARIABLE_BLOB>(), 4);
+    assert_eq!(size_of::<ONEX_AUTH_PARAMS>(), 72);
+    assert_eq!(align_of::<ONEX_AUTH_PARAMS>(), 8);
+    assert_eq!(size_of::<ONEX_EAP_ERROR>(), 92);
+    assert_eq!(align_of::<ONEX_EAP_ERROR>(), 4);
+    assert_eq!(size_of::<ONEX_STATUS>(), 12);
+    assert_eq!(align_of::<ONEX_STATUS>(), 4);
+    assert_eq!(size_of::<ONEX_RESULT_UPDATE_DATA>(), 40);
+    assert_eq!(align_of::<ONEX_RESULT_UPDATE_DATA>(), 4);
+    assert_eq!(size_of::<ONEX_USER_INFO>(), 24);
+    assert_eq!(align_of::<ONEX_USER_INFO>(), 4);
+}
 #[cfg(feature = "dpapi")] #[test]
 fn um_dpapi() {
     use winapi::um::dpapi::*;
@@ -3686,6 +4126,64 @@ fn um_dxvahd() {
     assert_eq!(size_of::<DXVAHDETW_DESTROYVIDEOPROCESSOR>(), 8);
     assert_eq!(align_of::<DXVAHDETW_DESTROYVIDEOPROCESSOR>(), 8);
 }
+#[cfg(feature = "eaptypes")] #[test]
+fn um_eaptypes() {
+    use winapi::um::eaptypes::*;
+    assert_eq!(size_of::<EAP_TYPE>(), 12);
+    assert_eq!(align_of::<EAP_TYPE>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_TYPE>(), 16);
+    assert_eq!(align_of::<EAP_METHOD_TYPE>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_INFO>(), 48);
+    assert_eq!(align_of::<EAP_METHOD_INFO>(), 8);
+    assert_eq!(size_of::<EAP_METHOD_INFO_ARRAY_EX>(), 16);
+    assert_eq!(align_of::<EAP_METHOD_INFO_ARRAY_EX>(), 8);
+    assert_eq!(size_of::<EAP_METHOD_INFO_EX>(), 48);
+    assert_eq!(align_of::<EAP_METHOD_INFO_EX>(), 8);
+    assert_eq!(size_of::<EAP_METHOD_INFO_ARRAY>(), 16);
+    assert_eq!(align_of::<EAP_METHOD_INFO_ARRAY>(), 8);
+    assert_eq!(size_of::<EAP_ERROR>(), 88);
+    assert_eq!(align_of::<EAP_ERROR>(), 8);
+    assert_eq!(size_of::<EAP_ATTRIBUTE>(), 16);
+    assert_eq!(align_of::<EAP_ATTRIBUTE>(), 8);
+    assert_eq!(size_of::<EAP_ATTRIBUTES>(), 16);
+    assert_eq!(align_of::<EAP_ATTRIBUTES>(), 8);
+    assert_eq!(size_of::<EAP_CONFIG_INPUT_FIELD_DATA>(), 40);
+    assert_eq!(align_of::<EAP_CONFIG_INPUT_FIELD_DATA>(), 8);
+    assert_eq!(size_of::<EAP_CONFIG_INPUT_FIELD_ARRAY>(), 16);
+    assert_eq!(align_of::<EAP_CONFIG_INPUT_FIELD_ARRAY>(), 8);
+    assert_eq!(size_of::<EAP_CRED_EXPIRY_REQ>(), 32);
+    assert_eq!(align_of::<EAP_CRED_EXPIRY_REQ>(), 8);
+    assert_eq!(size_of::<EAP_UI_DATA_FORMAT>(), 8);
+    assert_eq!(align_of::<EAP_UI_DATA_FORMAT>(), 8);
+    assert_eq!(size_of::<EAP_INTERACTIVE_UI_DATA>(), 24);
+    assert_eq!(align_of::<EAP_INTERACTIVE_UI_DATA>(), 8);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_VALUE_BOOL>(), 8);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_VALUE_BOOL>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_VALUE_DWORD>(), 8);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_VALUE_DWORD>(), 4);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_VALUE_STRING>(), 16);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_VALUE_STRING>(), 8);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_VALUE>(), 16);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_VALUE>(), 8);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY>(), 24);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY>(), 8);
+    assert_eq!(size_of::<EAP_METHOD_PROPERTY_ARRAY>(), 16);
+    assert_eq!(align_of::<EAP_METHOD_PROPERTY_ARRAY>(), 8);
+    assert_eq!(size_of::<EAPHOST_IDENTITY_UI_PARAMS>(), 88);
+    assert_eq!(align_of::<EAPHOST_IDENTITY_UI_PARAMS>(), 8);
+    assert_eq!(size_of::<EAPHOST_INTERACTIVE_UI_PARAMS>(), 48);
+    assert_eq!(align_of::<EAPHOST_INTERACTIVE_UI_PARAMS>(), 8);
+    assert_eq!(size_of::<EapUsernamePasswordCredential>(), 16);
+    assert_eq!(align_of::<EapUsernamePasswordCredential>(), 8);
+    assert_eq!(size_of::<EapCertificateCredential>(), 32);
+    assert_eq!(align_of::<EapCertificateCredential>(), 8);
+    assert_eq!(size_of::<EapSimCredential>(), 8);
+    assert_eq!(align_of::<EapSimCredential>(), 8);
+    assert_eq!(size_of::<EapCredentialTypeData>(), 32);
+    assert_eq!(align_of::<EapCredentialTypeData>(), 8);
+    assert_eq!(size_of::<EapCredential>(), 40);
+    assert_eq!(align_of::<EapCredential>(), 8);
+}
 #[cfg(feature = "endpointvolume")] #[test]
 fn um_endpointvolume() {
     use winapi::um::endpointvolume::*;
@@ -3996,6 +4494,12 @@ fn um_imm() {
     assert_eq!(size_of::<COMPOSITIONFORM>(), 28);
     assert_eq!(align_of::<COMPOSITIONFORM>(), 4);
 }
+#[cfg(feature = "l2cmn")] #[test]
+fn um_l2cmn() {
+    use winapi::um::l2cmn::*;
+    assert_eq!(size_of::<L2_NOTIFICATION_DATA>(), 40);
+    assert_eq!(align_of::<L2_NOTIFICATION_DATA>(), 8);
+}
 #[cfg(feature = "lmaccess")] #[test]
 fn um_lmaccess() {
     use winapi::um::lmaccess::*;
@@ -9209,6 +9713,144 @@ fn um_ws2bth() {
     assert_eq!(size_of::<BTH_INFO_RSP>(), 47);
     assert_eq!(align_of::<BTH_INFO_RSP>(), 1);
 }
+#[cfg(feature = "wlanapi")] #[test]
+fn um_wlanapi() {
+    use winapi::um::wlanapi::*;
+    assert_eq!(size_of::<WLAN_PROFILE_INFO>(), 516);
+    assert_eq!(align_of::<WLAN_PROFILE_INFO>(), 4);
+    assert_eq!(size_of::<DOT11_NETWORK>(), 40);
+    assert_eq!(align_of::<DOT11_NETWORK>(), 4);
+    assert_eq!(size_of::<WLAN_RAW_DATA>(), 8);
+    assert_eq!(align_of::<WLAN_RAW_DATA>(), 4);
+    assert_eq!(size_of::<WLAN_RAW_DATA_LIST_DataList>(), 8);
+    assert_eq!(align_of::<WLAN_RAW_DATA_LIST_DataList>(), 4);
+    assert_eq!(size_of::<WLAN_RAW_DATA_LIST>(), 16);
+    assert_eq!(align_of::<WLAN_RAW_DATA_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_RATE_SET>(), 256);
+    assert_eq!(align_of::<WLAN_RATE_SET>(), 4);
+    assert_eq!(size_of::<WLAN_AVAILABLE_NETWORK>(), 628);
+    assert_eq!(align_of::<WLAN_AVAILABLE_NETWORK>(), 4);
+    assert_eq!(size_of::<WLAN_AVAILABLE_NETWORK_V2>(), 644);
+    assert_eq!(align_of::<WLAN_AVAILABLE_NETWORK_V2>(), 4);
+    assert_eq!(size_of::<WLAN_BSS_ENTRY>(), 360);
+    assert_eq!(align_of::<WLAN_BSS_ENTRY>(), 8);
+    assert_eq!(size_of::<WLAN_BSS_LIST>(), 368);
+    assert_eq!(align_of::<WLAN_BSS_LIST>(), 8);
+    assert_eq!(size_of::<WLAN_INTERFACE_INFO>(), 532);
+    assert_eq!(align_of::<WLAN_INTERFACE_INFO>(), 4);
+    assert_eq!(size_of::<WLAN_ASSOCIATION_ATTRIBUTES>(), 68);
+    assert_eq!(align_of::<WLAN_ASSOCIATION_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<WLAN_SECURITY_ATTRIBUTES>(), 16);
+    assert_eq!(align_of::<WLAN_SECURITY_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<WLAN_CONNECTION_ATTRIBUTES>(), 604);
+    assert_eq!(align_of::<WLAN_CONNECTION_ATTRIBUTES>(), 4);
+    assert_eq!(size_of::<WLAN_PHY_RADIO_STATE>(), 12);
+    assert_eq!(align_of::<WLAN_PHY_RADIO_STATE>(), 4);
+    assert_eq!(size_of::<WLAN_RADIO_STATE>(), 772);
+    assert_eq!(align_of::<WLAN_RADIO_STATE>(), 4);
+    assert_eq!(size_of::<WLAN_INTERFACE_CAPABILITY>(), 276);
+    assert_eq!(align_of::<WLAN_INTERFACE_CAPABILITY>(), 4);
+    assert_eq!(size_of::<WLAN_AUTH_CIPHER_PAIR_LIST>(), 12);
+    assert_eq!(align_of::<WLAN_AUTH_CIPHER_PAIR_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_COUNTRY_OR_REGION_STRING_LIST>(), 8);
+    assert_eq!(align_of::<WLAN_COUNTRY_OR_REGION_STRING_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_PROFILE_INFO_LIST>(), 524);
+    assert_eq!(align_of::<WLAN_PROFILE_INFO_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_AVAILABLE_NETWORK_LIST>(), 636);
+    assert_eq!(align_of::<WLAN_AVAILABLE_NETWORK_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_AVAILABLE_NETWORK_LIST_V2>(), 652);
+    assert_eq!(align_of::<WLAN_AVAILABLE_NETWORK_LIST_V2>(), 4);
+    assert_eq!(size_of::<WLAN_INTERFACE_INFO_LIST>(), 540);
+    assert_eq!(align_of::<WLAN_INTERFACE_INFO_LIST>(), 4);
+    assert_eq!(size_of::<DOT11_NETWORK_LIST>(), 48);
+    assert_eq!(align_of::<DOT11_NETWORK_LIST>(), 4);
+    assert_eq!(size_of::<WLAN_CONNECTION_PARAMETERS>(), 40);
+    assert_eq!(align_of::<WLAN_CONNECTION_PARAMETERS>(), 8);
+    assert_eq!(size_of::<WLAN_CONNECTION_PARAMETERS_V2>(), 56);
+    assert_eq!(align_of::<WLAN_CONNECTION_PARAMETERS_V2>(), 8);
+    assert_eq!(size_of::<WLAN_MSM_NOTIFICATION_DATA>(), 580);
+    assert_eq!(align_of::<WLAN_MSM_NOTIFICATION_DATA>(), 4);
+    assert_eq!(size_of::<WLAN_CONNECTION_NOTIFICATION_DATA>(), 572);
+    assert_eq!(align_of::<WLAN_CONNECTION_NOTIFICATION_DATA>(), 4);
+    assert_eq!(size_of::<WLAN_PHY_FRAME_STATISTICS>(), 144);
+    assert_eq!(align_of::<WLAN_PHY_FRAME_STATISTICS>(), 8);
+    assert_eq!(size_of::<WLAN_MAC_FRAME_STATISTICS>(), 96);
+    assert_eq!(align_of::<WLAN_MAC_FRAME_STATISTICS>(), 8);
+    assert_eq!(size_of::<WLAN_STATISTICS>(), 368);
+    assert_eq!(align_of::<WLAN_STATISTICS>(), 8);
+    assert_eq!(size_of::<WLAN_DEVICE_SERVICE_GUID_LIST>(), 24);
+    assert_eq!(align_of::<WLAN_DEVICE_SERVICE_GUID_LIST>(), 4);
+    assert_eq!(size_of::<WFD_GROUP_ID>(), 44);
+    assert_eq!(align_of::<WFD_GROUP_ID>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_PEER_STATE>(), 12);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_PEER_STATE>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_RADIO_STATE>(), 8);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_RADIO_STATE>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_STATE_CHANGE>(), 12);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_STATE_CHANGE>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE>(), 28);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS>(), 40);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_SECURITY_SETTINGS>(), 8);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_SECURITY_SETTINGS>(), 4);
+    assert_eq!(size_of::<WLAN_HOSTED_NETWORK_STATUS>(), 52);
+    assert_eq!(align_of::<WLAN_HOSTED_NETWORK_STATUS>(), 4);
+}
+#[cfg(feature = "wlanihv")] #[test]
+fn um_wlanihv() {
+    use winapi::um::wlanihv::*;
+    assert_eq!(size_of::<DOT11EXT_APIS>(), 176);
+    assert_eq!(align_of::<DOT11EXT_APIS>(), 8);
+    assert_eq!(size_of::<DOT11EXT_IHV_HANDLERS>(), 152);
+    assert_eq!(align_of::<DOT11EXT_IHV_HANDLERS>(), 8);
+    assert_eq!(size_of::<DOT11EXT_VIRTUAL_STATION_APIS>(), 32);
+    assert_eq!(align_of::<DOT11EXT_VIRTUAL_STATION_APIS>(), 8);
+    assert_eq!(size_of::<DOT11_IHV_VERSION_INFO>(), 8);
+    assert_eq!(align_of::<DOT11_IHV_VERSION_INFO>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_UI_REQUEST>(), 48);
+    assert_eq!(align_of::<DOT11EXT_IHV_UI_REQUEST>(), 8);
+    assert_eq!(size_of::<DOT11_EAP_RESULT>(), 16);
+    assert_eq!(align_of::<DOT11_EAP_RESULT>(), 8);
+    assert_eq!(size_of::<DOT11_MSONEX_RESULT_PARAMS>(), 48);
+    assert_eq!(align_of::<DOT11_MSONEX_RESULT_PARAMS>(), 8);
+    assert_eq!(size_of::<DOT11EXT_IHV_CONNECTIVITY_PROFILE>(), 8);
+    assert_eq!(align_of::<DOT11EXT_IHV_CONNECTIVITY_PROFILE>(), 8);
+    assert_eq!(size_of::<DOT11EXT_IHV_SECURITY_PROFILE>(), 16);
+    assert_eq!(align_of::<DOT11EXT_IHV_SECURITY_PROFILE>(), 8);
+    assert_eq!(size_of::<DOT11EXT_IHV_DISCOVERY_PROFILE>(), 24);
+    assert_eq!(align_of::<DOT11EXT_IHV_DISCOVERY_PROFILE>(), 8);
+    assert_eq!(size_of::<DOT11EXT_IHV_DISCOVERY_PROFILE_LIST>(), 16);
+    assert_eq!(align_of::<DOT11EXT_IHV_DISCOVERY_PROFILE_LIST>(), 8);
+    assert_eq!(size_of::<DOT11EXT_VIRTUAL_STATION_AP_PROPERTY>(), 116);
+    assert_eq!(align_of::<DOT11EXT_VIRTUAL_STATION_AP_PROPERTY>(), 4);
+    assert_eq!(size_of::<WDIAG_IHV_WLAN_ID>(), 560);
+    assert_eq!(align_of::<WDIAG_IHV_WLAN_ID>(), 4);
+}
+#[cfg(feature = "wlanihvtypes")] #[test]
+fn um_wlanihvtypes() {
+    use winapi::um::wlanihvtypes::*;
+    assert_eq!(size_of::<DOT11_MSSECURITY_SETTINGS>(), 40);
+    assert_eq!(align_of::<DOT11_MSSECURITY_SETTINGS>(), 8);
+    assert_eq!(size_of::<DOT11EXT_IHV_SSID_LIST>(), 40);
+    assert_eq!(align_of::<DOT11EXT_IHV_SSID_LIST>(), 4);
+    assert_eq!(size_of::<DOT11EXT_IHV_PROFILE_PARAMS>(), 24);
+    assert_eq!(align_of::<DOT11EXT_IHV_PROFILE_PARAMS>(), 8);
+    assert_eq!(size_of::<DOT11EXT_IHV_PARAMS>(), 560);
+    assert_eq!(align_of::<DOT11EXT_IHV_PARAMS>(), 8);
+}
+#[cfg(feature = "wlclient")] #[test]
+fn um_wlclient() {
+    use winapi::um::wlclient::*;
+    assert_eq!(size_of::<DOT11_ADAPTER>(), 32);
+    assert_eq!(align_of::<DOT11_ADAPTER>(), 8);
+    assert_eq!(size_of::<DOT11_BSS_LIST>(), 16);
+    assert_eq!(align_of::<DOT11_BSS_LIST>(), 8);
+    assert_eq!(size_of::<DOT11_PORT_STATE>(), 20);
+    assert_eq!(align_of::<DOT11_PORT_STATE>(), 4);
+    assert_eq!(size_of::<DOT11_SECURITY_PACKET_HEADER>(), 9);
+    assert_eq!(align_of::<DOT11_SECURITY_PACKET_HEADER>(), 1);
+}
 #[cfg(feature = "ws2spi")] #[test]
 fn um_ws2spi() {
     use winapi::um::ws2spi::*;