对于windows环境下的wifi API函数主要分两种:
1. Wlan开头的函数:对XP,win7的系统开发环境,windowServer 2008
2. WFD开头的函数: Windows 8 and Windows Server 2012
本次就一种环境下的API讲解:
1、 首先打开Wlan设备,及是设备资源句柄:
DWORD WINAPIWlanOpenHandle(
_In_ DWORD dwClientVersion,
_Reserved_ PVOID pReserved,
_Out_ PDWORD pdwNegotiatedVersion,
_Out_ PHANDLE phClientHandle
);
dwClientVersion:对于windows XP 的SP2或者SP3版本,取值为 1
对于Windows Vista 和WindowsServer 2008 取值为 2
pReserved:取值为NULL
pdwNegotiatedVersion [out]:返回参数
phClientHandle [out]:wifi设备的句柄,在整个扫描或者连接wifi过程中都会被用到。
Return value:成功返回ERROR_SUCCESS,错误会返回错误代码:
2、 扫描wifi卡的个数,因为有可能驱动管理这过个wifi卡设备
DWORD WINAPIWlanEnumInterfaces(
_In_ HANDLE hClientHandle,
_Reserved_ PVOID pReserved,
_Out_ PWLAN_INTERFACE_INFO_LIST*ppInterfaceList
);
hClientHandle [in]:通过WlanOpenHandle获取的wifi设备资源的句柄(phClientHandle)。
pReserved [in]:NULL
ppInterfaceList [out]:指针结构体,它是存储wireless LANinterfaces 的一个结构体
Return value:成功返回ERROR_SUCCESS,错误会返回错误代码:
细说一下WLAN_INTERFACE_INFO_LIST结构体:
typedef struct _WLAN_INTERFACE_INFO_LIST {
DWORD dwNumberOfItems;
DWORD dwIndex;
WLAN_INTERFACE_INFO InterfaceInfo[];
} WLAN_INTERFACE_INFO_LIST,*PWLAN_INTERFACE_INFO_LIST;
dwNumberOfItems:表示有多少个网卡,有多个要对多个网卡接口进行处理。
dwIndex:表示当前在使用哪个网卡,序号从0开始。
InterfaceInfo:一维数组,包含着wifi接口的信息。
细说一下WLAN_INTERFACE_INFO结构体:
typedef struct _WLAN_INTERFACE_INFO {
GUID InterfaceGuid;
WCHAR strInterfaceDescription[256];
WLAN_INTERFACE_STATE isState;
} WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO;
InterfaceGuid:表示wifi接口的GUID的唯一标识符。
strInterfaceDescription:接口的描述符。
isState:wifi接口的状态,如下:
typedef enum _WLAN_INTERFACE_STATE {
wlan_interface_state_not_ready = 0,
wlan_interface_state_connected = 1,
wlan_interface_state_ad_hoc_network_formed = 2,
wlan_interface_state_disconnecting = 3,
wlan_interface_state_disconnected = 4,
wlan_interface_state_associating = 5,
wlan_interface_state_discovering = 6,
wlan_interface_state_authenticating = 7
} WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE;
3、 扫描逐个网卡,获取周围有用的wifi网络:
DWORD WINAPI WlanGetAvailableNetworkList(
_In_ HANDLE hClientHandle,
_In_ const GUID *pInterfaceGuid,
_In_ DWORD dwFlags,
_Reserved_ PVOID pReserved,
_Out_ PWLAN_AVAILABLE_NETWORK_LIST *ppAvailableNetworkList
);
hClientHandle [in]:通过WlanOpenHandle获取的wifi设备资源的句柄(phClientHandle)。
pInterfaceGuid [in]:通过WlanEnumInterfaces获取WLAN_INTERFACE_INFO_LIST下的InterfaceInfo及是wifi接口的GUID的唯一标识符。
dwFlags [in]:1是所有可用的wifi,2还是隐藏的wifi
pReserved:NULL
ppAvailableNetworkList [out]:指针结构体,它是存储WLAN_AVAILABLE_NETWORK_LIST的一个结构体
Return value:成功返回ERROR_SUCCESS,错误会返回错误代码:
细说一下WLAN_INTERFACE_INFO结构体:
typedef struct _WLAN_AVAILABLE_NETWORK_LIST {
DWORD dwNumberOfItems;
DWORD dwIndex;
WLAN_AVAILABLE_NETWORK Network[1];
} WLAN_AVAILABLE_NETWORK_LIST, *PWLAN_AVAILABLE_NETWORK_LIST;
dwNumberOfItems:表示周围可用的ap个数
dwIndex:表示当前用的是第几个ap。
Network:一维数组,表示当前ap的详细信息。