1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_WLANAPI
7 #define _INC_WLANAPI
8 
9 #include <l2cmn.h>
10 #include <windot11.h>
11 #include <eaptypes.h>
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 #define WLAN_NOTIFICATION_SOURCE_NONE      L2_NOTIFICATION_SOURCE_NONE
18 #define WLAN_NOTIFICATION_SOURCE_ALL       L2_NOTIFICATION_SOURCE_ALL
19 #define WLAN_NOTIFICATION_SOURCE_ACM       L2_NOTIFICATION_SOURCE_WLAN_ACM
20 #define WLAN_NOTIFICATION_SOURCE_MSM       L2_NOTIFICATION_SOURCE_WLAN_MSM
21 #define WLAN_NOTIFICATION_SOURCE_SECURITY  L2_NOTIFICATION_SOURCE_WLAN_SECURITY
22 #define WLAN_NOTIFICATION_SOURCE_IHV       L2_NOTIFICATION_SOURCE_WLAN_IHV
23 #define WLAN_NOTIFICATION_SOURCE_HNWK      L2_NOTIFICATION_SOURCE_WLAN_HNWK
24 #define WLAN_NOTIFICATION_SOURCE_ONEX      L2_NOTIFICATION_SOURCE_ONEX
25 
26 typedef DWORD WLAN_REASON_CODE, *PWLAN_REASON_CODE;
27 typedef ULONG WLAN_SIGNAL_QUALITY, *PWLAN_SIGNAL_QUALITY;
28 
29 typedef struct _DOT11_NETWORK {
30   DOT11_SSID     dot11Ssid;
31   DOT11_BSS_TYPE dot11BssType;
32 } DOT11_NETWORK, *PDOT11_NETWORK;
33 
34 typedef enum _DOT11_RADIO_STATE {
35   dot11_radio_state_unknown,
36   dot11_radio_state_on,
37   dot11_radio_state_off
38 } DOT11_RADIO_STATE, *PDOT11_RADIO_STATE;
39 
40 typedef enum _WLAN_NOTIFICATION_ACM {
41     wlan_notification_acm_start = 0,
42     wlan_notification_acm_autoconf_enabled,
43     wlan_notification_acm_autoconf_disabled,
44     wlan_notification_acm_background_scan_enabled,
45     wlan_notification_acm_background_scan_disabled,
46     wlan_notification_acm_bss_type_change,
47     wlan_notification_acm_power_setting_change,
48     wlan_notification_acm_scan_complete,
49     wlan_notification_acm_scan_fail,
50     wlan_notification_acm_connection_start,
51     wlan_notification_acm_connection_complete,
52     wlan_notification_acm_connection_attempt_fail,
53     wlan_notification_acm_filter_list_change,
54     wlan_notification_acm_interface_arrival,
55     wlan_notification_acm_interface_removal,
56     wlan_notification_acm_profile_change,
57     wlan_notification_acm_profile_name_change,
58     wlan_notification_acm_profiles_exhausted,
59     wlan_notification_acm_network_not_available,
60     wlan_notification_acm_network_available,
61     wlan_notification_acm_disconnecting,
62     wlan_notification_acm_disconnected,
63     wlan_notification_acm_adhoc_network_state_change,
64     wlan_notification_acm_end
65 } WLAN_NOTIFICATION_ACM, *PWLAN_NOTIFICATION_ACM;
66 
67 typedef enum _WLAN_INTERFACE_STATE {
68   wlan_interface_state_not_ready               = 0,
69   wlan_interface_state_connected               = 1,
70   wlan_interface_state_ad_hoc_network_formed   = 2,
71   wlan_interface_state_disconnecting           = 3,
72   wlan_interface_state_disconnected            = 4,
73   wlan_interface_state_associating             = 5,
74   wlan_interface_state_discovering             = 6,
75   wlan_interface_state_authenticating          = 7
76 } WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE;
77 
78 typedef enum _WLAN_CONNECTION_MODE {
79   wlan_connection_mode_profile,
80   wlan_connection_mode_temporary_profile,
81   wlan_connection_mode_discovery_secure,
82   wlan_connection_mode_discovery_unsecure,
83   wlan_connection_mode_auto,
84   wlan_connection_mode_invalid
85 } WLAN_CONNECTION_MODE, *PWLAN_CONNECTION_MODE;
86 
87 typedef enum _WLAN_INTERFACE_TYPE {
88   wlan_interface_type_emulated_802_11   = 0,
89   wlan_interface_type_native_802_11,
90   wlan_interface_type_invalid
91 } WLAN_INTERFACE_TYPE, *PWLAN_INTERFACE_TYPE;
92 
93 typedef enum _WLAN_INTF_OPCODE {
94   wlan_intf_opcode_autoconf_start                               = 0x000000000,
95   wlan_intf_opcode_autoconf_enabled,
96   wlan_intf_opcode_background_scan_enabled,
97   wlan_intf_opcode_media_streaming_mode,
98   wlan_intf_opcode_radio_state,
99   wlan_intf_opcode_bss_type,
100   wlan_intf_opcode_interface_state,
101   wlan_intf_opcode_current_connection,
102   wlan_intf_opcode_channel_number,
103   wlan_intf_opcode_supported_infrastructure_auth_cipher_pairs,
104   wlan_intf_opcode_supported_adhoc_auth_cipher_pairs,
105   wlan_intf_opcode_supported_country_or_region_string_list,
106   wlan_intf_opcode_current_operation_mode,
107   wlan_intf_opcode_supported_safe_mode,
108   wlan_intf_opcode_certified_safe_mode,
109   wlan_intf_opcode_hosted_network_capable,
110   wlan_intf_opcode_autoconf_end                                 = 0x0fffffff,
111   wlan_intf_opcode_msm_start                                    = 0x10000100,
112   wlan_intf_opcode_statistics,
113   wlan_intf_opcode_rssi,
114   wlan_intf_opcode_msm_end                                      = 0x1fffffff,
115   wlan_intf_opcode_security_start                               = 0x20010000,
116   wlan_intf_opcode_security_end                                 = 0x2fffffff,
117   wlan_intf_opcode_ihv_start                                    = 0x30000000,
118   wlan_intf_opcode_ihv_end                                      = 0x3fffffff
119 } WLAN_INTF_OPCODE, *PWLAN_INTF_OPCODE;
120 
121 typedef enum _WLAN_OPCODE_VALUE_TYPE {
122   wlan_opcode_value_type_query_only            = 0,
123   wlan_opcode_value_type_set_by_group_policy   = 1,
124   wlan_opcode_value_type_set_by_user           = 2,
125   wlan_opcode_value_type_invalid               = 3
126 } WLAN_OPCODE_VALUE_TYPE, *PWLAN_OPCODE_VALUE_TYPE;
127 
128 typedef enum _WLAN_POWER_SETTING {
129   wlan_power_setting_no_saving,
130   wlan_power_setting_low_saving,
131   wlan_power_setting_medium_saving,
132   wlan_power_setting_maximum_saving,
133   wlan_power_setting_invalid
134 } WLAN_POWER_SETTING, *PWLAN_POWER_SETTING;
135 
136 typedef struct _WLAN_ASSOCIATION_ATTRIBUTES {
137   DOT11_SSID          dot11Ssid;
138   DOT11_BSS_TYPE      dot11BssType;
139   DOT11_MAC_ADDRESS   dot11Bssid;
140   DOT11_PHY_TYPE      dot11PhyType;
141   ULONG               uDot11PhyIndex;
142   WLAN_SIGNAL_QUALITY wlanSignalQuality;
143   ULONG               ulRxRate;
144   ULONG               ulTxRate;
145 } WLAN_ASSOCIATION_ATTRIBUTES, *PWLAN_ASSOCIATION_ATTRIBUTES;
146 
147 typedef struct _WLAN_AUTH_CIPHER_PAIR_LIST {
148   DWORD                  dwNumberOfItems;
149   DOT11_AUTH_CIPHER_PAIR pAuthCipherPairList;
150 } WLAN_AUTH_CIPHER_PAIR_LIST, *PWLAN_AUTH_CIPHER_PAIR_LIST;
151 
152 typedef struct _WLAN_NOTIFICATION_DATA {
153   DWORD NotificationSource;
154   DWORD NotificationCode;
155   GUID  InterfaceGuid;
156   DWORD dwDataSize;
157   PVOID pData;
158 } WLAN_NOTIFICATION_DATA, *PWLAN_NOTIFICATION_DATA;
159 
160 #define WLAN_MAX_PHY_TYPE_NUMBER 8
161 
162 typedef struct _WLAN_AVAILABLE_NETWORK {
163   WCHAR                  strProfileName[256];
164   DOT11_SSID             dot11Ssid;
165   DOT11_BSS_TYPE         dot11BssType;
166   ULONG                  uNumberOfBssids;
167   WINBOOL                bNetworkConnectable;
168   WLAN_REASON_CODE       wlanNotConnectableReason;
169   ULONG                  uNumberOfPhyTypes;
170   DOT11_PHY_TYPE         dot11PhyTypes[WLAN_MAX_PHY_TYPE_NUMBER];
171   WINBOOL                bMorePhyTypes;
172   WLAN_SIGNAL_QUALITY    wlanSignalQuality;
173   WINBOOL                bSecurityEnabled;
174   DOT11_AUTH_ALGORITHM   dot11DefaultAuthAlgorithm;
175   DOT11_CIPHER_ALGORITHM dot11DefaultCipherAlgorithm;
176   DWORD                  dwFlags;
177   DWORD                  dwReserved;
178 } WLAN_AVAILABLE_NETWORK, *PWLAN_AVAILABLE_NETWORK;
179 
180 typedef struct _WLAN_AVAILABLE_NETWORK_LIST {
181   DWORD                  dwNumberOfItems;
182   DWORD                  dwIndex;
183   WLAN_AVAILABLE_NETWORK Network[1];
184 } WLAN_AVAILABLE_NETWORK_LIST, *PWLAN_AVAILABLE_NETWORK_LIST;
185 
186 typedef struct _WLAN_SECURITY_ATTRIBUTES {
187   WINBOOL                bSecurityEnabled;
188   WINBOOL                bOneXEnabled;
189   DOT11_AUTH_ALGORITHM   dot11AuthAlgorithm;
190   DOT11_CIPHER_ALGORITHM dot11CipherAlgorithm;
191 } WLAN_SECURITY_ATTRIBUTES, *PWLAN_SECURITY_ATTRIBUTES;
192 
193 typedef struct _WLAN_CONNECTION_ATTRIBUTES {
194   WLAN_INTERFACE_STATE        isState;
195   WLAN_CONNECTION_MODE        wlanConnectionMode;
196   WCHAR                       strProfileName[256];
197   WLAN_ASSOCIATION_ATTRIBUTES wlanAssociationAttributes;
198   WLAN_SECURITY_ATTRIBUTES    wlanSecurityAttributes;
199 } WLAN_CONNECTION_ATTRIBUTES, *PWLAN_CONNECTION_ATTRIBUTES;
200 
201 /* Assuming stdcall */
202 typedef VOID (CALLBACK *WLAN_NOTIFICATION_CALLBACK)(
203   PWLAN_NOTIFICATION_DATA ,
204   PVOID
205 );
206 
207 #define WLAN_MAX_NAME_LENGTH 256
208 
209 typedef struct _WLAN_CONNECTION_NOTIFICATION_DATA {
210   WLAN_CONNECTION_MODE wlanConnectionMode;
211   WCHAR                strProfileName[WLAN_MAX_NAME_LENGTH];
212   DOT11_SSID           dot11Ssid;
213   DOT11_BSS_TYPE       dot11BssType;
214   BOOL                 bSecurityEnabled;
215   WLAN_REASON_CODE     wlanReasonCode;
216   DWORD                dwFlags;
217   WCHAR                strProfileXml[1];
218 } WLAN_CONNECTION_NOTIFICATION_DATA, *PWLAN_CONNECTION_NOTIFICATION_DATA;
219 
220 #define WLAN_CONNECTION_HIDDEN_NETWORK 0x00000001
221 #define WLAN_CONNECTION_ADHOC_JOIN_ONLY 0x00000002
222 #define WLAN_CONNECTION_IGNORE_PRIVACY_BIT 0x00000004
223 #define WLAN_CONNECTION_EAPOL_PASSTHROUGH 0x00000008
224 
225 typedef struct _WLAN_CONNECTION_PARAMETERS {
226   WLAN_CONNECTION_MODE wlanConnectionMode;
227   LPCWSTR              strProfile;
228   PDOT11_SSID          pDot11Ssid;
229   PDOT11_BSSID_LIST    pDesiredBssidList;
230   DOT11_BSS_TYPE       dot11BssType;
231   DWORD                dwFlags;
232 } WLAN_CONNECTION_PARAMETERS, *PWLAN_CONNECTION_PARAMETERS;
233 
234 typedef struct _WLAN_INTERFACE_INFO {
235   GUID                 InterfaceGuid;
236   WCHAR                strInterfaceDescription[256];
237   WLAN_INTERFACE_STATE isState;
238 } WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO;
239 
240 typedef struct _WLAN_INTERFACE_INFO_LIST {
241   DWORD               dwNumberOfItems;
242   DWORD               dwIndex;
243   WLAN_INTERFACE_INFO InterfaceInfo[];
244 } WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST;
245 
246 typedef struct _WLAN_PROFILE_INFO {
247   WCHAR strProfileName[256];
248   DWORD dwFlags;
249 } WLAN_PROFILE_INFO, *PWLAN_PROFILE_INFO;
250 
251 typedef struct _WLAN_PROFILE_INFO_LIST {
252   DWORD             dwNumberOfItems;
253   DWORD             dwIndex;
254   WLAN_PROFILE_INFO ProfileInfo[1];
255 } WLAN_PROFILE_INFO_LIST, *PWLAN_PROFILE_INFO_LIST;
256 
257 PVOID WINAPI WlanAllocateMemory(
258   DWORD dwMemorySize
259 );
260 
261 DWORD WINAPI WlanCloseHandle(
262   HANDLE hClientHandle,
263   PVOID pReserved
264 );
265 
266 DWORD WINAPI WlanConnect(
267   HANDLE hClientHandle,
268   const GUID *pInterfaceGuid,
269   const PWLAN_CONNECTION_PARAMETERS pConnectionParameters,
270   PVOID pReserved
271 );
272 
273 DWORD WINAPI WlanDeleteProfile(
274   HANDLE hClientHandle,
275   const GUID *pInterfaceGuid,
276   LPCWSTR strProfileName,
277   PVOID pReserved
278 );
279 
280 DWORD WINAPI WlanDisconnect(
281   HANDLE hClientHandle,
282   const GUID *pInterfaceGuid,
283   PVOID pReserved
284 );
285 
286 DWORD WINAPI WlanEnumInterfaces(
287   HANDLE hClientHandle,
288   PVOID pReserved,
289   PWLAN_INTERFACE_INFO_LIST *ppInterfaceList
290 );
291 
292 VOID WINAPI WlanFreeMemory(
293   PVOID pMemory
294 );
295 
296 DWORD WINAPI WlanGetAvailableNetworkList(
297   HANDLE hClientHandle,
298   const GUID *pInterfaceGuid,
299   DWORD dwFlags,
300   PVOID pReserved,
301   PWLAN_AVAILABLE_NETWORK_LIST *ppAvailableNetworkList
302 );
303 
304 DWORD WINAPI WlanGetProfile(
305   HANDLE hClientHandle,
306   const GUID *pInterfaceGuid,
307   LPCWSTR strProfileName,
308   PVOID pReserved,
309   LPWSTR *pstrProfileXml,
310   DWORD *pdwFlags,
311   PDWORD pdwGrantedAccess
312 );
313 
314 DWORD WINAPI WlanGetProfileList(
315   HANDLE hClientHandle,
316   const GUID *pInterfaceGuid,
317   PVOID pReserved,
318   PWLAN_PROFILE_INFO_LIST *ppProfileList
319 );
320 
321 DWORD WINAPI WlanOpenHandle(
322   DWORD dwClientVersion,
323   PVOID pReserved,
324   PDWORD pdwNegotiatedVersion,
325   PHANDLE phClientHandle
326 );
327 
328 DWORD WINAPI WlanQueryInterface(
329   HANDLE hClientHandle,
330   const GUID *pInterfaceGuid,
331   WLAN_INTF_OPCODE OpCode,
332   PVOID pReserved,
333   PDWORD pdwDataSize,
334   PVOID *ppData,
335   PWLAN_OPCODE_VALUE_TYPE pWlanOpcodeValueType
336 );
337 
338 DWORD WINAPI WlanReasonCodeToString(
339   DWORD dwReasonCode,
340   DWORD dwBufferSize,
341   PWCHAR pStringBuffer,
342   PVOID pReserved
343 );
344 
345 DWORD WINAPI WlanRegisterNotification(
346   HANDLE hClientHandle,
347   DWORD dwNotifSource,
348   WINBOOL bIgnoreDuplicate,
349   WLAN_NOTIFICATION_CALLBACK  funcCallback,
350   PVOID pCallbackContext,
351   PVOID pReserved,
352   PDWORD pdwPrevNotifSource
353 );
354 
355 DWORD WINAPI WlanSetInterface(
356   HANDLE hClientHandle,
357   const GUID *pInterfaceGuid,
358   WLAN_INTF_OPCODE OpCode,
359   DWORD dwDataSize,
360   const PVOID pData,
361   PVOID pReserved
362 );
363 
364 DWORD WINAPI WlanSetProfile(
365   HANDLE hClientHandle,
366   const GUID *pInterfaceGuid,
367   DWORD dwFlags,
368   LPCWSTR strProfileXml,
369   LPCWSTR strAllUserProfileSecurity,
370   WINBOOL bOverwrite,
371   PVOID pReserved,
372   DWORD *pdwReasonCode
373 );
374 
375 DWORD WINAPI WlanSetProfileEapXmlUserData(
376   HANDLE hClientHandle,
377   const GUID *pInterfaceGuid,
378   LPCWSTR strProfileName,
379   DWORD dwFlags,
380   LPCWSTR strEapXmlUserData,
381   PVOID pReserved
382 );
383 
384 DWORD WINAPI WlanSetProfileList(
385   HANDLE hClientHandle,
386   const GUID *pInterfaceGuid,
387   DWORD dwItems,
388   LPCWSTR *strProfileNames,
389   PVOID pReserved
390 );
391 
392 DWORD WINAPI WlanSetProfilePosition(
393   HANDLE hClientHandle,
394   const GUID *pInterfaceGuid,
395   LPCWSTR strProfileName,
396   DWORD dwPosition,
397   PVOID pReserved
398 );
399 
400 typedef enum _WLAN_AUTOCONF_OPCODE {
401   wlan_autoconf_opcode_start                                       = 0,
402   wlan_autoconf_opcode_show_denied_networks                        = 1,
403   wlan_autoconf_opcode_power_setting                               = 2,
404   wlan_autoconf_opcode_only_use_gp_profiles_for_allowed_networks   = 3,
405   wlan_autoconf_opcode_allow_explicit_creds                        = 4,
406   wlan_autoconf_opcode_block_period                                = 5,
407   wlan_autoconf_opcode_allow_virtual_station_extensibility         = 6,
408   wlan_autoconf_opcode_end                                         = 7
409 } WLAN_AUTOCONF_OPCODE, *PWLAN_AUTOCONF_OPCODE;
410 
411 typedef enum _WL_DISPLAY_PAGES {
412   WLConnectionPage,
413   WLSecurityPage
414 } WL_DISPLAY_PAGES, *PWL_DISPLAY_PAGES;
415 
416 typedef enum _WLAN_ADHOC_NETWORK_STATE {
417   wlan_adhoc_network_state_formed      = 0,
418   wlan_adhoc_network_state_connected   = 1
419 } WLAN_ADHOC_NETWORK_STATE;
420 
421 typedef enum _WLAN_IHV_CONTROL_TYPE {
422   wlan_ihv_control_type_service,
423   wlan_ihv_control_type_driver
424 } WLAN_IHV_CONTROL_TYPE, *PWLAN_IHV_CONTROL_TYPE;
425 
426 typedef enum _WLAN_FILTER_LIST_TYPE {
427   wlan_filter_list_type_gp_permit,
428   wlan_filter_list_type_gp_deny,
429   wlan_filter_list_type_user_permit,
430   wlan_filter_list_type_user_deny
431 } WLAN_FILTER_LIST_TYPE, *PWLAN_FILTER_LIST_TYPE;
432 
433 typedef enum _WLAN_SECURABLE_OBJECT {
434   wlan_secure_permit_list                      = 0,
435   wlan_secure_deny_list                        = 1,
436   wlan_secure_ac_enabled                       = 2,
437   wlan_secure_bc_scan_enabled                  = 3,
438   wlan_secure_bss_type                         = 4,
439   wlan_secure_show_denied                      = 5,
440   wlan_secure_interface_properties             = 6,
441   wlan_secure_ihv_control                      = 7,
442   wlan_secure_all_user_profiles_order          = 8,
443   wlan_secure_add_new_all_user_profiles        = 9,
444   wlan_secure_add_new_per_user_profiles        = 10,
445   wlan_secure_media_streaming_mode_enabled     = 11,
446   wlan_secure_current_operation_mode           = 12,
447   wlan_secure_get_plaintext_key                = 13,
448   wlan_secure_hosted_network_elevated_access   = 14
449 } WLAN_SECURABLE_OBJECT, *PWLAN_SECURABLE_OBJECT;
450 
451 typedef struct _DOT11_NETWORK_LIST {
452   DWORD         dwNumberOfItems;
453   DWORD         dwIndex;
454   DOT11_NETWORK Network[1];
455 } DOT11_NETWORK_LIST, *PDOT11_NETWORK_LIST;
456 
457 #define DOT11_RATE_SET_MAX_LENGTH 126
458 
459 typedef struct _WLAN_RATE_SET {
460   ULONG  uRateSetLength;
461   USHORT usRateSet[DOT11_RATE_SET_MAX_LENGTH];
462 } WLAN_RATE_SET, *PWLAN_RATE_SET;
463 
464 typedef struct _WLAN_BSS_ENTRY {
465   DOT11_SSID        dot11Ssid;
466   ULONG             uPhyId;
467   DOT11_MAC_ADDRESS dot11Bssid;
468   DOT11_BSS_TYPE    dot11BssType;
469   DOT11_PHY_TYPE    dot11BssPhyType;
470   LONG              lRssi;
471   ULONG             uLinkQuality;
472   BOOLEAN           bInRegDomain;
473   USHORT            usBeaconPeriod;
474   ULONGLONG         ullTimestamp;
475   ULONGLONG         ullHostTimestamp;
476   USHORT            usCapabilityInformation;
477   ULONG             ulChCenterFrequency;
478   WLAN_RATE_SET     wlanRateSet;
479   ULONG             ulIeOffset;
480   ULONG             ulIeSize;
481 } WLAN_BSS_ENTRY, *PWLAN_BSS_ENTRY;
482 
483 typedef struct _WLAN_BSS_LIST {
484   DWORD          dwTotalSize;
485   DWORD          dwNumberOfItems;
486   WLAN_BSS_ENTRY wlanBssEntries[1];
487 } WLAN_BSS_LIST, *PWLAN_BSS_LIST;
488 
489 typedef struct _WLAN_COUNTRY_OR_REGION_STRING_LIST {
490   DWORD                          dwNumberOfItems;
491   DOT11_COUNTRY_OR_REGION_STRING pCountryOrRegionStringList[1];
492 } WLAN_COUNTRY_OR_REGION_STRING_LIST, *PWLAN_COUNTRY_OR_REGION_STRING_LIST;
493 
494 #define WLAN_MAX_PHY_INDEX 64
495 
496 typedef struct _WLAN_INTERFACE_CAPABILITY {
497   WLAN_INTERFACE_TYPE interfaceType;
498   WINBOOL             bDot11DSupported;
499   DWORD               dwMaxDesiredSsidListSize;
500   DWORD               dwMaxDesiredBssidListSize;
501   DWORD               dwNumberOfSupportedPhys;
502   DOT11_PHY_TYPE      dot11PhyTypes[WLAN_MAX_PHY_INDEX];
503 } WLAN_INTERFACE_CAPABILITY, *PWLAN_INTERFACE_CAPABILITY;
504 
505 typedef struct _WLAN_MAC_FRAME_STATISTICS {
506   ULONGLONG ullTransmittedFrameCount;
507   ULONGLONG ullReceivedFrameCount;
508   ULONGLONG ullWEPExcludedCount;
509   ULONGLONG ullTKIPLocalMICFailures;
510   ULONGLONG ullTKIPReplays;
511   ULONGLONG ullTKIPICVErrorCount;
512   ULONGLONG ullCCMPReplays;
513   ULONGLONG ullCCMPDecryptErrors;
514   ULONGLONG ullWEPUndecryptableCount;
515   ULONGLONG ullWEPICVErrorCount;
516   ULONGLONG ullDecryptSuccessCount;
517   ULONGLONG ullDecryptFailureCount;
518 } WLAN_MAC_FRAME_STATISTICS, *PWLAN_MAC_FRAME_STATISTICS;
519 
520 typedef struct _WLAN_MSM_NOTIFICATION_DATA {
521   WLAN_CONNECTION_MODE wlanConnectionMode;
522   WCHAR                strProfileName[WLAN_MAX_NAME_LENGTH];
523   DOT11_SSID           dot11Ssid;
524   DOT11_BSS_TYPE       dot11BssType;
525   DOT11_MAC_ADDRESS    dot11MacAddr;
526   BOOL                 bSecurityEnabled;
527   BOOL                 bFirstPeer;
528   BOOL                 bLastPeer;
529   WLAN_REASON_CODE     wlanReasonCode;
530 } WLAN_MSM_NOTIFICATION_DATA, *PWLAN_MSM_NOTIFICATION_DATA;
531 
532 typedef struct _WLAN_PHY_FRAME_STATISTICS {
533   ULONGLONG ullTransmittedFrameCount;
534   ULONGLONG ullMulticastTransmittedFrameCount;
535   ULONGLONG ullFailedCount;
536   ULONGLONG ullRetryCount;
537   ULONGLONG ullMultipleRetryCount;
538   ULONGLONG ullMaxTXLifetimeExceededCount;
539   ULONGLONG ullTransmittedFragmentCount;
540   ULONGLONG ullRTSSuccessCount;
541   ULONGLONG ullRTSFailureCount;
542   ULONGLONG ullACKFailureCount;
543   ULONGLONG ullReceivedFrameCount;
544   ULONGLONG ullMulticastReceivedFrameCount;
545   ULONGLONG ullPromiscuousReceivedFrameCount;
546   ULONGLONG ullMaxRXLifetimeExceededCount;
547   ULONGLONG ullFrameDuplicateCount;
548   ULONGLONG ullReceivedFragmentCount;
549   ULONGLONG ullPromiscuousReceivedFragmentCount;
550   ULONGLONG ullFCSErrorCount;
551 } WLAN_PHY_FRAME_STATISTICS, *PWLAN_PHY_FRAME_STATISTICS;
552 
553 typedef struct _WLAN_PHY_RADIO_STATE {
554   DWORD             dwPhyIndex;
555   DOT11_RADIO_STATE dot11SoftwareRadioState;
556   DOT11_RADIO_STATE dot11HardwareRadioState;
557 } WLAN_PHY_RADIO_STATE, *PWLAN_PHY_RADIO_STATE;
558 
559 typedef struct _WLAN_RADIO_STATE {
560   DWORD                dwNumberOfPhys;
561   WLAN_PHY_RADIO_STATE PhyRadioState[64];
562 } WLAN_RADIO_STATE, *PWLAN_RADIO_STATE;
563 
564 #define DOT11_PSD_IE_MAX_DATA_SIZE 240
565 #define DOT11_PSD_IE_MAX_ENTRY_NUMBER 5
566 
567 typedef struct _WLAN_RAW_DATA {
568   DWORD dwDataSize;
569   BYTE  DataBlob[1];
570 } WLAN_RAW_DATA, *PWLAN_RAW_DATA;
571 
572 typedef struct _WLAN_RAW_DATA_LIST {
573   DWORD dwTotalSize;
574   DWORD dwNumberOfItems;
575   struct {
576     DWORD dwDataOffset;
577     DWORD dwDataSize;
578   } DataList[1];
579 } WLAN_RAW_DATA_LIST, *PWLAN_RAW_DATA_LIST;
580 
581 typedef struct _WLAN_STATISTICS {
582   ULONGLONG                 ullFourWayHandshakeFailures;
583   ULONGLONG                 ullTKIPCounterMeasuresInvoked;
584   ULONGLONG                 ullReserved;
585   WLAN_MAC_FRAME_STATISTICS MacUcastCounters;
586   WLAN_MAC_FRAME_STATISTICS MacMcastCounters;
587   DWORD                     dwNumberOfPhys;
588   WLAN_PHY_FRAME_STATISTICS PhyCounters[1];
589 } WLAN_STATISTICS, *PWLAN_STATISTICS;
590 
591 DWORD WINAPI WlanExtractPsdIEDataList(
592   HANDLE hClientHandle,
593   DWORD dwIeDataSize,
594   const PBYTE pRawIeData,
595   LPCWSTR strFormat,
596   PVOID pReserved,
597   PWLAN_RAW_DATA_LIST *ppPsdIEDataList
598 );
599 
600 DWORD WINAPI WlanGetFilterList(
601   HANDLE hClientHandle,
602   WLAN_FILTER_LIST_TYPE wlanFilterListType,
603   PVOID pReserved,
604   PDOT11_NETWORK_LIST *ppNetworkList
605 );
606 
607 DWORD WINAPI WlanGetInterfaceCapability(
608   HANDLE hClientHandle,
609   const GUID *pInterfaceGuid,
610   PVOID pReserved,
611   PWLAN_INTERFACE_CAPABILITY *ppCapability
612 );
613 
614 DWORD WINAPI WlanGetNetworkBssList(
615   HANDLE hClientHandle,
616   const GUID *pInterfaceGuid,
617   const  PDOT11_SSID pDot11Ssid,
618   DOT11_BSS_TYPE dot11BssType,
619   WINBOOL bSecurityEnabled,
620   PVOID pReserved,
621   PWLAN_BSS_LIST *ppWlanBssList
622 );
623 
624 DWORD WINAPI WlanGetProfileCustomUserData(
625   HANDLE hClientHandle,
626   const GUID *pInterfaceGuid,
627   LPCWSTR strProfileName,
628   PVOID pReserved,
629   DWORD *pdwDataSize,
630   PBYTE *ppData
631 );
632 
633 DWORD WINAPI WlanGetSecuritySettings(
634   HANDLE hClientHandle,
635   WLAN_SECURABLE_OBJECT SecurableObject,
636   PWLAN_OPCODE_VALUE_TYPE pValueType,
637   LPWSTR *pstrCurrentSDDL,
638   PDWORD pdwGrantedAccess
639 );
640 
641 DWORD WINAPI WlanIhvControl(
642   HANDLE hClientHandle,
643   const GUID *pInterfaceGuid,
644   WLAN_IHV_CONTROL_TYPE Type,
645   DWORD dwInBufferSize,
646   PVOID pInBuffer,
647   DWORD dwOutBufferSize,
648   PVOID pOutBuffer,
649   PDWORD pdwBytesReturned
650 );
651 
652 DWORD WINAPI WlanQueryAutoConfigParameter(
653   HANDLE hClientHandle,
654   WLAN_AUTOCONF_OPCODE OpCode,
655   PVOID pReserved,
656   PDWORD pdwDataSize,
657   PVOID ppData,
658   PWLAN_OPCODE_VALUE_TYPE pWlanOpcodeValueType
659 );
660 
661 DWORD WINAPI WlanRenameProfile(
662   HANDLE hClientHandle,
663   const GUID *pInterfaceGuid,
664   LPCWSTR strOldProfileName,
665   LPCWSTR strNewProfileName,
666   PVOID pReserved
667 );
668 
669 #define WLAN_PROFILE_USER 0x00000002
670 #define WLAN_PROFILE_CONNECTION_MODE_SET_BY_CLIENT 0x00010000
671 #define WLAN_PROFILE_CONNECTION_MODE_AUTO 0x00020000
672 
673 DWORD WINAPI WlanSaveTemporaryProfile(
674   HANDLE hClientHandle,
675   const GUID *pInterfaceGuid,
676   LPCWSTR strProfileName,
677   LPCWSTR strAllUserProfileSecurity,
678   DWORD dwFlags,
679   WINBOOL bOverWrite,
680   PVOID pReserved
681 );
682 
683 DWORD WINAPI WlanScan(
684   HANDLE hClientHandle,
685   const GUID *pInterfaceGuid,
686   const PDOT11_SSID pDot11Ssid,
687   const PWLAN_RAW_DATA pIeData,
688   PVOID pReserved
689 );
690 
691 DWORD WINAPI WlanSetAutoConfigParameter(
692   HANDLE hClientHandle,
693   WLAN_AUTOCONF_OPCODE OpCode,
694   DWORD dwDataSize,
695   const PVOID pData,
696   PVOID pReserved
697 );
698 
699 DWORD WINAPI WlanSetFilterList(
700   HANDLE hClientHandle,
701   WLAN_FILTER_LIST_TYPE wlanFilterListType,
702   const PDOT11_NETWORK_LIST pNetworkList,
703   PVOID pReserved
704 );
705 
706 DWORD WINAPI WlanSetProfileCustomUserData(
707   HANDLE hClientHandle,
708   const GUID *pInterfaceGuid,
709   LPCWSTR strProfileName,
710   DWORD dwDataSize,
711   const PBYTE pData,
712   PVOID pReserved
713 );
714 
715 DWORD WlanSetProfileEapUserData(
716   HANDLE hClientHandle,
717   const GUID *pInterfaceGuid,
718   LPCWSTR strProfileName,
719   EAP_METHOD_TYPE eapType,
720   DWORD dwFlags,
721   DWORD dwEapUserDataSize,
722   const LPBYTE pbEapUserData,
723   PVOID pReserved
724 );
725 
726 DWORD WINAPI WlanSetPsdIEDataList(
727   HANDLE hClientHandle,
728   LPCWSTR strFormat,
729   const PWLAN_RAW_DATA_LIST pPsdIEDataList,
730   PVOID pReserved
731 );
732 
733 DWORD WINAPI WlanSetSecuritySettings(
734   HANDLE hClientHandle,
735   WLAN_SECURABLE_OBJECT SecurableObject,
736   LPCWSTR strModifiedSDDL
737 );
738 
739 DWORD WINAPI WlanUIEditProfile(
740   DWORD dwClientVersion,
741   LPCWSTR wstrProfileName,
742   GUID *pInterfaceGuid,
743   HWND hWnd,
744   WL_DISPLAY_PAGES wlStartPage,
745   PVOID pReserved,
746   PWLAN_REASON_CODE *pWlanReasonCode
747 );
748 
749 #ifdef __cplusplus
750 }
751 #endif
752 
753 #endif /*_INC_WLANAPI*/
754