From ac339a3f3ab55ab79f41e1716c2a55bd833b7220 Mon Sep 17 00:00:00 2001
From: yuhaidong <yuhaidong@uniontech.com>
Date: Thu, 15 Oct 2020 20:32:59 +0800
Subject: [PATCH] wlanapi:Add a few more stubs.

Signed-off-by: yuhaidong <yuhaidong@uniontech.com>
---
 dlls/wlanapi/main.c       | 218 ++++++++++++++++++++++++++++++++++++++
 dlls/wlanapi/wlanapi.spec |  54 +++++-----
 include/wlanapi.h         | 187 ++++++++++++++++++++++++++++++++
 3 files changed, 432 insertions(+), 27 deletions(-)

diff --git a/dlls/wlanapi/main.c b/dlls/wlanapi/main.c
index cfffeedb11..6bacba5b91 100644
--- a/dlls/wlanapi/main.c
+++ b/dlls/wlanapi/main.c
@@ -172,6 +172,224 @@ DWORD WINAPI WlanQueryInterface(HANDLE handle, const GUID *guid, WLAN_INTF_OPCOD
 
     return ERROR_CALL_NOT_IMPLEMENTED;
 }
+
+DWORD WINAPI WlanConnect(HANDLE handle, const GUID *guid, const WLAN_CONNECTION_PARAMETERS *parameters, void *reserved)
+{
+    FIXME("(%p, %s, %p, %p) stub\n", handle, wine_dbgstr_guid(guid), parameters, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanDeleteProfile(HANDLE handle, const GUID *guid, LPCWSTR profile, void *reserved)
+{
+    FIXME("(%p, %s, %p, %p) stub\n", handle, wine_dbgstr_guid(guid), debugstr_w(profile), reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanDisconnect(HANDLE handle, const GUID *guid, void *reserved)
+{
+    FIXME("(%p, %s, %p) stub\n", handle, wine_dbgstr_guid(guid), reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanExtractPsdIEDataList(HANDLE handle, DWORD size, const BYTE *raw_data, LPCWSTR format,
+                                      void *reserved, WLAN_RAW_DATA_LIST **data_list)
+{
+    FIXME("(%p, %d, %p, %s, %p, %p) stub\n", handle, size, raw_data, format, reserved, data_list);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanGetFilterList(HANDLE handle, WLAN_FILTER_LIST_TYPE filter_list_type, void *reserved,
+                               DOT11_NETWORK_LIST **network)
+{
+    FIXME("(%p, %d, %p, %p) stub\n", handle, filter_list_type, reserved, network);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanGetInterfaceCapability(HANDLE handle, const GUID *guid, void *reserved,
+                                        WLAN_INTERFACE_CAPABILITY **capability)
+{
+    FIXME("(%p, %s, %p, %p) stub\n", handle, wine_dbgstr_guid(guid), reserved, capability);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanGetProfile(HANDLE handle, const GUID *guid, LPCWSTR profile, void *reserved, LPWSTR *profile_xml,
+                            DWORD *flags, DWORD *granted_access)
+{
+    FIXME("(%p, %s, %s, %p, %s, %p, %p) stub\n", handle, wine_dbgstr_guid(guid), debugstr_w(profile),
+          reserved, debugstr_w(*profile_xml), flags, granted_access);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanGetProfileCustomUserData(HANDLE handle, const GUID *guid, LPCWSTR profile, void *reserved,
+                                          DWORD *size, BYTE **data)
+{
+    FIXME("(%p, %s, %s, %p, %p, %p) stub\n",
+          handle, wine_dbgstr_guid(guid), debugstr_w(profile), reserved, size, data);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanGetProfileList(HANDLE handle, const GUID *guid, void *reserved, WLAN_PROFILE_INFO_LIST **profile_list)
+{
+    FIXME("(%p, %s, %s, %p, %p, %p) stub\n", handle, wine_dbgstr_guid(guid), reserved, profile_list);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanGetSecuritySettings(HANDLE handle, WLAN_SECURABLE_OBJECT securable_object, WLAN_OPCODE_VALUE_TYPE *type,
+                                     LPWSTR *current_sddl, DWORD *granted_access)
+{
+    FIXME("(%p, %d, %p, %s, %p) stub\n", handle, securable_object, type, current_sddl, granted_access);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanIhvControl(HANDLE handle, const GUID *guid, WLAN_IHV_CONTROL_TYPE Type, DWORD in_buffer_size,
+                            void *in_buffer, DWORD out_buffer_size, void *out_buffer, DWORD *ret_bytes)
+{
+    FIXME("(%p, %s, %d, %d, %p, %d, %p, %p) stub\n",
+          handle, wine_dbgstr_guid(guid), Type, in_buffer_size, in_buffer, out_buffer_size, out_buffer, ret_bytes);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanQueryAutoConfigParameter(HANDLE handle, WLAN_AUTOCONF_OPCODE op_code, void *reserved, DWORD *size,
+                                          void **data, WLAN_OPCODE_VALUE_TYPE *type)
+{
+    FIXME("(%p, %d, %p, %p, %p, %p) stub\n", handle, op_code, reserved, size, data, type);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanReasonCodeToString(DWORD reason_code, DWORD size, WCHAR *buffer, void *reserved)
+{
+    FIXME("(%p, %d, %p, %p, %p, %p) stub\n",
+          reason_code, size, buffer, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanRenameProfile(HANDLE handle, const GUID *guid, LPCWSTR old_profile, LPCWSTR new_profile, void *reserved)
+{
+    FIXME("(%p, %s, %s, %s, %p) stub\n",
+          handle, wine_dbgstr_guid(guid), debugstr_w(old_profile), debugstr_w(new_profile), reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSaveTemporaryProfile(HANDLE handle, const GUID *guid, LPCWSTR profile, LPCWSTR profile_security,
+                                      DWORD flags, BOOL over_write, void *reserved)
+{
+    FIXME("(%p, %s, %s, %s, %d, %d, %p) stub\n", handle, wine_dbgstr_guid(guid), debugstr_w(profile),
+          debugstr_w(profile_security), flags, over_write, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetAutoConfigParameter(HANDLE handle, WLAN_AUTOCONF_OPCODE op_code, DWORD size,
+                                        const void *data, void *reserved)
+{
+    FIXME("(%p, %d, %d, %p, %p) stub\n", handle, op_code, size, data, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetFilterList(HANDLE handle, WLAN_FILTER_LIST_TYPE filter_list_type,
+                               const DOT11_NETWORK_LIST *network, void *reserved)
+{
+    FIXME("(%p, %d, %p, %p) stub\n", handle, filter_list_type, network, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetInterface(HANDLE handle, const GUID *guid, WLAN_INTF_OPCODE op_code, DWORD size,
+                              const void *data, void *reserved)
+{
+    FIXME("(%p, %s, %d, %d, %p, %p) stub\n", handle, wine_dbgstr_guid(guid), op_code, size, data, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetProfile(HANDLE handle, const GUID *guid, DWORD flags, LPCWSTR profile_xml,
+                            LPCWSTR profile_security, BOOL overwrite, void *reserved, DWORD *reason)
+{
+    FIXME("(%p, %s, %d, %s, %s, %d, %p, %p) stub\n", handle, wine_dbgstr_guid(guid), flags,
+          debugstr_w(profile_xml), debugstr_w(profile_security), overwrite, reserved, reason);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetProfileCustomUserData(HANDLE handle, const GUID *guid, LPCWSTR profile, DWORD size,
+                                          const BYTE *data, void *reserved)
+{
+    FIXME("(%p, %s, %s, %d, %p, %p) stub\n",
+          handle, wine_dbgstr_guid(guid), debugstr_w(profile), size, data, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetProfileEapUserData(HANDLE handle, const GUID *guid, LPCWSTR profile, EAP_METHOD_TYPE eapType,
+                                       DWORD flags, DWORD eap_data_size, const LPBYTE eap_data, void *reserved)
+{
+    FIXME("(%p, %s, %s, %d, %d, %d, %p, %p) stub\n",
+          handle, wine_dbgstr_guid(guid), debugstr_w(profile), eapType, flags, eap_data_size, eap_data, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetProfileEapXmlUserData(HANDLE handle, const GUID *guid, LPCWSTR profile, DWORD flags,
+                                          LPCWSTR data, void *reserved)
+{
+    FIXME("(%p, %s, %s, %d, %p, %p) stub\n",
+          handle, wine_dbgstr_guid(guid), debugstr_w(profile), flags, data, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetProfileList(HANDLE handle, const GUID *guid, DWORD items, LPCWSTR *profile, void *reserved)
+{
+    FIXME("(%p, %s, %d, %s, %p) stub\n", handle, wine_dbgstr_guid(guid), items, debugstr_w(*profile), reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetProfilePosition(HANDLE handle, const GUID *guid, LPCWSTR profile, DWORD position, void *reserved)
+{
+    FIXME("(%p, %s, %s, %d, %p) stub\n", handle, wine_dbgstr_guid(guid), debugstr_w(profile), position, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetPsdIEDataList(HANDLE handle, LPCWSTR format, const WLAN_RAW_DATA_LIST *psd_data, void *reserved)
+{
+    FIXME("(%p, %s, %p, %p) stub\n", handle, debugstr_w(format), psd_data, reserved);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanSetSecuritySettings(HANDLE handle, WLAN_SECURABLE_OBJECT securable_object, LPCWSTR modified_sddl)
+{
+    FIXME("(%p, %d, %s) stub\n", handle, securable_object, debugstr_w(modified_sddl));
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI WlanGetNetworkBssList(HANDLE handle, const GUID *guid, const DOT11_SSID *ssid, DOT11_BSS_TYPE bss_type,
+                                   BOOL security, void *reserved, PWLAN_BSS_LIST *bss_list)
+{
+    FIXME("(%p, %s, %p, %d, %d, %p, %p) stub\n",
+          handle, wine_dbgstr_guid(guid), ssid, bss_type, security, reserved, bss_list);
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
 void WINAPI WlanFreeMemory(void *ptr)
 {
     TRACE("(%p)\n", ptr);
diff --git a/dlls/wlanapi/wlanapi.spec b/dlls/wlanapi/wlanapi.spec
index 1c21ab5a2e..f770658e2e 100644
--- a/dlls/wlanapi/wlanapi.spec
+++ b/dlls/wlanapi/wlanapi.spec
@@ -1,36 +1,36 @@
 @ stdcall WlanAllocateMemory(long)
 @ stdcall WlanCloseHandle(ptr ptr)
-@ stub WlanConnect
-@ stub WlanDeleteProfile
-@ stub WlanDisconnect
+@ stdcall WlanConnect(ptr ptr ptr ptr)
+@ stdcall WlanDeleteProfile(ptr ptr ptr ptr)
+@ stdcall WlanDisconnect(ptr ptr ptr)
 @ stdcall WlanEnumInterfaces(long ptr ptr)
-@ stub WlanExtractPsdIEDataList
+@ stdcall WlanExtractPsdIEDataList(ptr long ptr ptr ptr ptr)
 @ stdcall WlanFreeMemory(ptr)
 @ stdcall WlanGetAvailableNetworkList(ptr ptr long ptr ptr)
-@ stub WlanGetFilterList
-@ stub WlanGetInterfaceCapability
-@ stub WlanGetNetworkBssList
-@ stub WlanGetProfile
-@ stub WlanGetProfileCustomUserData
-@ stub WlanGetProfileList
-@ stub WlanGetSecuritySettings
-@ stub WlanIhvControl
+@ stdcall WlanGetFilterList(ptr long ptr ptr)
+@ stdcall WlanGetInterfaceCapability(ptr ptr ptr ptr)
+@ stdcall WlanGetNetworkBssList(ptr ptr ptr long long ptr ptr)
+@ stdcall WlanGetProfile(ptr ptr ptr ptr ptr ptr ptr)
+@ stdcall WlanGetProfileCustomUserData(ptr ptr ptr ptr ptr ptr)
+@ stdcall WlanGetProfileList(ptr ptr ptr ptr)
+@ stdcall WlanGetSecuritySettings(ptr long ptr ptr ptr)
+@ stdcall WlanIhvControl(ptr ptr long long ptr long ptr ptr)
 @ stdcall WlanOpenHandle(long ptr ptr ptr)
-@ stub WlanQueryAutoConfigParameter
+@ stdcall WlanQueryAutoConfigParameter(ptr long ptr ptr ptr ptr)
 @ stdcall WlanQueryInterface(ptr ptr long ptr ptr ptr ptr)
-@ stub WlanReasonCodeToString
+@ stdcall WlanReasonCodeToString(long long ptr ptr)
 @ stdcall WlanRegisterNotification(ptr long long ptr ptr ptr ptr)
-@ stub WlanRenameProfile
-@ stub WlanSaveTemporaryProfile
+@ stdcall WlanRenameProfile(ptr ptr ptr ptr ptr)
+@ stdcall WlanSaveTemporaryProfile(ptr ptr ptr ptr long long ptr)
 @ stdcall WlanScan(ptr ptr ptr ptr ptr)
-@ stub WlanSetAutoConfigParameter
-@ stub WlanSetFilterList
-@ stub WlanSetInterface
-@ stub WlanSetProfile
-@ stub WlanSetProfileCustomUserData
-@ stub WlanSetProfileEapUserData
-@ stub WlanSetProfileEapXmlUserData
-@ stub WlanSetProfileList
-@ stub WlanSetProfilePosition
-@ stub WlanSetPsdIEDataList
-@ stub WlanSetSecuritySettings
+@ stdcall WlanSetAutoConfigParameter(ptr long long ptr ptr)
+@ stdcall WlanSetFilterList(ptr long ptr ptr)
+@ stdcall WlanSetInterface(ptr ptr long long ptr ptr)
+@ stdcall WlanSetProfile(ptr ptr long ptr ptr long ptr ptr)
+@ stdcall WlanSetProfileCustomUserData(ptr ptr ptr long ptr ptr)
+@ stdcall WlanSetProfileEapUserData(ptr ptr ptr long long long long long long ptr ptr)
+@ stdcall WlanSetProfileEapXmlUserData(ptr ptr ptr long ptr ptr)
+@ stdcall WlanSetProfileList(ptr ptr long ptr ptr)
+@ stdcall WlanSetProfilePosition(ptr ptr ptr long ptr)
+@ stdcall WlanSetPsdIEDataList(ptr ptr ptr ptr)
+@ stdcall WlanSetSecuritySettings(ptr long ptr)
diff --git a/include/wlanapi.h b/include/wlanapi.h
index a3288d7778..8ecedfdad1 100644
--- a/include/wlanapi.h
+++ b/include/wlanapi.h
@@ -187,6 +187,193 @@ typedef struct _WLAN_AVAILABLE_NETWORK_LIST
     WLAN_AVAILABLE_NETWORK Network[1];
 } WLAN_AVAILABLE_NETWORK_LIST, *PWLAN_AVAILABLE_NETWORK_LIST;
 
+typedef enum _WLAN_FILTER_LIST_TYPE
+{
+    wlan_filter_list_type_gp_permit,
+    wlan_filter_list_type_gp_deny,
+    wlan_filter_list_type_user_permit,
+    wlan_filter_list_type_user_deny
+} WLAN_FILTER_LIST_TYPE, *PWLAN_FILTER_LIST_TYPE;
+
+typedef enum _WLAN_IHV_CONTROL_TYPE
+{
+    wlan_ihv_control_type_service,
+    wlan_ihv_control_type_driver
+} WLAN_IHV_CONTROL_TYPE, *PWLAN_IHV_CONTROL_TYPE;
+
+typedef enum _WLAN_CONNECTION_MODE
+{
+    wlan_connection_mode_profile,
+    wlan_connection_mode_temporary_profile,
+    wlan_connection_mode_discovery_secure,
+    wlan_connection_mode_discovery_unsecure,
+    wlan_connection_mode_auto,
+    wlan_connection_mode_invalid
+} WLAN_CONNECTION_MODE, *PWLAN_CONNECTION_MODE;
+
+typedef enum _WLAN_SECURABLE_OBJECT
+{
+    wlan_secure_permit_list,
+    wlan_secure_deny_list,
+    wlan_secure_ac_enabled,
+    wlan_secure_bc_scan_enabled,
+    wlan_secure_bss_type,
+    wlan_secure_show_denied,
+    wlan_secure_interface_properties,
+    wlan_secure_ihv_control,
+    wlan_secure_all_user_profiles_order,
+    wlan_secure_add_new_all_user_profiles,
+    wlan_secure_add_new_per_user_profiles,
+    wlan_secure_media_streaming_mode_enabled,
+    wlan_secure_current_operation_mode,
+    wlan_secure_get_plaintext_key,
+    wlan_secure_hosted_network_elevated_access,
+    wlan_secure_virtual_station_extensibility,
+    wlan_secure_wfd_elevated_access,
+    WLAN_SECURABLE_OBJECT_COUNT
+} WLAN_SECURABLE_OBJECT, *PWLAN_SECURABLE_OBJECT;
+
+typedef enum _WLAN_AUTOCONF_OPCODE
+{
+    wlan_autoconf_opcode_start,
+    wlan_autoconf_opcode_show_denied_networks,
+    wlan_autoconf_opcode_power_setting,
+    wlan_autoconf_opcode_only_use_gp_profiles_for_allowed_networks,
+    wlan_autoconf_opcode_allow_explicit_creds,
+    wlan_autoconf_opcode_block_period,
+    wlan_autoconf_opcode_allow_virtual_station_extensibility,
+    wlan_autoconf_opcode_end
+} WLAN_AUTOCONF_OPCODE, *PWLAN_AUTOCONF_OPCODE;
+
+typedef struct _EAP_TYPE
+{
+    BYTE type;
+    DWORD dwVendorId;
+    DWORD dwVendorType;
+} EAP_TYPE;
+
+typedef struct _EAP_METHOD_TYPE
+{
+    EAP_TYPE eapType;
+    DWORD dwAuthorId;
+} EAP_METHOD_TYPE;
+
+typedef struct _NDIS_OBJECT_HEADER
+{
+    UCHAR Type;
+    UCHAR Revision;
+    USHORT Size;
+} NDIS_OBJECT_HEADER, *PNDIS_OBJECT_HEADER;
+
+typedef UCHAR DOT11_MAC_ADDRESS[6];
+typedef struct _DOT11_BSSID_LIST
+{
+    NDIS_OBJECT_HEADER Header;
+    ULONG uNumOfEntries;
+    ULONG uTotalNumOfEntries;
+    DOT11_MAC_ADDRESS BSSIDs[1];
+} DOT11_BSSID_LIST, *PDOT11_BSSID_LIST;
+
+typedef struct _WLAN_CONNECTION_PARAMETERS
+{
+    WLAN_CONNECTION_MODE wlanConnectionMode;
+    LPCWSTR strProfile;
+    DOT11_SSID *pDot11Ssid;
+    DOT11_BSSID_LIST *pDesiredBssidList;
+    DOT11_BSS_TYPE dot11BssType;
+    DWORD dwFlags;
+} WLAN_CONNECTION_PARAMETERS, *PWLAN_CONNECTION_PARAMETERS;
+
+typedef struct _WLAN_RAW_DATA_LIST
+{
+    DWORD dwTotalSize;
+    DWORD dwNumberOfItems;
+    struct
+    {
+        DWORD dwDataOffset;
+        DWORD dwDataSize;
+    } DataList[1];
+} WLAN_RAW_DATA_LIST, *PWLAN_RAW_DATA_LIST;
+
+typedef enum _WLAN_INTERFACE_TYPE
+{
+    wlan_interface_type_emulated_802_11,
+    wlan_interface_type_native_802_11,
+    wlan_interface_type_invalid
+} WLAN_INTERFACE_TYPE, *PWLAN_INTERFACE_TYPE;
+
+#define WLAN_MAX_PHY_INDEX 64
+typedef struct _WLAN_INTERFACE_CAPABILITY
+{
+    WLAN_INTERFACE_TYPE interfaceType;
+    BOOL bDot11DSupported;
+    DWORD dwMaxDesiredSsidListSize;
+    DWORD dwMaxDesiredBssidListSize;
+    DWORD dwNumberOfSupportedPhys;
+    DOT11_PHY_TYPE dot11PhyTypes[WLAN_MAX_PHY_INDEX];
+} WLAN_INTERFACE_CAPABILITY, *PWLAN_INTERFACE_CAPABILITY;
+
+#define WLAN_MAX_NAME_LENGTH 256
+typedef struct _WLAN_PROFILE_INFO
+{
+    WCHAR strProfileName[WLAN_MAX_NAME_LENGTH];
+    DWORD dwFlags;
+} WLAN_PROFILE_INFO, *PWLAN_PROFILE_INFO;
+
+typedef struct _WLAN_PROFILE_INFO_LIST
+{
+    DWORD dwNumberOfItems;
+    DWORD dwIndex;
+    WLAN_PROFILE_INFO ProfileInfo[1];
+} WLAN_PROFILE_INFO_LIST, *PWLAN_PROFILE_INFO_LIST;
+
+typedef struct _DOT11_NETWORK
+{
+    DOT11_SSID dot11Ssid;
+    DOT11_BSS_TYPE dot11BssType;
+} DOT11_NETWORK, *PDOT11_NETWORK;
+
+typedef struct _DOT11_NETWORK_LIST
+{
+    DWORD dwNumberOfItems;
+    DWORD dwIndex;
+    DOT11_NETWORK Network[1];
+} DOT11_NETWORK_LIST, *PDOT11_NETWORK_LIST;
+
+#define DOT11_RATE_SET_MAX_LENGTH 126
+typedef struct _WLAN_RATE_SET
+{
+    ULONG uRateSetLength;
+    USHORT usRateSet[DOT11_RATE_SET_MAX_LENGTH];
+} WLAN_RATE_SET, *PWLAN_RATE_SET;
+
+typedef struct _WLAN_BSS_ENTRY
+{
+    DOT11_SSID dot11Ssid;
+    ULONG uPhyId;
+    DOT11_MAC_ADDRESS dot11Bssid;
+    DOT11_BSS_TYPE dot11BssType;
+    DOT11_PHY_TYPE dot11BssPhyType;
+    LONG lRssi;
+    ULONG uLinkQuality;
+    BOOLEAN bInRegDomain;
+    USHORT usBeaconPeriod;
+    ULONGLONG ullTimestamp;
+    ULONGLONG ullHostTimestamp;
+    USHORT usCapabilityInformation;
+    ULONG ulChCenterFrequency;
+    WLAN_RATE_SET wlanRateSet;
+    ULONG ulIeOffset;
+    ULONG ulIeSize;
+} WLAN_BSS_ENTRY, *PWLAN_BSS_ENTRY;
+
+typedef struct _WLAN_BSS_LIST
+{
+    DWORD dwTotalSize;
+    DWORD dwNumberOfItems;
+    WLAN_BSS_ENTRY wlanBssEntries[1];
+} WLAN_BSS_LIST, *PWLAN_BSS_LIST;
+
 DWORD WINAPI WlanCloseHandle(HANDLE, void *);
 DWORD WINAPI WlanEnumInterfaces(HANDLE, void *, WLAN_INTERFACE_INFO_LIST **);
 DWORD WINAPI WlanOpenHandle(DWORD, void *, DWORD *, HANDLE *);
-- 
2.20.1

