1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Definition of public APIs for WLAN Extensibility Framework.
7 use shared::basetsd::UINT32;
8 use shared::guiddef::{CLSID, GUID};
9 use shared::minwindef::{BOOL, BYTE, DWORD, LPVOID, PBOOL, PBYTE, PDWORD, UCHAR, ULONG, USHORT};
10 use shared::windot11::{
11     DOT11_ASSOC_STATUS, DOT11_DIRECTION, PDOT11_ASSOCIATION_COMPLETION_PARAMETERS,
12     PDOT11_CIPHER_DEFAULT_KEY_VALUE, PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE, PDOT11_MAC_ADDRESS,
13     PDOT11_PRIVACY_EXEMPTION,
14 };
15 use shared::wlantypes::{DOT11_AUTH_ALGORITHM, DOT11_BSS_TYPE, DOT11_CIPHER_ALGORITHM, DOT11_SSID};
16 use um::dot1x::{ONEX_AUTH_STATUS, ONEX_REASON_CODE};
17 use um::eaptypes::EAP_ATTRIBUTES;
18 use um::l2cmn::PL2_NOTIFICATION_DATA;
19 use um::winnt::{HANDLE, LPWSTR, PHANDLE, WCHAR};
20 use um::winuser::PWTSSESSION_NOTIFICATION;
21 use um::wlanihvtypes::{MS_MAX_PROFILE_NAME_LENGTH, PDOT11EXT_IHV_PROFILE_PARAMS};
22 use um::wlclient::{PDOT11_ADAPTER, PDOT11_BSS_LIST, PDOT11_PORT_STATE};
23 STRUCT!{struct DOT11EXT_APIS {
24     Dot11ExtAllocateBuffer: DOT11EXT_ALLOCATE_BUFFER,
25     Dot11ExtFreeBuffer: DOT11EXT_FREE_BUFFER,
26     Dot11ExtSetProfileCustomUserData: DOT11EXT_SET_PROFILE_CUSTOM_USER_DATA,
27     Dot11ExtGetProfileCustomUserData: DOT11EXT_GET_PROFILE_CUSTOM_USER_DATA,
28     Dot11ExtSetCurrentProfile: DOT11EXT_SET_CURRENT_PROFILE,
29     Dot11ExtSendUIRequest: DOT11EXT_SEND_UI_REQUEST,
30     Dot11ExtPreAssociateCompletion: DOT11EXT_PRE_ASSOCIATE_COMPLETION,
31     Dot11ExtPostAssociateCompletion: DOT11EXT_POST_ASSOCIATE_COMPLETION,
32     Dot11ExtSendNotification: DOT11EXT_SEND_NOTIFICATION,
33     Dot11ExtSendPacket: DOT11EXT_SEND_PACKET,
34     Dot11ExtSetEtherTypeHandling: DOT11EXT_SET_ETHERTYPE_HANDLING,
35     Dot11ExtSetAuthAlgorithm: DOT11EXT_SET_AUTH_ALGORITHM,
36     Dot11ExtSetUnicastCipherAlgorithm: DOT11EXT_SET_UNICAST_CIPHER_ALGORITHM,
37     Dot11ExtSetMulticastCipherAlgorithm: DOT11EXT_SET_MULTICAST_CIPHER_ALGORITHM,
38     Dot11ExtSetDefaultKey: DOT11EXT_SET_DEFAULT_KEY,
39     Dot11ExtSetKeyMappingKey: DOT11EXT_SET_KEY_MAPPING_KEY,
40     Dot11ExtSetDefaultKeyId: DOT11EXT_SET_DEFAULT_KEY_ID,
41     Dot11ExtNicSpecificExtension: DOT11EXT_NIC_SPECIFIC_EXTENSION,
42     Dot11ExtSetExcludeUnencrypted: DOT11EXT_SET_EXCLUDE_UNENCRYPTED,
43     Dot11ExtStartOneX: DOT11EXT_ONEX_START,
44     Dot11ExtStopOneX: DOT11EXT_ONEX_STOP,
45     Dot11ExtProcessSecurityPacket: DOT11EXT_PROCESS_ONEX_PACKET,
46 }}
47 pub type PDOT11EXT_APIS = *mut DOT11EXT_APIS;
48 STRUCT!{struct DOT11EXT_IHV_HANDLERS {
49     Dot11ExtIhvDeinitService: DOT11EXTIHV_DEINIT_SERVICE,
50     Dot11ExtIhvInitAdapter: DOT11EXTIHV_INIT_ADAPTER,
51     Dot11ExtIhvDeinitAdapter: DOT11EXTIHV_DEINIT_ADAPTER,
52     Dot11ExtIhvPerformPreAssociate: DOT11EXTIHV_PERFORM_PRE_ASSOCIATE,
53     Dot11ExtIhvAdapterReset: DOT11EXTIHV_ADAPTER_RESET,
54     Dot11ExtIhvPerformPostAssociate: DOT11EXTIHV_PERFORM_POST_ASSOCIATE,
55     Dot11ExtIhvStopPostAssociate: DOT11EXTIHV_STOP_POST_ASSOCIATE,
56     Dot11ExtIhvValidateProfile: DOT11EXTIHV_VALIDATE_PROFILE,
57     Dot11ExtIhvPerformCapabilityMatch: DOT11EXTIHV_PERFORM_CAPABILITY_MATCH,
58     Dot11ExtIhvCreateDiscoveryProfiles: DOT11EXTIHV_CREATE_DISCOVERY_PROFILES,
59     Dot11ExtIhvProcessSessionChange: DOT11EXTIHV_PROCESS_SESSION_CHANGE,
60     Dot11ExtIhvReceiveIndication: DOT11EXTIHV_RECEIVE_INDICATION,
61     Dot11ExtIhvReceivePacket: DOT11EXTIHV_RECEIVE_PACKET,
62     Dot11ExtIhvSendPacketCompletion: DOT11EXTIHV_SEND_PACKET_COMPLETION,
63     Dot11ExtIhvIsUIRequestPending: DOT11EXTIHV_IS_UI_REQUEST_PENDING,
64     Dot11ExtIhvProcessUIResponse: DOT11EXTIHV_PROCESS_UI_RESPONSE,
65     Dot11ExtIhvQueryUIRequest: DOT11EXTIHV_QUERY_UI_REQUEST,
66     Dot11ExtIhvOnexIndicateResult: DOT11EXTIHV_ONEX_INDICATE_RESULT,
67     Dot11ExtIhvControl: DOT11EXTIHV_CONTROL,
68 }}
69 pub type PDOT11EXT_IHV_HANDLERS = *mut DOT11EXT_IHV_HANDLERS;
70 STRUCT!{struct DOT11EXT_VIRTUAL_STATION_APIS {
71     Dot11ExtRequestVirtualStation: DOT11EXT_REQUEST_VIRTUAL_STATION,
72     Dot11ExtReleaseVirtualStation: DOT11EXT_RELEASE_VIRTUAL_STATION,
73     Dot11ExtQueryVirtualStationProperties: DOT11EXT_QUERY_VIRTUAL_STATION_PROPERTIES,
74     Dot11ExtSetVirtualStationAPProperties: DOT11EXT_SET_VIRTUAL_STATION_AP_PROPERTIES,
75 }}
76 pub type PDOT11EXT_VIRTUAL_STATION_APIS = *mut DOT11EXT_VIRTUAL_STATION_APIS;
77 STRUCT!{struct DOT11_IHV_VERSION_INFO {
78     dwVerMin: DWORD,
79     dwVerMax: DWORD,
80 }}
81 pub type PDOT11_IHV_VERSION_INFO = *mut DOT11_IHV_VERSION_INFO;
82 ENUM!{enum DOT11EXT_IHV_CONNECTION_PHASE {
83     connection_phase_any = 0,
84     connection_phase_initial_connection = 1,
85     connection_phase_post_l3_connection = 2,
86 }}
87 pub type PDOT11EXT_IHV_CONNECTION_PHASE = *mut DOT11EXT_IHV_CONNECTION_PHASE;
88 STRUCT!{struct DOT11EXT_IHV_UI_REQUEST {
89     dwSessionId: DWORD,
90     guidUIRequest: GUID,
91     UIPageClsid: CLSID,
92     dwByteCount: DWORD,
93     pvUIRequest: *mut BYTE,
94 }}
95 pub type PDOT11EXT_IHV_UI_REQUEST = *mut DOT11EXT_IHV_UI_REQUEST;
96 ENUM!{enum DOT11_MSONEX_RESULT {
97     DOT11_MSONEX_SUCCESS = 0,
98     DOT11_MSONEX_FAILURE = 1,
99     DOT11_MSONEX_IN_PROGRESS = 2,
100 }}
101 pub type PDOT11_MSONEX_RESULT = *mut DOT11_MSONEX_RESULT;
102 STRUCT!{struct DOT11_EAP_RESULT {
103     dwFailureReasonCode: UINT32,
104     pAttribArray: *mut EAP_ATTRIBUTES,
105 }}
106 pub type PDOT11_EAP_RESULT = *mut DOT11_EAP_RESULT;
107 STRUCT!{struct DOT11_MSONEX_RESULT_PARAMS {
108     Dot11OnexAuthStatus: ONEX_AUTH_STATUS,
109     Dot11OneXReasonCode: ONEX_REASON_CODE,
110     pbMPPESendKey: PBYTE,
111     dwMPPESendKeyLen: DWORD,
112     pbMPPERecvKey: PBYTE,
113     dwMPPERecvKeyLen: DWORD,
114     pDot11EapResult: PDOT11_EAP_RESULT,
115 }}
116 pub type PDOT11_MSONEX_RESULT_PARAMS = *mut DOT11_MSONEX_RESULT_PARAMS;
117 STRUCT!{struct DOT11EXT_IHV_CONNECTIVITY_PROFILE {
118     pszXmlFragmentIhvConnectivity: LPWSTR,
119 }}
120 pub type PDOT11EXT_IHV_CONNECTIVITY_PROFILE = *mut DOT11EXT_IHV_CONNECTIVITY_PROFILE;
121 STRUCT!{struct DOT11EXT_IHV_SECURITY_PROFILE {
122     pszXmlFragmentIhvSecurity: LPWSTR,
123     bUseMSOnex: BOOL,
124 }}
125 pub type PDOT11EXT_IHV_SECURITY_PROFILE = *mut DOT11EXT_IHV_SECURITY_PROFILE;
126 STRUCT!{struct DOT11EXT_IHV_DISCOVERY_PROFILE {
127     IhvConnectivityProfile: DOT11EXT_IHV_CONNECTIVITY_PROFILE,
128     IhvSecurityProfile: DOT11EXT_IHV_SECURITY_PROFILE,
129 }}
130 pub type PDOT11EXT_IHV_DISCOVERY_PROFILE = *mut DOT11EXT_IHV_DISCOVERY_PROFILE;
131 STRUCT!{struct DOT11EXT_IHV_DISCOVERY_PROFILE_LIST {
132     dwCount: DWORD,
133     pIhvDiscoveryProfiles: PDOT11EXT_IHV_DISCOVERY_PROFILE,
134 }}
135 pub type PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST = *mut DOT11EXT_IHV_DISCOVERY_PROFILE_LIST;
136 ENUM!{enum DOT11EXT_IHV_INDICATION_TYPE {
137     IndicationTypeNicSpecificNotification = 0,
138     IndicationTypePmkidCandidateList = 1,
139     IndicationTypeTkipMicFailure = 2,
140     IndicationTypePhyStateChange = 3,
141     IndicationTypeLinkQuality = 4,
142 }}
143 pub type PDOT11EXT_IHV_INDICATION_TYPE = *mut DOT11EXT_IHV_INDICATION_TYPE;
144 pub const DOT11EXT_PSK_MAX_LENGTH: usize = 64;
145 STRUCT!{struct DOT11EXT_VIRTUAL_STATION_AP_PROPERTY {
146     dot11SSID: DOT11_SSID,
147     dot11AuthAlgo: DOT11_AUTH_ALGORITHM,
148     dot11CipherAlgo: DOT11_CIPHER_ALGORITHM,
149     bIsPassPhrase: BOOL,
150     dwKeyLength: DWORD,
151     ucKeyData: [UCHAR; DOT11EXT_PSK_MAX_LENGTH],
152 }}
153 pub type PDOT11EXT_VIRTUAL_STATION_AP_PROPERTY = *mut DOT11EXT_VIRTUAL_STATION_AP_PROPERTY;
154 pub const WDIAG_IHV_WLAN_ID_FLAG_SECURITY_ENABLED: DWORD = 0x00000001;
155 STRUCT!{struct WDIAG_IHV_WLAN_ID {
156     strProfileName: [WCHAR; MS_MAX_PROFILE_NAME_LENGTH],
157     Ssid: DOT11_SSID,
158     BssType: DOT11_BSS_TYPE,
159     dwFlags: DWORD,
160     dwReasonCode: DWORD,
161 }}
162 pub type PWDIAG_IHV_WLAN_ID = *mut WDIAG_IHV_WLAN_ID;
163 FN!{stdcall DOT11EXT_ALLOCATE_BUFFER(
164     dwByteCount: DWORD,
165     ppvBuffer: *mut LPVOID,
166 ) -> DWORD}
167 FN!{stdcall DOT11EXT_FREE_BUFFER(
168     pvMemory: LPVOID,
169 ) -> ()}
170 FN!{stdcall DOT11EXT_SET_PROFILE_CUSTOM_USER_DATA(
171     hDot11SvcHandle: HANDLE,
172     hConnectSession: HANDLE,
173     dwSessionID: DWORD,
174     dwDataSize: DWORD,
175     pvData: LPVOID,
176 ) -> DWORD}
177 FN!{stdcall DOT11EXT_GET_PROFILE_CUSTOM_USER_DATA(
178     hDot11SvcHandle: HANDLE,
179     hConnectSession: HANDLE,
180     dwSessionID: DWORD,
181     pdwDataSize: *mut DWORD,
182     ppvData: *mut LPVOID,
183 ) -> DWORD}
184 FN!{stdcall DOT11EXT_SET_CURRENT_PROFILE(
185     hDot11SvcHandle: HANDLE,
186     hConnectSession: HANDLE,
187     pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
188     pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
189 ) -> DWORD}
190 FN!{stdcall DOT11EXT_SEND_UI_REQUEST(
191     hDot11SvcHandle: HANDLE,
192     pIhvUIRequest: PDOT11EXT_IHV_UI_REQUEST,
193 ) -> DWORD}
194 FN!{stdcall DOT11EXT_PRE_ASSOCIATE_COMPLETION(
195     hDot11SvcHandle: HANDLE,
196     hConnectSession: HANDLE,
197     dwReasonCode: DWORD,
198     dwWin32Error: DWORD,
199 ) -> DWORD}
200 FN!{stdcall DOT11EXT_POST_ASSOCIATE_COMPLETION(
201     hDot11SvcHandle: HANDLE,
202     hSecuritySessionID: HANDLE,
203     pPeer: PDOT11_MAC_ADDRESS,
204     dwReasonCode: DWORD,
205     dwWin32Error: DWORD,
206 ) -> DWORD}
207 FN!{stdcall DOT11EXT_SEND_NOTIFICATION(
208     hDot11SvcHandle: HANDLE,
209     pNotificationData: PL2_NOTIFICATION_DATA,
210 ) -> DWORD}
211 FN!{stdcall DOT11EXT_SEND_PACKET(
212     hDot11SvcHandle: HANDLE,
213     uPacketLen: ULONG,
214     pvPacket: LPVOID,
215     hSendCompletion: HANDLE,
216 ) -> DWORD}
217 FN!{stdcall DOT11EXT_SET_ETHERTYPE_HANDLING(
218     hDot11SvcHandle: HANDLE,
219     uMaxBackLog: ULONG,
220     uNumOfExemption: ULONG,
221     pExemption: PDOT11_PRIVACY_EXEMPTION,
222     uNumOfRegistration: ULONG,
223     pusRegistration: *mut USHORT,
224 ) -> DWORD}
225 FN!{stdcall DOT11EXT_SET_AUTH_ALGORITHM(
226     hDot11SvcHandle: HANDLE,
227     dwAuthAlgo: DWORD,
228 ) -> DWORD}
229 FN!{stdcall DOT11EXT_SET_UNICAST_CIPHER_ALGORITHM(
230     hDot11SvcHandle: HANDLE,
231     dwUnicastCipherAlgo: DWORD,
232 ) -> DWORD}
233 FN!{stdcall DOT11EXT_SET_MULTICAST_CIPHER_ALGORITHM(
234     hDot11SvcHandle: HANDLE,
235     dwMulticastCipherAlgo: DWORD,
236 ) -> DWORD}
237 FN!{stdcall DOT11EXT_SET_DEFAULT_KEY(
238     hDot11SvcHandle: HANDLE,
239     pKey: PDOT11_CIPHER_DEFAULT_KEY_VALUE,
240     dot11Direction: DOT11_DIRECTION,
241 ) -> DWORD}
242 FN!{stdcall DOT11EXT_SET_KEY_MAPPING_KEY(
243     hDot11SvcHandle: HANDLE,
244     pKey: PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE,
245 ) -> DWORD}
246 FN!{stdcall DOT11EXT_SET_DEFAULT_KEY_ID(
247     hDot11SvcHandle: HANDLE,
248     uDefaultKeyId: ULONG,
249 ) -> DWORD}
250 FN!{stdcall DOT11EXT_SET_EXCLUDE_UNENCRYPTED(
251     hDot11SvcHandle: HANDLE,
252     bExcludeUnencrypted: BOOL,
253 ) -> DWORD}
254 FN!{stdcall DOT11EXT_NIC_SPECIFIC_EXTENSION(
255     hDot11SvcHandle: HANDLE,
256     dwInBufferSize: DWORD,
257     pvInBuffer: LPVOID,
258     pdwOutBufferSize: *mut DWORD,
259     pvOutBuffer: LPVOID,
260 ) -> DWORD}
261 FN!{stdcall DOT11EXT_ONEX_START(
262     hDot11SvcHandle: HANDLE,
263     pEapAttributes: *mut EAP_ATTRIBUTES,
264 ) -> DWORD}
265 FN!{stdcall DOT11EXT_ONEX_STOP(
266     hDot11SvcHandle: HANDLE,
267 ) -> DWORD}
268 FN!{stdcall DOT11EXT_PROCESS_ONEX_PACKET(
269     hDot11SvcHandle: HANDLE,
270     dwInPacketSize: DWORD,
271     pvInPacket: LPVOID,
272 ) -> DWORD}
273 FN!{stdcall DOT11EXT_REQUEST_VIRTUAL_STATION(
274     hDot11PrimaryHandle: HANDLE,
275     pvReserved: LPVOID,
276 ) -> DWORD}
277 FN!{stdcall DOT11EXT_RELEASE_VIRTUAL_STATION(
278     hDot11PrimaryHandle: HANDLE,
279     pvReserved: LPVOID,
280 ) -> DWORD}
281 FN!{stdcall DOT11EXT_QUERY_VIRTUAL_STATION_PROPERTIES(
282     hDot11SvcHandle: HANDLE,
283     pbIsVirtualStation: *mut BOOL,
284     pgPrimary: *mut GUID,
285     pvReserved: LPVOID,
286 ) -> DWORD}
287 FN!{stdcall DOT11EXT_SET_VIRTUAL_STATION_AP_PROPERTIES(
288     hDot11SvcHandle: HANDLE,
289     hConnectSession: HANDLE,
290     dwNumProperties: DWORD,
291     pProperties: PDOT11EXT_VIRTUAL_STATION_AP_PROPERTY,
292     pvReserved: LPVOID,
293 ) -> DWORD}
294 pub const IHV_VERSION_FUNCTION_NAME: &'static str = "Dot11ExtIhvGetVersionInfo";
295 pub const IHV_INIT_FUNCTION_NAME: &'static str = "Dot11ExtIhvInitService";
296 pub const IHV_INIT_VS_FUNCTION_NAME: &'static str = "Dot11ExtIhvInitVirtualStation";
297 FN!{stdcall DOT11EXTIHV_GET_VERSION_INFO(
298     pDot11IHVVersionInfo: PDOT11_IHV_VERSION_INFO,
299 ) -> DWORD}
300 FN!{stdcall DOT11EXTIHV_INIT_SERVICE(
301     dwVerNumUsed: DWORD,
302     pDot11ExtAPI: PDOT11EXT_APIS,
303     pvReserved: LPVOID,
304     pDot11IHVHandlers: PDOT11EXT_IHV_HANDLERS,
305 ) -> DWORD}
306 FN!{stdcall DOT11EXTIHV_INIT_VIRTUAL_STATION(
307     pDot11ExtVSAPI: PDOT11EXT_VIRTUAL_STATION_APIS,
308     pvReserved: LPVOID,
309 ) -> DWORD}
310 FN!{stdcall DOT11EXTIHV_DEINIT_SERVICE() -> ()}
311 FN!{stdcall DOT11EXTIHV_INIT_ADAPTER(
312     pDot11Adapter: PDOT11_ADAPTER,
313     hDot11SvcHandle: HANDLE,
314     phIhvExtAdapter: PHANDLE,
315 ) -> DWORD}
316 FN!{stdcall DOT11EXTIHV_DEINIT_ADAPTER(
317     hIhvExtAdapter: HANDLE,
318 ) -> ()}
319 FN!{stdcall DOT11EXTIHV_PERFORM_PRE_ASSOCIATE(
320     hIhvExtAdapter: HANDLE,
321     hConnectSession: HANDLE,
322     pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
323     pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
324     pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
325     pConnectableBssid: PDOT11_BSS_LIST,
326     pdwReasonCode: PDWORD,
327 ) -> DWORD}
328 FN!{stdcall DOT11EXTIHV_ADAPTER_RESET(
329     hIhvExtAdapter: HANDLE,
330 ) -> DWORD}
331 FN!{stdcall DOT11EXTIHV_PERFORM_POST_ASSOCIATE(
332     hIhvExtAdapter: HANDLE,
333     hSecuritySessionID: HANDLE,
334     pPortState: PDOT11_PORT_STATE,
335     uDot11AssocParamsBytes: ULONG,
336     pDot11AssocParams: PDOT11_ASSOCIATION_COMPLETION_PARAMETERS,
337 ) -> DWORD}
338 FN!{stdcall DOT11EXTIHV_STOP_POST_ASSOCIATE(
339     hIhvExtAdapter: HANDLE,
340     pPeer: PDOT11_MAC_ADDRESS,
341     dot11AssocStatus: DOT11_ASSOC_STATUS,
342 ) -> DWORD}
343 FN!{stdcall DOT11EXTIHV_VALIDATE_PROFILE(
344     hIhvExtAdapter: HANDLE,
345     pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
346     pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
347     pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
348     pdwReasonCode: PDWORD,
349 ) -> DWORD}
350 FN!{stdcall DOT11EXTIHV_PERFORM_CAPABILITY_MATCH(
351     hIhvExtAdapter: HANDLE,
352     pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
353     pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
354     pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
355     pConnectableBssid: PDOT11_BSS_LIST,
356     pdwReasonCode: PDWORD,
357 ) -> DWORD}
358 FN!{stdcall DOT11EXTIHV_CREATE_DISCOVERY_PROFILES(
359     hIhvExtAdapter: HANDLE,
360     bInsecure: BOOL,
361     pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
362     pConnectableBssid: PDOT11_BSS_LIST,
363     pIhvDiscoveryProfileList: PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST,
364     pdwReasonCode: PDWORD,
365 ) -> DWORD}
366 FN!{stdcall DOT11EXTIHV_PROCESS_SESSION_CHANGE(
367     uEventType: ULONG,
368     pSessionNotification: PWTSSESSION_NOTIFICATION,
369 ) -> DWORD}
370 FN!{stdcall DOT11EXTIHV_RECEIVE_INDICATION(
371     hIhvExtAdapter: HANDLE,
372     indicationType: DOT11EXT_IHV_INDICATION_TYPE,
373     uBufferLength: ULONG,
374     pvBuffer: LPVOID,
375 ) -> DWORD}
376 FN!{stdcall DOT11EXTIHV_RECEIVE_PACKET(
377     hIhvExtAdapter: HANDLE,
378     dwInBufferSize: DWORD,
379     pvInBuffer: LPVOID,
380 ) -> DWORD}
381 FN!{stdcall DOT11EXTIHV_SEND_PACKET_COMPLETION(
382     hSendCompletion: HANDLE,
383 ) -> DWORD}
384 FN!{stdcall DOT11EXTIHV_IS_UI_REQUEST_PENDING(
385     guidUIRequest: GUID,
386     pbIsRequestPending: PBOOL,
387 ) -> DWORD}
388 FN!{stdcall DOT11EXTIHV_PROCESS_UI_RESPONSE(
389     guidUIRequest: GUID,
390     dwByteCount: DWORD,
391     pvResponseBuffer: LPVOID,
392 ) -> DWORD}
393 FN!{stdcall DOT11EXTIHV_QUERY_UI_REQUEST(
394     hIhvExtAdapter: HANDLE,
395     connectionPhase: DOT11EXT_IHV_CONNECTION_PHASE,
396     ppIhvUIRequest: *mut PDOT11EXT_IHV_UI_REQUEST,
397 ) -> DWORD}
398 FN!{stdcall DOT11EXTIHV_ONEX_INDICATE_RESULT(
399     hIhvExtAdapter: HANDLE,
400     msOneXResult: DOT11_MSONEX_RESULT,
401     pDot11MsOneXResultParams: PDOT11_MSONEX_RESULT_PARAMS,
402 ) -> DWORD}
403 FN!{stdcall DOT11EXTIHV_CONTROL(
404     hIhvExtAdapter: HANDLE,
405     dwInBufferSize: DWORD,
406     pInBuffer: PBYTE,
407     dwOutBufferSize: DWORD,
408     pOutBuffer: PBYTE,
409     pdwBytesReturned: PDWORD,
410 ) -> DWORD}
411