/*++ Copyright (c) 2005 Microsoft Corporation Module Name: wlanihv.h Abstract: Definition of public APIs for WLAN Extensibility Framework. --*/ #ifndef __WLAN_IHV_H__ #define __WLAN_IHV_H__ #pragma once #include #include #include #include #include // Forward declaration for the // API structure to be exchanged // during IHV DLL initialization. typedef struct _DOT11EXT_APIS DOT11EXT_APIS, *PDOT11EXT_APIS; // Forward declaration for the // handler structure to be exchanged // during IHV DLL initialization. typedef struct _DOT11EXT_IHV_HANDLERS DOT11EXT_IHV_HANDLERS, *PDOT11EXT_IHV_HANDLERS; // Forward declaration for the // API set for controlling virtual station. typedef struct _DOT11EXT_VIRTUAL_STATION_APIS DOT11EXT_VIRTUAL_STATION_APIS, *PDOT11EXT_VIRTUAL_STATION_APIS; // Version exchange between // extensibility framework // and IHV DLL. typedef struct _DOT11_IHV_VERSION_INFO { DWORD dwVerMin; DWORD dwVerMax; } DOT11_IHV_VERSION_INFO, *PDOT11_IHV_VERSION_INFO; // connection phase to decide // appropriate UI request. typedef enum _DOT11EXT_IHV_CONNECTION_PHASE { connection_phase_any, connection_phase_initial_connection, connection_phase_post_l3_connection } DOT11EXT_IHV_CONNECTION_PHASE, *PDOT11EXT_IHV_CONNECTION_PHASE; // Information to build the UI Request information. typedef struct _DOT11EXT_IHV_UI_REQUEST { DWORD dwSessionId; GUID guidUIRequest; CLSID UIPageClsid; DWORD dwByteCount; #ifdef __midl [size_is(dwByteCount)] #endif __field_ecount(dwByteCount) BYTE* pvUIRequest; } DOT11EXT_IHV_UI_REQUEST, *PDOT11EXT_IHV_UI_REQUEST; // Structures to support MS 802.1X extensibility typedef enum _DOT11_MSONEX_RESULT { DOT11_MSONEX_SUCCESS, DOT11_MSONEX_FAILURE, DOT11_MSONEX_IN_PROGRESS } DOT11_MSONEX_RESULT, *PDOT11_MSONEX_RESULT; typedef struct _DOT11_EAP_RESULT { UINT32 dwFailureReasonCode; EAP_ATTRIBUTES* pAttribArray; } DOT11_EAP_RESULT, *PDOT11_EAP_RESULT; typedef struct _DOT11_MSONEX_RESULT_PARAMS { ONEX_AUTH_STATUS Dot11OnexAuthStatus; ONEX_REASON_CODE Dot11OneXReasonCode; #ifdef __midl [size_is(dwMPPESendKeyLen)] #endif __field_ecount(dwMPPESendKeyLen) PBYTE pbMPPESendKey; DWORD dwMPPESendKeyLen; #ifdef __midl [size_is(dwMPPERecvKeyLen)] #endif __field_ecount(dwMPPERecvKeyLen) PBYTE pbMPPERecvKey; DWORD dwMPPERecvKeyLen; PDOT11_EAP_RESULT pDot11EapResult; } DOT11_MSONEX_RESULT_PARAMS, *PDOT11_MSONEX_RESULT_PARAMS; // Structures to define Ihv profiles. typedef struct _DOT11EXT_IHV_CONNECTIVITY_PROFILE { #ifdef __midl [string] #endif LPWSTR pszXmlFragmentIhvConnectivity; } DOT11EXT_IHV_CONNECTIVITY_PROFILE, *PDOT11EXT_IHV_CONNECTIVITY_PROFILE; typedef struct _DOT11EXT_IHV_SECURITY_PROFILE { #ifdef __midl [string] #endif LPWSTR pszXmlFragmentIhvSecurity; BOOL bUseMSOnex; } DOT11EXT_IHV_SECURITY_PROFILE, *PDOT11EXT_IHV_SECURITY_PROFILE; typedef struct _DOT11EXT_IHV_DISCOVERY_PROFILE { DOT11EXT_IHV_CONNECTIVITY_PROFILE IhvConnectivityProfile; DOT11EXT_IHV_SECURITY_PROFILE IhvSecurityProfile; } DOT11EXT_IHV_DISCOVERY_PROFILE, *PDOT11EXT_IHV_DISCOVERY_PROFILE; typedef struct _DOT11EXT_IHV_DISCOVERY_PROFILE_LIST { DWORD dwCount; #ifdef __midl [size_is(dwCount)] #endif PDOT11EXT_IHV_DISCOVERY_PROFILE pIhvDiscoveryProfiles; } DOT11EXT_IHV_DISCOVERY_PROFILE_LIST, *PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST; // // Enum to distinguish between received Ihv notification types. // typedef enum _DOT11EXT_IHV_INDICATION_TYPE { IndicationTypeNicSpecificNotification, IndicationTypePmkidCandidateList, IndicationTypeTkipMicFailure, IndicationTypePhyStateChange, IndicationTypeLinkQuality } DOT11EXT_IHV_INDICATION_TYPE, *PDOT11EXT_IHV_INDICATION_TYPE; // // Structure to represent the virtual station // access point property. // #define DOT11EXT_PSK_MAX_LENGTH 64 typedef struct _DOT11EXT_VIRTUAL_STATION_AP_PROPERTY { DOT11_SSID dot11SSID; DOT11_AUTH_ALGORITHM dot11AuthAlgo; DOT11_CIPHER_ALGORITHM dot11CipherAlgo; BOOL bIsPassPhrase; DWORD dwKeyLength; UCHAR ucKeyData[DOT11EXT_PSK_MAX_LENGTH]; } DOT11EXT_VIRTUAL_STATION_AP_PROPERTY, *PDOT11EXT_VIRTUAL_STATION_AP_PROPERTY; // // Diagnostics Helper Class class parameter // #define WDIAG_IHV_WLAN_ID_FLAG_SECURITY_ENABLED 0x00000001 typedef struct _WDIAG_IHV_WLAN_ID { WCHAR strProfileName [MS_MAX_PROFILE_NAME_LENGTH]; DOT11_SSID Ssid; DOT11_BSS_TYPE BssType; DWORD dwFlags; // Flags define above DWORD dwReasonCode; // Set only when an applicable reason code is available } WDIAG_IHV_WLAN_ID, *PWDIAG_IHV_WLAN_ID; typedef DWORD (WINAPI *DOT11EXT_ALLOCATE_BUFFER) ( DWORD dwByteCount, __deref_out_bcount(dwByteCount) LPVOID* ppvBuffer ); typedef VOID (WINAPI *DOT11EXT_FREE_BUFFER) ( __in_opt LPVOID pvMemory ); typedef DWORD (WINAPI *DOT11EXT_SET_PROFILE_CUSTOM_USER_DATA) ( __in_opt HANDLE hDot11SvcHandle, __in_opt HANDLE hConnectSession, DWORD dwSessionID, DWORD dwDataSize, __in_bcount(dwDataSize) LPVOID pvData ); typedef DWORD (WINAPI *DOT11EXT_GET_PROFILE_CUSTOM_USER_DATA) ( __in_opt HANDLE hDot11SvcHandle, __in_opt HANDLE hConnectSession, DWORD dwSessionID, __out DWORD* pdwDataSize, __deref_out_bcount(*pdwDataSize) LPVOID* ppvData ); typedef DWORD (WINAPI *DOT11EXT_SET_CURRENT_PROFILE) ( __in_opt HANDLE hDot11SvcHandle, __in_opt HANDLE hConnectSession, __in_opt PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, __in_opt PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile ); typedef DWORD (WINAPI *DOT11EXT_SEND_UI_REQUEST) ( __in_opt HANDLE hDot11SvcHandle, __in PDOT11EXT_IHV_UI_REQUEST pIhvUIRequest ); typedef DWORD (WINAPI *DOT11EXT_PRE_ASSOCIATE_COMPLETION) ( __in_opt HANDLE hDot11SvcHandle, __in_opt HANDLE hConnectSession, DWORD dwReasonCode, DWORD dwWin32Error ); typedef DWORD (WINAPI *DOT11EXT_POST_ASSOCIATE_COMPLETION) ( __in_opt HANDLE hDot11SvcHandle, __in_opt HANDLE hSecuritySessionID, __in_opt PDOT11_MAC_ADDRESS pPeer, DWORD dwReasonCode, DWORD dwWin32Error ); typedef DWORD (WINAPI *DOT11EXT_SEND_NOTIFICATION) ( __in_opt HANDLE hDot11SvcHandle, __in PL2_NOTIFICATION_DATA pNotificationData ); typedef DWORD (WINAPI *DOT11EXT_SEND_PACKET) ( __in_opt HANDLE hDot11SvcHandle, ULONG uPacketLen, __in_bcount(uPacketLen) LPVOID pvPacket, __in_opt HANDLE hSendCompletion ); typedef DWORD (WINAPI *DOT11EXT_SET_ETHERTYPE_HANDLING) ( __in_opt HANDLE hDot11SvcHandle, ULONG uMaxBackLog, ULONG uNumOfExemption, __in_ecount_opt(uNumOfExemption) PDOT11_PRIVACY_EXEMPTION pExemption, ULONG uNumOfRegistration, __in_ecount_opt(uNumOfRegistration) USHORT* pusRegistration ); typedef DWORD (WINAPI *DOT11EXT_SET_AUTH_ALGORITHM) ( __in_opt HANDLE hDot11SvcHandle, DWORD dwAuthAlgo ); typedef DWORD (WINAPI *DOT11EXT_SET_UNICAST_CIPHER_ALGORITHM) ( __in_opt HANDLE hDot11SvcHandle, DWORD dwUnicastCipherAlgo ); typedef DWORD (WINAPI *DOT11EXT_SET_MULTICAST_CIPHER_ALGORITHM) ( __in_opt HANDLE hDot11SvcHandle, DWORD dwMulticastCipherAlgo ); typedef DWORD (WINAPI *DOT11EXT_SET_DEFAULT_KEY) ( __in_opt HANDLE hDot11SvcHandle, __in PDOT11_CIPHER_DEFAULT_KEY_VALUE pKey, DOT11_DIRECTION dot11Direction ); typedef DWORD (WINAPI *DOT11EXT_SET_KEY_MAPPING_KEY) ( __in_opt HANDLE hDot11SvcHandle, __in PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE pKey ); typedef DWORD (WINAPI *DOT11EXT_SET_DEFAULT_KEY_ID) ( __in_opt HANDLE hDot11SvcHandle, ULONG uDefaultKeyId ); typedef DWORD (WINAPI *DOT11EXT_SET_EXCLUDE_UNENCRYPTED) ( __in_opt HANDLE hDot11SvcHandle, BOOL bExcludeUnencrypted ); typedef DWORD (WINAPI *DOT11EXT_NIC_SPECIFIC_EXTENSION) ( __in_opt HANDLE hDot11SvcHandle, DWORD dwInBufferSize, __in_bcount(dwInBufferSize) LPVOID pvInBuffer, __inout DWORD* pdwOutBufferSize, __out_bcount_part_opt(*pdwOutBufferSize, *pdwOutBufferSize) LPVOID pvOutBuffer ); /* IHV should allocate EAP attributes using DOT11EXT_ALLOCATE_BUFFER The IHV framework will free them. */ typedef DWORD (WINAPI *DOT11EXT_ONEX_START) ( __in_opt HANDLE hDot11SvcHandle, __in_opt EAP_ATTRIBUTES* pEapAttributes ); typedef DWORD (WINAPI *DOT11EXT_ONEX_STOP) ( __in_opt HANDLE hDot11SvcHandle ); typedef DWORD (WINAPI *DOT11EXT_PROCESS_ONEX_PACKET) ( __in_opt HANDLE hDot11SvcHandle, DWORD dwInPacketSize, __in_bcount(dwInPacketSize) LPVOID pvInPacket ); // // APIs to control Virtual Station. // typedef DWORD (WINAPI *DOT11EXT_REQUEST_VIRTUAL_STATION) ( __in_opt HANDLE hDot11PrimaryHandle, __reserved LPVOID pvReserved ); typedef DWORD (WINAPI *DOT11EXT_RELEASE_VIRTUAL_STATION) ( __in_opt HANDLE hDot11PrimaryHandle, __reserved LPVOID pvReserved ); typedef DWORD (WINAPI *DOT11EXT_QUERY_VIRTUAL_STATION_PROPERTIES) ( __in_opt HANDLE hDot11SvcHandle, __out BOOL* pbIsVirtualStation, __out GUID* pgPrimary, __reserved LPVOID pvReserved ); typedef DWORD (WINAPI *DOT11EXT_SET_VIRTUAL_STATION_AP_PROPERTIES) ( __in_opt HANDLE hDot11SvcHandle, __in_opt HANDLE hConnectSession, DWORD dwNumProperties, __in_ecount(dwNumProperties) PDOT11EXT_VIRTUAL_STATION_AP_PROPERTY pProperties, __reserved LPVOID pvReserved ); #define IHV_VERSION_FUNCTION_NAME "Dot11ExtIhvGetVersionInfo" #define IHV_INIT_FUNCTION_NAME "Dot11ExtIhvInitService" #define IHV_INIT_VS_FUNCTION_NAME "Dot11ExtIhvInitVirtualStation" typedef DWORD (WINAPI *DOT11EXTIHV_GET_VERSION_INFO) ( __out PDOT11_IHV_VERSION_INFO pDot11IHVVersionInfo ); typedef DWORD (WINAPI *DOT11EXTIHV_INIT_SERVICE) ( DWORD dwVerNumUsed, __in PDOT11EXT_APIS pDot11ExtAPI, __reserved LPVOID pvReserved, __out PDOT11EXT_IHV_HANDLERS pDot11IHVHandlers ); typedef DWORD (WINAPI *DOT11EXTIHV_INIT_VIRTUAL_STATION) ( __in PDOT11EXT_VIRTUAL_STATION_APIS pDot11ExtVSAPI, __reserved LPVOID pvReserved ); typedef VOID (WINAPI *DOT11EXTIHV_DEINIT_SERVICE) ( VOID ); typedef DWORD (WINAPI *DOT11EXTIHV_INIT_ADAPTER) ( __in PDOT11_ADAPTER pDot11Adapter, __in_opt HANDLE hDot11SvcHandle, __out PHANDLE phIhvExtAdapter ); typedef VOID (WINAPI *DOT11EXTIHV_DEINIT_ADAPTER) ( __in_opt HANDLE hIhvExtAdapter ); typedef DWORD (WINAPI *DOT11EXTIHV_PERFORM_PRE_ASSOCIATE) ( __in_opt HANDLE hIhvExtAdapter, __in_opt HANDLE hConnectSession, __in_opt PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, __in PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, __in PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile, __in PDOT11_BSS_LIST pConnectableBssid, __out PDWORD pdwReasonCode ); typedef DWORD (WINAPI *DOT11EXTIHV_ADAPTER_RESET) ( __in_opt HANDLE hIhvExtAdapter ); typedef DWORD (WINAPI *DOT11EXTIHV_PERFORM_POST_ASSOCIATE) ( __in_opt HANDLE hIhvExtAdapter, __in_opt HANDLE hSecuritySessionID, __in PDOT11_PORT_STATE pPortState, ULONG uDot11AssocParamsBytes, __in_bcount(uDot11AssocParamsBytes) PDOT11_ASSOCIATION_COMPLETION_PARAMETERS pDot11AssocParams ); typedef DWORD (WINAPI *DOT11EXTIHV_STOP_POST_ASSOCIATE) ( __in_opt HANDLE hIhvExtAdapter, __in PDOT11_MAC_ADDRESS pPeer, DOT11_ASSOC_STATUS dot11AssocStatus ); typedef DWORD (WINAPI *DOT11EXTIHV_VALIDATE_PROFILE) ( __in_opt HANDLE hIhvExtAdapter, __in_opt PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, __in PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, __in PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile, __out PDWORD pdwReasonCode ); typedef DWORD (WINAPI *DOT11EXTIHV_PERFORM_CAPABILITY_MATCH) ( __in_opt HANDLE hIhvExtAdapter, __in_opt PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, __in PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, __in PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile, __in_opt PDOT11_BSS_LIST pConnectableBssid, __out PDWORD pdwReasonCode ); typedef DWORD (WINAPI *DOT11EXTIHV_CREATE_DISCOVERY_PROFILES) ( __in_opt HANDLE hIhvExtAdapter, BOOL bInsecure, __in_opt PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, __in_opt PDOT11_BSS_LIST pConnectableBssid, __out PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST pIhvDiscoveryProfileList, __out PDWORD pdwReasonCode ); typedef DWORD (WINAPI *DOT11EXTIHV_PROCESS_SESSION_CHANGE) ( ULONG uEventType, __in PWTSSESSION_NOTIFICATION pSessionNotification ); typedef DWORD (WINAPI *DOT11EXTIHV_RECEIVE_INDICATION) ( __in_opt HANDLE hIhvExtAdapter, DOT11EXT_IHV_INDICATION_TYPE indicationType, ULONG uBufferLength, __in_bcount_opt(uBufferLength) LPVOID pvBuffer ); typedef DWORD (WINAPI *DOT11EXTIHV_RECEIVE_PACKET) ( __in_opt HANDLE hIhvExtAdapter, DWORD dwInBufferSize, __in_bcount(dwInBufferSize) LPVOID pvInBuffer ); typedef DWORD (WINAPI *DOT11EXTIHV_SEND_PACKET_COMPLETION) ( __in_opt HANDLE hSendCompletion ); typedef DWORD (WINAPI *DOT11EXTIHV_IS_UI_REQUEST_PENDING) ( GUID guidUIRequest, __out PBOOL pbIsRequestPending ); typedef DWORD (WINAPI *DOT11EXTIHV_PROCESS_UI_RESPONSE) ( GUID guidUIRequest, DWORD dwByteCount, __in_bcount_opt(dwByteCount) LPVOID pvResponseBuffer ); typedef DWORD (WINAPI *DOT11EXTIHV_QUERY_UI_REQUEST) ( __in_opt HANDLE hIhvExtAdapter, DOT11EXT_IHV_CONNECTION_PHASE connectionPhase, __deref_out PDOT11EXT_IHV_UI_REQUEST* ppIhvUIRequest ); typedef DWORD (WINAPI *DOT11EXTIHV_ONEX_INDICATE_RESULT) ( __in_opt HANDLE hIhvExtAdapter, DOT11_MSONEX_RESULT msOneXResult, __in_opt PDOT11_MSONEX_RESULT_PARAMS pDot11MsOneXResultParams ); typedef DWORD (WINAPI *DOT11EXTIHV_CONTROL) ( __in_opt HANDLE hIhvExtAdapter, DWORD dwInBufferSize, __in_bcount_opt(dwInBufferSize) PBYTE pInBuffer, DWORD dwOutBufferSize, __out_bcount_part_opt(dwOutBufferSize,*pdwBytesReturned) PBYTE pOutBuffer, __out PDWORD pdwBytesReturned ); struct _DOT11EXT_APIS { DOT11EXT_ALLOCATE_BUFFER Dot11ExtAllocateBuffer; DOT11EXT_FREE_BUFFER Dot11ExtFreeBuffer; DOT11EXT_SET_PROFILE_CUSTOM_USER_DATA Dot11ExtSetProfileCustomUserData; DOT11EXT_GET_PROFILE_CUSTOM_USER_DATA Dot11ExtGetProfileCustomUserData; DOT11EXT_SET_CURRENT_PROFILE Dot11ExtSetCurrentProfile; DOT11EXT_SEND_UI_REQUEST Dot11ExtSendUIRequest; DOT11EXT_PRE_ASSOCIATE_COMPLETION Dot11ExtPreAssociateCompletion; DOT11EXT_POST_ASSOCIATE_COMPLETION Dot11ExtPostAssociateCompletion; DOT11EXT_SEND_NOTIFICATION Dot11ExtSendNotification; DOT11EXT_SEND_PACKET Dot11ExtSendPacket; DOT11EXT_SET_ETHERTYPE_HANDLING Dot11ExtSetEtherTypeHandling; DOT11EXT_SET_AUTH_ALGORITHM Dot11ExtSetAuthAlgorithm; DOT11EXT_SET_UNICAST_CIPHER_ALGORITHM Dot11ExtSetUnicastCipherAlgorithm; DOT11EXT_SET_MULTICAST_CIPHER_ALGORITHM Dot11ExtSetMulticastCipherAlgorithm; DOT11EXT_SET_DEFAULT_KEY Dot11ExtSetDefaultKey; DOT11EXT_SET_KEY_MAPPING_KEY Dot11ExtSetKeyMappingKey; DOT11EXT_SET_DEFAULT_KEY_ID Dot11ExtSetDefaultKeyId; DOT11EXT_NIC_SPECIFIC_EXTENSION Dot11ExtNicSpecificExtension; DOT11EXT_SET_EXCLUDE_UNENCRYPTED Dot11ExtSetExcludeUnencrypted; DOT11EXT_ONEX_START Dot11ExtStartOneX; DOT11EXT_ONEX_STOP Dot11ExtStopOneX; DOT11EXT_PROCESS_ONEX_PACKET Dot11ExtProcessSecurityPacket; }; struct _DOT11EXT_IHV_HANDLERS { DOT11EXTIHV_DEINIT_SERVICE Dot11ExtIhvDeinitService; DOT11EXTIHV_INIT_ADAPTER Dot11ExtIhvInitAdapter; DOT11EXTIHV_DEINIT_ADAPTER Dot11ExtIhvDeinitAdapter; DOT11EXTIHV_PERFORM_PRE_ASSOCIATE Dot11ExtIhvPerformPreAssociate; DOT11EXTIHV_ADAPTER_RESET Dot11ExtIhvAdapterReset; DOT11EXTIHV_PERFORM_POST_ASSOCIATE Dot11ExtIhvPerformPostAssociate; DOT11EXTIHV_STOP_POST_ASSOCIATE Dot11ExtIhvStopPostAssociate; DOT11EXTIHV_VALIDATE_PROFILE Dot11ExtIhvValidateProfile; DOT11EXTIHV_PERFORM_CAPABILITY_MATCH Dot11ExtIhvPerformCapabilityMatch; DOT11EXTIHV_CREATE_DISCOVERY_PROFILES Dot11ExtIhvCreateDiscoveryProfiles; DOT11EXTIHV_PROCESS_SESSION_CHANGE Dot11ExtIhvProcessSessionChange; DOT11EXTIHV_RECEIVE_INDICATION Dot11ExtIhvReceiveIndication; DOT11EXTIHV_RECEIVE_PACKET Dot11ExtIhvReceivePacket; DOT11EXTIHV_SEND_PACKET_COMPLETION Dot11ExtIhvSendPacketCompletion; DOT11EXTIHV_IS_UI_REQUEST_PENDING Dot11ExtIhvIsUIRequestPending; DOT11EXTIHV_PROCESS_UI_RESPONSE Dot11ExtIhvProcessUIResponse; DOT11EXTIHV_QUERY_UI_REQUEST Dot11ExtIhvQueryUIRequest; DOT11EXTIHV_ONEX_INDICATE_RESULT Dot11ExtIhvOnexIndicateResult; DOT11EXTIHV_CONTROL Dot11ExtIhvControl; }; struct _DOT11EXT_VIRTUAL_STATION_APIS { DOT11EXT_REQUEST_VIRTUAL_STATION Dot11ExtRequestVirtualStation; DOT11EXT_RELEASE_VIRTUAL_STATION Dot11ExtReleaseVirtualStation; DOT11EXT_QUERY_VIRTUAL_STATION_PROPERTIES Dot11ExtQueryVirtualStationProperties; DOT11EXT_SET_VIRTUAL_STATION_AP_PROPERTIES Dot11ExtSetVirtualStationAPProperties; }; #endif // __WLAN_IHV_H__