Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows驱动开发

帖子发起人: joe2007max83   发起时间: 2011-07-01 16:21 下午   回复: 3

Print Search
帖子排序:    
   2011-07-01, 16:21 下午
joe2007max83 离线,最后访问时间: 2011/7/1 8:15:43 joe2007max83

发帖数前200位
注册: 2011-07-01
发 贴: 5
大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败
Reply Quote
如题,下面一段程序中,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();
}
}
IP 地址: 已记录   报告
   2011-07-01, 20:16 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败
Reply Quote
If the query fails, DeviceIoControlreturns zero. To get extended error information, call GetLastError.

[from MSDN]
IP 地址: 已记录   报告
   2011-07-01, 22:56 下午
joe2007max83 离线,最后访问时间: 2011/7/1 8:15:43 joe2007max83

发帖数前200位
注册: 2011-07-01
发 贴: 5
Re: 大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败
Reply Quote
谢谢你的回答。
GetLastError返回值为31,
〖31〗-连到系统上的设备没有发挥作用。

是什么意思?如何解决?
我的网卡应该是好的。我还用它上网呢。
IP 地址: 已记录   报告
   2012-10-31, 16:40 下午
fanxiaoqie 离线,最后访问时间: 2012/10/31 8:35:40 木小瓜

无等级
注册: 2012-10-31
发 贴: 1
Re: 大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败
Reply Quote

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

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


IP 地址: 已记录   报告
高端调试 » 驱动程序开发 » Windows驱动开发 » Re: 大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.