您的位置:首页 > 其它

Wince获取Wifi的设备名、连接状态和信号强度

2011-04-07 17:00 453 查看
Note:需CE4.0或更高版本(兼容NDIS5.1)支持

一、加入头文件

#include <winioctl.h>

#include <ntddndis.h>

#include <nuiouser.h>

二、Attach to NDISUIO

HANDLE hNdis = ::CreateFile( NDISUIO_DEVICE_NAME, GENERIC_ALL, 0, NULL, OPEN_EXISTING,

                             FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,

                             (HANDLE)INVALID_HANDLE_VALUE );


三、获取设备名称


UCHAR                  cbQueryBuffer[ 1024 ];

PNDISUIO_QUERY_BINDING pQueryBinding;

DWORD                  dwBytesReturned = 0;

pQueryBinding = (PNDISUIO_QUERY_BINDING)&cbQueryBuffer[ 0 ];

pQueryBinding->BindingIndex = 0;

if ( ::DeviceIoControl( hNdis,

                        IOCTL_NDISUIO_QUERY_BINDING,

                        (LPVOID)&cbQueryBuffer[ 0 ],

                        sizeof(NDISUIO_QUERY_BINDING),

                        (LPVOID)&cbQueryBuffer[ 0 ],

                        sizeof(cbQueryBuffer),

                        &dwBytesReturned,

                        NULL ) == TRUE )

{

    TCHAR* pDeviceName = (TCHAR*)( cbQueryBuffer + pQueryBinding->DeviceNameOffset );

}



四、检测连接状态


NIC_STATISTICS nicStatistics = { 0 };

DWORD          dwBytesReturned = 0;

BOOL bConnected = FALSE;

nicStatistics.ptcDeviceName = pDeviceName;

if ( ::DeviceIoControl( hNdis,

                        IOCTL_NDISUIO_NIC_STATISTICS,

                        NULL,

                        0,

                        &nicStatistics,

                        sizeof(NIC_STATISTICS),

                        &dwBytesReturned,

                        NULL ) == TRUE )

{

    bConnected = ( nicStatistics.MediaState == MEDIA_STATE_CONNECTED );

}


五、获取信号强度


// example.

// < -90 : No Signal

// < -81 : Very Low

// < -71 : Low

// < -67 : Good

// < -57 : Very Good

// ...   : Excellent

NDISUIO_QUERY_OID ndisQueryOid = { 0 };

DWORD             dwBytesReturned = 0;

int nDb = 0;

ndisQueryOid.Oid = OID_802_11_RSSI;

ndisQueryOid.ptcDeviceName = pDeviceName;

if ( ::DeviceIoControl( hNdis,

                        IOCTL_NDISUIO_QUERY_OID_VALUE,

                        (LPVOID)&ndisQueryOid,

                        sizeof(ndisQueryOid),

                        (LPVOID)&ndisQueryOid,

                        sizeof(ndisQueryOid),

                        &dwBytesReturned,

                        NULL ) == TRUE )

{

    ::CopyMemory( &nDb, &ndisQueryOid.Data[ 0 ], sizeof(ULONG) );

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: