Re: 大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败

Windows驱动开发

大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败


joe2007max83 2011-07-01, 16:21 下午
如题,下面一段程序中,DeviceIoControl访问OID_802_11_BSSID_LIST老是失败(见下面红色),也就是说bResult一直等于0;为什么?请教牛人!!!
可能的问题出现在哪?为什么第二个DeviceIoControl失败?

#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include


#define NUMBEROF_BSSIDS 10

int main()
{
HANDLE hDev;
bool bResult;
DWORD junk;
unsigned char macadress[32];
NDIS_802_11_BSSID_LIST* m_pBSSIDList;

m_pBSSIDList = ( NDIS_802_11_BSSID_LIST *) VirtualAlloc( NULL,
sizeof( NDIS_802_11_BSSID_LIST)* NUMBEROF_BSSIDS,
MEM_RESERVE | MEM_COMMIT,
PAGE_READWRITE) ;


hDev=CreateFile(L"//./{FC1F5ED6-543B-404D-9051-FF85FC7D8161}",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (hDev == INVALID_HANDLE_VALUE)
{
return (FALSE);
}
else
{
memset( m_pBSSIDList, 0, sizeof( NDIS_802_11_BSSID_LIST)* NUMBEROF_BSSIDS);

ULONG oidcode = OID_802_11_BSSID_LIST_SCAN ; //0x0D01011A=218169626

DeviceIoControl(hDev,
IOCTL_NDIS_QUERY_GLOBAL_STATS,
(LPVOID)&oidcode,
sizeof(oidcode),
(ULONG *)NULL,
0,
&junk,
0);

Sleep(2000);

memset( m_pBSSIDList, 0, sizeof( NDIS_802_11_BSSID_LIST)* NUMBEROF_BSSIDS);

oidcode = OID_802_11_BSSID_LIST; //0x0D010217=218169879
bResult= DeviceIoControl(hDev, 。。。。。。。。。。。。。就是这个DeviceIoControl失败!
IOCTL_NDIS_QUERY_GLOBAL_STATS,
&oidcode,
sizeof( oidcode),
( ULONG *) m_pBSSIDList,
sizeof( NDIS_802_11_BSSID_LIST)* NUMBEROF_BSSIDS,
&junk,
NULL);
if (bResult)
{
for (int i=0;iNumberOfItems;i++)
{
int temp=i;
PNDIS_WLAN_BSSID cpSsid=m_pBSSIDList->Bssid;
while(temp!=0)
{
cpSsid=(PNDIS_WLAN_BSSID)((char *)cpSsid +cpSsid->Length);
temp--;
}
printf("%f",cpSsid->Ssid.Ssid);
printf("%d",cpSsid->Rssi);
printf((char*)macadress,"%02X-%02X-%02X-%02X-%02X-%02X",
(int*)m_pBSSIDList->Bssid.MacAddress[0],
(int*)m_pBSSIDList->Bssid.MacAddress[1],
(int*)m_pBSSIDList->Bssid.MacAddress[2],
(int*)m_pBSSIDList->Bssid.MacAddress[3],
(int*)m_pBSSIDList->Bssid.MacAddress[4],
(int*)m_pBSSIDList->Bssid.MacAddress[5]);
}
}
printf("failed");
CloseHandle(hDev);
getchar();
}
}

Re: 大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败


格蠹老雷 2011-07-01, 20:16 下午
If the query fails, DeviceIoControlreturns zero. To get extended error information, call GetLastError.

[from MSDN]

Re: 大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败


joe2007max83 2011-07-01, 22:56 下午
谢谢你的回答。
GetLastError返回值为31,
〖31〗-连到系统上的设备没有发挥作用。

是什么意思?如何解决?
我的网卡应该是好的。我还用它上网呢。

Re: 大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败


木小瓜 2012-10-31, 16:40 下午

楼主,你怎么解决的呢,我也遇到这个问题,我发现返回31是,前面那个网卡设置那里也是返回false的。

dwOIDCode = OID_802_11_BSSID_LIST_SCAN;
        DeviceIoControl(hAdapter,
            IOCTL_NDIS_QUERY_GLOBAL_STATS,
           
&dwOIDCode,
           
sizeof(dwOIDCode),
            NULL,
           
0,
           
&dwBytes,
            NULL);
麻烦你给我小小指示一下啊,感激不尽

Powered by Community Server Powered by CnForums.Net