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;
        }

解决方案 »

  1.   

    同问!求高手解答
    我的错误代码是 87
    我的是Win7 系统。同样的代码在Xp 下面可以运行,但是在WIn7 上面 就返回值为0,错误码是 87.
    求解!!!
      

  2.   

    你这段代码 我在网上看见过。
    你试试sleep 取消注销,那个要先 oidcode = OID_802_11_BSSID_LIST_SCAN .
    就是把你的第一个oidcode 后面值改成  OID_802_11_BSSID_LIST_SCAN,然后在sleep 几秒 试试看。据说SCAN 的效果相当于初始化,有了这个SCAN 下面的LIST 才有值。
    你试试。 
      

  3.   

    谢谢啊,其实在oidcode = OID_802_11_BSSID_LIST_SCAN ;时的那个deviceoicontrol就已经返回31错误了,后来查到有人说win7限制了一些OID的传入(我接受了这个解释,不知道是不是这样)
      

  4.   

    memset( m_pBSSIDList, 0, sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS) ;
    NUMBEROF_BSSIDS数值修改大一点.设备返回的信息量多