xref: /reactos/sdk/include/psdk/wlanapi.h (revision fe93a3f9)
1 #ifndef _WLANAPI_H
2 #define _WLANAPI_H
3 
4 #include <l2cmn.h>
5 #include <windot11.h>
6 #include <eaptypes.h>
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 /* Defines */
13 #define WLAN_API_VERSION_1_0 0x00000001
14 #define WLAN_API_VERSION_2_0 0x00000002
15 
16 #define WLAN_MAX_PHY_INDEX 64
17 #define WLAN_MAX_NAME_LENGTH 256
18 
19 #define WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES         0x00000001
20 #define WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES 0x00000002
21 
22 #define WLAN_AVAILABLE_NETWORK_CONNECTED                          0x00000001
23 #define WLAN_AVAILABLE_NETWORK_HAS_PROFILE                        0x00000002
24 #define WLAN_AVAILABLE_NETWORK_CONSOLE_USER_PROFILE               0x00000004
25 #define WLAN_AVAILABLE_NETWORK_INTERWORKING_SUPPORTED             0x00000008
26 #define WLAN_AVAILABLE_NETWORK_HOTSPOT2_ENABLED                   0x00000010
27 #define WLAN_AVAILABLE_NETWORK_ANQP_SUPPORTED                     0x00000020
28 #define WLAN_AVAILABLE_NETWORK_HOTSPOT2_DOMAIN                    0x00000040
29 #define WLAN_AVAILABLE_NETWORK_HOTSPOT2_ROAMING                   0x00000080
30 #define WLAN_AVAILABLE_NETWORK_AUTO_CONNECT_FAILED                0x00000100
31 
32 /* Enumerations */
33 
34 #if defined(__midl) || defined(__WIDL__)
35 typedef [v1_enum] enum _DOT11_RADIO_STATE {
36 #else
37 typedef enum _DOT11_RADIO_STATE {
38 #endif
39     dot11_radio_state_unknown = 0,
40     dot11_radio_state_on,
41     dot11_radio_state_off
42 } DOT11_RADIO_STATE; /* HACK: WIDL is broken, *PDOT11_RADIO_STATE; */
43 
44 #if defined(__midl) || defined(__WIDL__)
45 typedef [v1_enum] enum _WLAN_OPCODE_VALUE_TYPE {
46 #else
47 typedef enum _WLAN_OPCODE_VALUE_TYPE {
48 #endif
49     wlan_opcode_value_type_query_only = 0,
50     wlan_opcode_value_type_set_by_group_policy,
51     wlan_opcode_value_type_set_by_user,
52     wlan_opcode_value_type_invalid
53 } WLAN_OPCODE_VALUE_TYPE; /* HACK: WIDL is broken    , *PWLAN_OPCODE_VALUE_TYPE; */
54 
55 typedef enum _WLAN_SECURABLE_OBJECT {
56     wlan_secure_permit_list = 0,
57     wlan_secure_deny_list,
58     wlan_secure_ac_enabled,
59     wlan_secure_bc_scan_enabled,
60     wlan_secure_bss_type,
61     wlan_secure_show_denied,
62     wlan_secure_interface_properties,
63     wlan_secure_ihv_control,
64     wlan_secure_all_user_profiles_order,
65     wlan_secure_add_new_all_user_profiles,
66     wlan_secure_add_new_per_user_profiles,
67     wlan_secure_media_streaming_mode_enabled,
68     wlan_secure_current_operation_mode,
69     WLAN_SECURABLE_OBJECT_COUNT
70 } WLAN_SECURABLE_OBJECT, *PWLAN_SECURABLE_OBJECT;
71 
72 typedef enum _WLAN_CONNECTION_MODE {
73     wlan_connection_mode_profile = 0,
74     wlan_connection_mode_temporary_profile,
75     wlan_connection_mode_discovery_secure,
76     wlan_connection_mode_discovery_unsecure,
77     wlan_connection_mode_auto,
78     wlan_connection_mode_invalid
79 } WLAN_CONNECTION_MODE, *PWLAN_CONNECTION_MODE;
80 
81 #if defined(__midl) || defined(__WIDL__)
82 typedef [v1_enum] enum _WLAN_IHV_CONTROL_TYPE {
83 #else
84 typedef enum _WLAN_IHV_CONTROL_TYPE {
85 #endif
86     wlan_ihv_control_type_service,
87     wlan_ihv_control_type_driver
88 } WLAN_IHV_CONTROL_TYPE;  /* HACK , *PWLAN_IHV_CONTROL_TYPE; */
89 
90 #if defined(__midl) || defined(__WIDL__)
91 typedef [v1_enum] enum _WLAN_INTF_OPCODE {
92 #else
93 typedef enum _WLAN_INTF_OPCODE {
94 #endif
95     wlan_intf_opcode_autoconf_start                              = 0x000000000,
96     wlan_intf_opcode_autoconf_enabled,
97     wlan_intf_opcode_background_scan_enabled,
98     wlan_intf_opcode_media_streaming_mode,
99     wlan_intf_opcode_radio_state,
100     wlan_intf_opcode_bss_type,
101     wlan_intf_opcode_interface_state,
102     wlan_intf_opcode_current_connection,
103     wlan_intf_opcode_channel_number,
104     wlan_intf_opcode_supported_infrastructure_auth_cipher_pairs,
105     wlan_intf_opcode_supported_adhoc_auth_cipher_pairs,
106     wlan_intf_opcode_supported_country_or_region_string_list,
107     wlan_intf_opcode_current_operation_mode,
108     wlan_intf_opcode_supported_safe_mode,
109     wlan_intf_opcode_certified_safe_mode,
110     wlan_intf_opcode_hosted_network_capable,
111     wlan_intf_opcode_management_frame_protection_capable,
112     wlan_intf_opcode_autoconf_end                                = 0x0fffffff,
113     wlan_intf_opcode_msm_start                                   = 0x10000100,
114     wlan_intf_opcode_statistics,
115     wlan_intf_opcode_rssi,
116     wlan_intf_opcode_msm_end                                     = 0x1fffffff,
117     wlan_intf_opcode_security_start                              = 0x20010000,
118     wlan_intf_opcode_security_end                                = 0x2fffffff,
119     wlan_intf_opcode_ihv_start                                   = 0x30000000,
120     wlan_intf_opcode_ihv_end                                     = 0x3fffffff
121 } WLAN_INTF_OPCODE; /* HACK: WIDL is broken    , *PWLAN_INTF_OPCODE; */
122 
123 #if defined(__midl) || defined(__WIDL__)
124 typedef [v1_enum] enum _WLAN_INTERFACE_STATE {
125 #else
126 typedef enum _WLAN_INTERFACE_STATE {
127 #endif
128     wlan_interface_state_not_ready = 0,
129     wlan_interface_state_connected,
130     wlan_interface_state_ad_hoc_network_formed,
131     wlan_interface_state_disconnecting,
132     wlan_interface_state_disconnected,
133     wlan_interface_state_associating,
134     wlan_interface_state_discovering,
135     wlan_interface_state_authenticating
136 } WLAN_INTERFACE_STATE;
137 
138 typedef enum _WLAN_INTERFACE_TYPE {
139     wlan_interface_type_emulated_802_11 = 0,
140     wlan_interface_type_native_802_11,
141     wlan_interface_type_invalid
142 } WLAN_INTERFACE_TYPE, *PWLAN_INTERFACE_TYPE;
143 
144 /* Types */
145 typedef DWORD WLAN_REASON_CODE, *PWLAN_REASON_CODE;
146 typedef ULONG WLAN_SIGNAL_QUALITY, *PWLAN_SIGNAL_QUALITY;
147 
148 typedef struct _DOT11_NETWORK {
149     DOT11_SSID dot11Ssid;
150     DOT11_BSS_TYPE dot11BssType;
151 } DOT11_NETWORK, *PDOT11_NETWORK;
152 
153 typedef struct _DOT11_NETWORK_LIST {
154     DWORD dwNumberOfItems;
155     DWORD dwIndex;
156 #if defined(__midl) || defined(__WIDL__)
157     [size_is(dwNumberOfItems)] DOT11_NETWORK Network[];
158 #else
159     DOT11_NETWORK Network[1];
160 #endif
161 } DOT11_NETWORK_LIST, *PDOT11_NETWORK_LIST;
162 
163 typedef struct _WLAN_INTERFACE_INFO {
164     GUID InterfaceGuid;
165     WCHAR strInterfaceDescription[256];
166     WLAN_INTERFACE_STATE isState;
167 } WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO;
168 
169 typedef struct _WLAN_INTERFACE_INFO_LIST {
170     DWORD dwNumberOfItems;
171     DWORD dwIndex;
172 #if defined(__midl) || defined(__WIDL__)
173     [unique, size_is(dwNumberOfItems)] WLAN_INTERFACE_INFO InterfaceInfo[*];
174 #else
175     WLAN_INTERFACE_INFO InterfaceInfo[1];
176 #endif
177 } WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST;
178 
179 typedef struct _WLAN_INTERFACE_CAPABILITY {
180     WLAN_INTERFACE_TYPE interfaceType;
181     BOOL bDot11DSupported;
182     DWORD dwMaxDesiredSsidListSize;
183     DWORD dwMaxDesiredBssidListSize;
184     DWORD dwNumberOfSupportedPhys;
185     /* enum32 */ long dot11PhyTypes[WLAN_MAX_PHY_INDEX];
186 } WLAN_INTERFACE_CAPABILITY, *PWLAN_INTERFACE_CAPABILITY;
187 
188 typedef struct _WLAN_PHY_RADIO_STATE {
189     DWORD dwPhyIndex;
190     DOT11_RADIO_STATE dot11SoftwareRadioState;
191     DOT11_RADIO_STATE dot11HardwareRadioState;
192 } WLAN_PHY_RADIO_STATE, *PWLAN_PHY_RADIO_STATE;
193 
194 typedef struct _WLAN_RADIO_STATE {
195     DWORD dwNumberOfPhys;
196     WLAN_PHY_RADIO_STATE PhyRadioState[WLAN_MAX_PHY_INDEX];
197 } WLAN_RADIO_STATE, *PWLAN_RADIO_STATE;
198 
199 typedef struct _WLAN_RAW_DATA {
200     DWORD dwDataSize;
201 #if defined(__midl) || defined(__WIDL__)
202     [size_is(dwDataSize)] BYTE DataBlob[];
203 #else
204     BYTE DataBlob[1];
205 #endif
206 } WLAN_RAW_DATA, *PWLAN_RAW_DATA;
207 
208 typedef struct _WLAN_PROFILE_INFO {
209     WCHAR strProfileName[256];
210     DWORD dwFlags;
211 } WLAN_PROFILE_INFO, *PWLAN_PROFILE_INFO;
212 
213 typedef struct _WLAN_PROFILE_INFO_LIST {
214     DWORD dwNumberOfItems;
215     DWORD dwIndex;
216 #if defined(__midl) || defined(__WIDL__)
217     [size_is(dwNumberOfItems)] WLAN_PROFILE_INFO ProfileInfo[];
218 #else
219     WLAN_PROFILE_INFO ProfileInfo[1];
220 #endif
221 } WLAN_PROFILE_INFO_LIST, *PWLAN_PROFILE_INFO_LIST;
222 
223 typedef struct _WLAN_AVAILABLE_NETWORK {
224     WCHAR strProfileName[WLAN_MAX_NAME_LENGTH];
225     DOT11_SSID dot11Ssid;
226     DOT11_BSS_TYPE dot11BssType;
227     ULONG uNumberOfBssids;
228     BOOL bNetworkConnectable;
229     WLAN_REASON_CODE wlanNotConnectableReason;
230     ULONG uNumberOfPhyTypes;
231     DOT11_PHY_TYPE dot11PhyTypes[8];
232     BOOL bMorePhyTypes;
233     WLAN_SIGNAL_QUALITY wlanSignalQuality;
234     BOOL bSecurityEnabled;
235     DOT11_AUTH_ALGORITHM dot11DefaultAuthAlgorithm;
236     DOT11_CIPHER_ALGORITHM dot11DefaultCipherAlgorithm;
237     DWORD dwFlags;
238     DWORD dwReserved;
239 } WLAN_AVAILABLE_NETWORK, *PWLAN_AVAILABLE_NETWORK;
240 
241 typedef struct _WLAN_AVAILABLE_NETWORK_LIST {
242     DWORD dwNumberOfItems;
243     DWORD dwIndex;
244 #if defined(__midl) || defined(__WIDL__)
245     [size_is(dwNumberOfItems)] WLAN_AVAILABLE_NETWORK Network[*];
246 #else
247     WLAN_AVAILABLE_NETWORK Network[1];
248 #endif
249 } WLAN_AVAILABLE_NETWORK_LIST ,*PWLAN_AVAILABLE_NETWORK_LIST;
250 
251 typedef struct _WLAN_CONNECTION_PARAMETERS {
252     WLAN_CONNECTION_MODE wlanConnectionMode;
253 #if defined(__midl) || defined(__WIDL__)
254     [string] LPCWSTR strProfile;
255 #else
256     LPCWSTR strProfile;
257 #endif
258     PDOT11_SSID pDot11Ssid;
259     PDOT11_BSSID_LIST pDesiredBssidList;
260     DOT11_BSS_TYPE dot11BssType;
261     DWORD dwFlags;
262 } WLAN_CONNECTION_PARAMETERS, *PWLAN_CONNECTION_PARAMETERS;
263 
264 typedef L2_NOTIFICATION_DATA WLAN_NOTIFICATION_DATA, *PWLAN_NOTIFICATION_DATA;
265 
266 typedef void (__stdcall *WLAN_NOTIFICATION_CALLBACK) (PWLAN_NOTIFICATION_DATA, PVOID);
267 
268 /* Functions */
269 #if !defined(__midl) && !defined(__WIDL__)
270 PVOID WINAPI WlanAllocateMemory(DWORD dwSize);
271 VOID WINAPI WlanFreeMemory(PVOID pMemory);
272 DWORD WINAPI WlanOpenHandle(IN DWORD dwClientVersion, PVOID pReserved, OUT DWORD *pdwNegotiatedVersion, OUT HANDLE *phClientHandle);
273 DWORD WINAPI WlanCloseHandle(IN HANDLE hClientHandle, PVOID pReserved);
274 DWORD WINAPI WlanConnect(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN const PWLAN_CONNECTION_PARAMETERS pConnectionParameters, PVOID pReserved);
275 DWORD WINAPI WlanDisconnect(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, PVOID pReserved);
276 DWORD WINAPI WlanEnumInterfaces(IN HANDLE hClientHandle, PVOID pReserved, OUT PWLAN_INTERFACE_INFO_LIST *ppInterfaceList);
277 DWORD WINAPI WlanGetAvailableNetworkList(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN DWORD dwFlags, PVOID pReserved, OUT PWLAN_AVAILABLE_NETWORK_LIST *ppAvailableNetworkList);
278 DWORD WINAPI WlanGetInterfaceCapability(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, PVOID pReserved, OUT PWLAN_INTERFACE_CAPABILITY *ppCapability);
279 DWORD WINAPI WlanDeleteProfile(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN LPCWSTR strProfileName, PVOID pReserved);
280 DWORD WINAPI WlanGetProfile(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN LPCWSTR strProfileName, PVOID pReserved, OUT LPWSTR *pstrProfileXml, DWORD *pdwFlags, PDWORD pdwGrantedAccess);
281 DWORD WINAPI WlanGetProfileCustomUserData(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN LPCWSTR strProfileName, PVOID pReserved, OUT DWORD *pdwDataSize, OUT PBYTE *ppData);
282 DWORD WINAPI WlanGetProfileList(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, PVOID pReserved, OUT PWLAN_PROFILE_INFO_LIST *ppProfileList);
283 DWORD WINAPI WlanIhvControl(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN WLAN_IHV_CONTROL_TYPE Type, IN DWORD dwInBufferSize, IN PVOID pInBuffer, IN DWORD dwOutBufferSize, PVOID pOutBuffer, OUT PDWORD pdwBytesReturned);
284 DWORD WINAPI WlanQueryInterface(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN WLAN_INTF_OPCODE OpCode, PVOID pReserved, OUT PDWORD pdwDataSize, OUT PVOID *ppData, WLAN_OPCODE_VALUE_TYPE *pWlanOpcodeValueType);
285 DWORD WINAPI WlanReasonCodeToString(IN DWORD dwReasonCode, IN DWORD dwBufferSize, IN PWCHAR pStringBuffer, PVOID pReserved);
286 DWORD WINAPI WlanRegisterNotification(IN HANDLE hClientHandle,IN DWORD dwNotifSource, IN BOOL bIgnoreDuplicate, WLAN_NOTIFICATION_CALLBACK funcCallback, PVOID pCallbackContext, PVOID pReserved, PDWORD pdwPrevNotifSource);
287 DWORD WINAPI WlanRenameProfile(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN LPCWSTR strOldProfileName, IN LPCWSTR strNewProfileName, PVOID pReserved);
288 DWORD WINAPI WlanSetProfile(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN DWORD dwFlags, IN LPCWSTR strProfileXml, LPCWSTR strAllUserProfileSecurity, IN BOOL bOverwrite, PVOID pReserved, OUT DWORD *pdwReasonCode);
289 DWORD WINAPI WlanSetProfileCustomUserData(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN LPCWSTR strProfileName, IN DWORD dwDataSize, IN const PBYTE pData, PVOID pReserved);
290 DWORD WINAPI WlanSetProfileEapUserData(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN LPCWSTR strProfileName, IN EAP_METHOD_TYPE eapType, IN DWORD dwFlags, IN DWORD dwEapUserDataSize, IN const LPBYTE pbEapUserData, PVOID pReserved);
291 DWORD WINAPI WlanSetProfileList(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, DWORD dwItems, IN LPCWSTR *strProfileNames, PVOID pReserved);
292 DWORD WINAPI WlanSetSecuritySettings(IN HANDLE hClientHandle, IN WLAN_SECURABLE_OBJECT SecurableObject, IN LPCWSTR strModifiedSDDL);
293 DWORD WINAPI WlanScan(IN HANDLE hClientHandle, IN const GUID *pInterfaceGuid, IN PDOT11_SSID pDot11Ssid, IN PWLAN_RAW_DATA pIeData, PVOID pReserved);
294 #endif
295 
296 #ifdef __cplusplus
297 }
298 #endif
299 
300 
301 #endif  // _WLANAPI_H
302