1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
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}