(wlanapi.h) WLAN_RADIO_STATE 結構
WLAN_RADIO_STATE 結構會指定實體層清單上的無線電狀態, (PHY) 類型。
語法
typedef struct _WLAN_RADIO_STATE {
DWORD dwNumberOfPhys;
WLAN_PHY_RADIO_STATE PhyRadioState[WLAN_MAX_PHY_INDEX];
} WLAN_RADIO_STATE, *PWLAN_RADIO_STATE;
成員
dwNumberOfPhys
PhyRadioState 成員中有效的 PHY 索引數目。
PhyRadioState[WLAN_MAX_PHY_INDEX]
WLAN_PHY_RADIO_STATE 結構的陣列,指定數個 PHY 索引的無線電狀態。 此陣列中只有第一個 dwNumberOfPhys 專案有效。
備註
當OpCode 參數設定為 wlan_intf_opcode_radio_state 時,WLAN_RADIO_STATE結構會與 WlanQueryInterface 函式搭配使用。 如果呼叫成功, ppData 參數會指向 WLAN_RADIO_STATE 結構。
當OpCode 參數設定為 wlan_intf_opcode_radio_state 以變更無線電狀態時,WLAN_RADIO_STATE 結構中的WLAN_PHY_RADIO_STATE結構成員可以與 WlanSetInterface 函式搭配使用。
當無線電狀態變更時,媒體特定模組 (MSM) 也會使用 WLAN_PHY_RADIO_STATE 結構來通知。 應用程式會藉由呼叫 WlanRegisterNotification 函式,並將 dwNotifSource 參數設定為包含WLAN_NOTIFICATION_SOURCE_MSM的值來註冊以接收 MSM 通知。 如需這些通知的詳細資訊,請參閱 WLAN_NOTIFICATION_DATA 結構和 WLAN_NOTIFICATION_MSM 列舉參考。
範例
下列範例會列舉本機計算機上的無線 LAN 介面、查詢介面上 WLAN_RADIO_STATE 的每個介面,以及從 擷取的 WLAN_RADIO_STATE 結構列印值。
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <wlanapi.h>
#include <objbase.h>
#include <wtypes.h>
#include <stdio.h>
#include <stdlib.h>
// Need to link with Wlanapi.lib and Ole32.lib
#pragma comment(lib, "wlanapi.lib")
#pragma comment(lib, "ole32.lib")
int wmain()
{
// Declare and initialize variables.
HANDLE hClient = NULL;
DWORD dwMaxClient = 2; //
DWORD dwCurVersion = 0;
DWORD dwResult = 0;
DWORD dwRetVal = 0;
int iRet = 0;
WCHAR GuidString[39] = { 0 };
unsigned int i;
// variables used for WlanEnumInterfaces
PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
PWLAN_INTERFACE_INFO pIfInfo = NULL;
// variables used for WlanQueryInterfaces for opcode = wlan_intf_opcode_radio_state
PWLAN_RADIO_STATE pradioStateInfo = NULL;
DWORD radioStateInfoSize = sizeof (WLAN_RADIO_STATE);
WLAN_OPCODE_VALUE_TYPE opCode = wlan_opcode_value_type_invalid;
dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult);
return 1;
// You can use FormatMessage here to find out why the function failed
}
dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);
return 1;
// You can use FormatMessage here to find out why the function failed
} else {
wprintf(L"Num Entries: %lu\n", pIfList->dwNumberOfItems);
wprintf(L"Current Index: %lu\n", pIfList->dwIndex);
for (i = 0; i < (int) pIfList->dwNumberOfItems; i++) {
pIfInfo = (WLAN_INTERFACE_INFO *) & pIfList->InterfaceInfo[i];
wprintf(L" Interface Index[%u]:\t %lu\n", i, i);
iRet =
StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) & GuidString,
sizeof (GuidString) / sizeof (*GuidString));
// For c rather than C++ source code, the above line needs to be
// iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString,
// sizeof(GuidString)/sizeof(*GuidString));
if (iRet == 0)
wprintf(L"StringFromGUID2 failed\n");
else {
wprintf(L" InterfaceGUID[%d]:\t %ws\n", i, GuidString);
}
wprintf(L" Interface Description[%d]: %ws", i, pIfInfo->strInterfaceDescription);
wprintf(L"\n");
wprintf(L" Interface State[%d]:\t ", i);
switch (pIfInfo->isState) {
case wlan_interface_state_not_ready:
wprintf(L"Not ready\n");
break;
case wlan_interface_state_connected:
wprintf(L"Connected\n");
break;
case wlan_interface_state_ad_hoc_network_formed:
wprintf(L"First node in a ad hoc network\n");
break;
case wlan_interface_state_disconnecting:
wprintf(L"Disconnecting\n");
break;
case wlan_interface_state_disconnected:
wprintf(L"Not connected\n");
break;
case wlan_interface_state_associating:
wprintf(L"Attempting to associate with a network\n");
break;
case wlan_interface_state_discovering:
wprintf(L"Auto configuration is discovering settings for the network\n");
break;
case wlan_interface_state_authenticating:
wprintf(L"In process of authenticating\n");
break;
default:
wprintf(L"Unknown state %ld\n", pIfInfo->isState);
break;
}
wprintf(L"\n");
dwResult = WlanQueryInterface(hClient,
&pIfInfo->InterfaceGuid,
wlan_intf_opcode_radio_state,
NULL,
&radioStateInfoSize,
(PVOID *) & pradioStateInfo, &opCode);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanQueryInterface failed with error: %u\n", dwResult);
dwRetVal = 1;
// You can use FormatMessage to find out why the function failed
} else {
wprintf(L" WLAN_RADIO_STATE for this interface\n");
wprintf(L" Number of valid PHYs:\t %u\n", pradioStateInfo->dwNumberOfPhys);
wprintf(L" Radio state:\n");
wprintf(L" Index of PHYs type[0]:\t %u\n",
pradioStateInfo->PhyRadioState[0].dwPhyIndex);
wprintf(L" Software radio state[0]:\t ");
switch (pradioStateInfo->PhyRadioState[0].dot11SoftwareRadioState) {
case dot11_radio_state_unknown:
wprintf(L"Unknown\n");
break;
case dot11_radio_state_on:
wprintf(L"On\n");
break;
case dot11_radio_state_off:
wprintf(L"Off\n");
break;
default:
wprintf(L"Other Unknown state %ld\n", pradioStateInfo->PhyRadioState[0].dot11SoftwareRadioState);
break;
}
wprintf(L" Hardware radio state[0]:\t ");
switch (pradioStateInfo->PhyRadioState[0].dot11HardwareRadioState) {
case dot11_radio_state_unknown:
wprintf(L"Unknown\n");
break;
case dot11_radio_state_on:
wprintf(L"On\n");
break;
case dot11_radio_state_off:
wprintf(L"Off\n");
break;
default:
wprintf(L"Other Unknown state %ld\n", pradioStateInfo->PhyRadioState[0].dot11HardwareRadioState);
break;
}
wprintf(L"\n");
}
}
}
if (pradioStateInfo != NULL) {
WlanFreeMemory(pradioStateInfo);
pradioStateInfo = NULL;
}
if (pIfList != NULL) {
WlanFreeMemory(pIfList);
pIfList = NULL;
}
return dwRetVal;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |
標頭 | wlanapi.h |