반응형
wzc 에서 주변 AP의 정확한 정보를 얻어오기 위해 NDIS 인터페이스로 rescan 명령을 날려야 할때가 있다.
예를들면 wzc 로 주변 AP 정보(rssi등) 을 얻어야 할때 wzc에 있는 정보는 현재 데이터가 아닐 가능성이 있다.
(windosw mobile 의 경우 60초마다 주변 AP를 스캔하는것으로 알고있다,)
주변 AP정보 얻어오기 예제소스코드 : http://xenostudy.tistory.com/316
이때 NDIS 인터페이스를 통해서 rescan 명령을 날려주면 wzc 에 새로운 데이터가 올라온다.
#include <windows.h> #include <windef.h> #include <stdio.h> #include <stdarg.h> #include <eapol.h> #include <wzcsapi.h> #include <ntddndis.h> #include <commctrl.h> #include <winioctl.h> #include <stdlib.h> #include <nuiouser.h> #pragma comment(lib, "wzcsapi.lib") void GetWirelessDriverName(WCHAR* szBuff) { INTFS_KEY_TABLE IntfsTable; IntfsTable.dwNumIntfs = 0; IntfsTable.pIntfs = NULL; DWORD dwStatus = WZCEnumInterfaces(NULL, &IntfsTable); if(dwStatus != ERROR_SUCCESS) { RETAILMSG(1,(L"WZCEnumInterfaces() error 0x%08X\r\n", dwStatus)); return; } if(!IntfsTable.dwNumIntfs) { RETAILMSG(1,(L"system has no wireless card.\r\n")); wcscpy(szBuff, (L"has no Wlan card.\r\n")); return; } wcscpy(szBuff, IntfsTable.pIntfs[0].wszGuid); // need to free memory allocated by WZC for us. LocalFree(IntfsTable.pIntfs); } // GetFirstWirelessNetworkCard void ReScanAPCmdToNDIS() { PNDISUIO_QUERY_OID pNQO; DWORD dwBytesRet; BYTE Buffer[8192]; WCHAR szWiFiCard[128]={0,}; GetWirelessDriverName(szWiFiCard); HANDLE hNdisDevice; hNdisDevice=CreateFile( NDISUIO_DEVICE_NAME, // Object name. 0x00, // Desired access. 0x00, // Share Mode. NULL, // Security Attr OPEN_EXISTING, // Creation Disposition. FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // Flag and Attributes.. (HANDLE)INVALID_HANDLE_VALUE); //Scan List pNQO=(PNDISUIO_QUERY_OID)Buffer; pNQO->ptcDeviceName = szWiFiCard; pNQO->Oid = OID_802_11_BSSID_LIST_SCAN; if(! DeviceIoControl(hNdisDevice, IOCTL_NDISUIO_SET_OID_VALUE, (LPVOID) pNQO, sizeof(NDISUIO_QUERY_OID) +sizeof(OID_802_11_BSSID_LIST_SCAN)*20, (LPVOID) pNQO, sizeof(NDISUIO_QUERY_OID) +sizeof(OID_802_11_BSSID_LIST_SCAN)*20, &dwBytesRet, NULL)) { RETAILMSG(1,(TEXT("command fail... \r\n"))); } } |
위에서 IO control 을 어떤것을 하느냐에 따라 다양한 기능을 수행할수있다.
해당 IO control 은 커널문서나 구글링하면될듯하다.
반응형