SW 개발

winCE > 네트워크 > NDIS > AP 리스캔 하기!

. . . 2009. 1. 15. 15:13
반응형
  • 마크다운변환 : 20190905

  • 기타사항 : EVC, winCE5 테스트완료. 틀린사항이나 오류사항은 지적해주시면 감사하겠습니다.

AP 리스캔 명령어가 필요한이유?

wzcsapi 로 해서 ap리스트를 받아와보면.. 해당 ap리스트들이 완전히 실시간데이터라고 생각되기엔 어려운것 같다. 가끔가면 아무리 스캔을 해도 안보이는 AP가 있었기 때문이다. 정확이유는 모르겠지만. 어떤 ap는 사라져 버리면 계속 기다려도 안나타 난다. 그때 nids쪽으로 Rescan OID 를 날린다음 다시 wzcsapi 를 통해 읽어보니 업데이트가 되었다.
단, 주기적으로 AP를 스캔하는 프로그램을 작성하였는데.. 너무 자주 AP를 스캔하니, 무선랜 동작이 제대로 이뤄짖 않았다. NDIS로의 리스캔 명령은 가끔쓰고.. wzcsapi 로 스캔을 하는방법으로 코딩했다.

예제소스코드

void ReScanAPCmdToNDIS() 
{ 
    PNDISUIO_QUERY_OID pNQO; 
    DWORD dwBytesRet; 

    BYTE Buffer[8192]; 
    WCHAR* szWiFiCard = WLAN_ADAPTERNAME; 

    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)) 
    { 
        printf("ReScan Success?!\r\n"); 
    } 

}
반응형