DeviceIoControl访问OID_802_11_BSSID_LIST老是失败,错误代码31,网卡应该是好的,还连着无线网,怎么改?
createfileA成功的
oidcode = OID_802_11_BSSID_LIST ;
memset( m_pBSSIDList, 0, sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS) ;
oidcode = OID_802_11_BSSID_LIST_SCAN ; DeviceIoControl( m_handle,
IOCTL_NDIS_QUERY_GLOBAL_STATS,
&oidcode,
sizeof( oidcode),
( ULONG *) NULL,
0,
&bytesreturned,
NULL) ;
//Sleep( 2000) ;// i dont know...its seems we give him some time to let me know memset( m_pBSSIDList, 0, sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS) ;
oidcode = OID_802_11_BSSID_LIST ;
if( DeviceIoControl( m_handle,
IOCTL_NDIS_QUERY_GLOBAL_STATS,
&oidcode,
sizeof( oidcode),
( ULONG *) m_pBSSIDList,
sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS,
&bytesreturned,
NULL) == 0)
{ [color=#FF0000]int fak = GetLastError(); //返回31/color]
// List failed
return NULL;
}
else
{
return m_pBSSIDList;
}
createfileA成功的
oidcode = OID_802_11_BSSID_LIST ;
memset( m_pBSSIDList, 0, sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS) ;
oidcode = OID_802_11_BSSID_LIST_SCAN ; DeviceIoControl( m_handle,
IOCTL_NDIS_QUERY_GLOBAL_STATS,
&oidcode,
sizeof( oidcode),
( ULONG *) NULL,
0,
&bytesreturned,
NULL) ;
//Sleep( 2000) ;// i dont know...its seems we give him some time to let me know memset( m_pBSSIDList, 0, sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS) ;
oidcode = OID_802_11_BSSID_LIST ;
if( DeviceIoControl( m_handle,
IOCTL_NDIS_QUERY_GLOBAL_STATS,
&oidcode,
sizeof( oidcode),
( ULONG *) m_pBSSIDList,
sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS,
&bytesreturned,
NULL) == 0)
{ [color=#FF0000]int fak = GetLastError(); //返回31/color]
// List failed
return NULL;
}
else
{
return m_pBSSIDList;
}
我的错误代码是 87
我的是Win7 系统。同样的代码在Xp 下面可以运行,但是在WIn7 上面 就返回值为0,错误码是 87.
求解!!!
你试试sleep 取消注销,那个要先 oidcode = OID_802_11_BSSID_LIST_SCAN .
就是把你的第一个oidcode 后面值改成 OID_802_11_BSSID_LIST_SCAN,然后在sleep 几秒 试试看。据说SCAN 的效果相当于初始化,有了这个SCAN 下面的LIST 才有值。
你试试。
NUMBEROF_BSSIDS数值修改大一点.设备返回的信息量多