native wifi api 详解

对于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:接口的描述符。

isStatewifi接口的状态,如下:

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
pReservedNULL
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的详细信息。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值