DWORD ShowNetworkListwithNDIS()
{
INT              rtn;
WCHAR       wsNICGUIDinString[256];
char       sNICIDFullPath[256];
DWORD       dwMemSize;
DWORD       ulBytesReturned;
DWORD       ulOIDCode;
PNDIS_802_11_BSSID_LIST pNDIS80211BSSIDList;
PNDIS_WLAN_BSSID       pNDIS80211BSSIDInfo;
TCHAR szESSIDStr1[256];
TCHAR szMACAddressStr[256];
UINT i, j; // open handle
memset(wsNICGUIDinString, 0, 256);
memset(sNICIDFullPath, 0, 256);
StringFromGUID2(pInterfaceList->InterfaceInfo[pInterfaceList->dwIndex].InterfaceGuid, 
wsNICGUIDinString, 256);
sprintf_s(sNICIDFullPath, "\\\\.\\%S", wsNICGUIDinString);
hClientHandle = CreateFileA(sNICIDFullPath, GENERIC_READ, 
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
0, NULL) ; if(hClientHandle == INVALID_HANDLE_VALUE)
{
_tprintf("Error in CreateFileA\n");
return 0;
} // allocate temporary memory to check the number of
// AP entries
dwMemSize = sizeof(NDIS_802_11_BSSID_LIST) + (sizeof(NDIS_WLAN_BSSID_EX) * 100);
pNDIS80211BSSIDList = (NDIS_802_11_BSSID_LIST *) VirtualAlloc(NULL,
dwMemSize, MEM_RESERVE | MEM_COMMIT,
PAGE_READWRITE);
memset(pNDIS80211BSSIDList, 0, dwMemSize); // set OID
ulOIDCode = OID_802_11_BSSID_LIST;
ulBytesReturned = 0; // call get AP list
rtn = DeviceIoControl(hClientHandle, IOCTL_NDIS_QUERY_GLOBAL_STATS,
&ulOIDCode, sizeof(ulOIDCode), (ULONG *) pNDIS80211BSSIDList,
dwMemSize, &ulBytesReturned, NULL); return rtn;
}rtn是0,DeviceIoControl 返回的错误代码是87.
网络上找到的可能的一种解释:在WIN7上使用DeviceIoControl会有如下问题,当下发802.11的OID时,Fiter驱动会拦住这些OID,导致不能发送到设备。
请问有解决办法么?