다음을 통해 공유


WlanEnumInterfaces 함수(wlanapi.h)

WlanEnumInterfaces 함수는 로컬 컴퓨터에서 현재 사용하도록 설정된 모든 무선 LAN 인터페이스를 열거합니다.

구문

DWORD WlanEnumInterfaces(
  [in]  HANDLE                    hClientHandle,
  [in]  PVOID                     pReserved,
  [out] PWLAN_INTERFACE_INFO_LIST *ppInterfaceList
);

매개 변수

[in] hClientHandle

WlanOpenHandle 함수에 대한 이전 호출에서 얻은 클라이언트의 세션 핸들입니다.

[in] pReserved

다음에 사용하도록 예약됩니다. 이 매개 변수는 NULL로 설정해야 합니다.

[out] ppInterfaceList

WLAN_INTERFACE_INFO_LIST 구조에서 반환된 무선 LAN 인터페이스 목록을 수신하는 포인터의 스토리지에 대한 포인터입니다.

반환된 WLAN_INTERFACE_INFO_LIST 대한 버퍼는 호출이 성공하면 WlanEnumInterfaces 함수에 의해 할당됩니다.

반환 값

함수가 성공하면 반환 값이 ERROR_SUCCESS.

함수가 실패하면 반환 값은 다음 반환 코드 중 하나일 수 있습니다.

반환 코드 설명
ERROR_INVALID_PARAMETER
매개 변수가 잘못되었습니다. hClientHandle 또는 ppInterfaceList 매개 변수가 NULL인 경우 이 오류가 반환됩니다. pReservedNULL이 아닌 경우 이 오류가 반환됩니다. hClientHandle 매개 변수가 유효하지 않은 경우에도 이 오류가 반환됩니다.
ERROR_INVALID_HANDLE
핸들 테이블에서 hClientHandle 핸들을 찾을 수 없습니다.
RPC_STATUS
다양한 오류 코드.
ERROR_NOT_ENOUGH_MEMORY
이 요청을 처리하고 쿼리 결과에 대한 메모리를 할당하는 데 사용할 수 있는 메모리가 부족합니다.

설명

WlanEnumInterfaces 함수는 함수가 성공할 때 ppInterfaceList 매개 변수가 가리키는 버퍼에 반환되는 반환된 인터페이스 목록에 대한 메모리를 할당합니다. 버퍼가 더 이상 필요하지 않은 후 WlanFreeMemory 함수를 호출하여 ppInterfaceList 매개 변수가 가리키는 버퍼에 사용되는 메모리를 해제해야 합니다.

예제

다음 예제에서는 로컬 컴퓨터의 무선 LAN 인터페이스를 열거하고 검색된 WLAN_INTERFACE_INFO_LIST 구조체 및 열거된 WLAN_INTERFACE_INFO 구조체의 값을 출력합니다.

참고 무선 LAN 서비스가 설치되어 시작되지 않은 경우 이 예제는 Windows Server 2008 및 Windows Server 2008 R2에서 로드되지 않습니다.
 
#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>
#include <wlanapi.h>
#include <objbase.h>
#include <wtypes.h>

#include <stdio.h>
#include <stdlib.h>

// Need to link with Wlanapi.lib and Ole32.lib
#pragma comment(lib, "wlanapi.lib")
#pragma comment(lib, "ole32.lib")

int wmain()
{

    // Declare and initialize variables.

    HANDLE hClient = NULL;
    DWORD dwMaxClient = 2;   //    
    DWORD dwCurVersion = 0;
    DWORD dwResult = 0;
    int iRet = 0;
    
    WCHAR GuidString[40] = {0};
     
    int i;

    /* variables used for WlanEnumInterfaces  */
    
    PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
    PWLAN_INTERFACE_INFO pIfInfo = NULL;

    
    dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient); 
    if (dwResult != ERROR_SUCCESS)  {
        wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult);
        // FormatMessage can be used to find out why the function failed
        return 1;
    }
    
    dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList); 
    if (dwResult != ERROR_SUCCESS)  {
        wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);
        // FormatMessage can be used to find out why the function failed
        return 1;
    }
    else {
        wprintf(L"Num Entries: %lu\n", pIfList->dwNumberOfItems);
        wprintf(L"Current Index: %lu\n", pIfList->dwIndex);
        for (i = 0; i < (int) pIfList->dwNumberOfItems; i++) {
            pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
            wprintf(L"  Interface Index[%d]:\t %lu\n", i, i);
            iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 39); 
            // For c rather than C++ source code, the above line needs to be
            // iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 39); 
            if (iRet == 0)
                wprintf(L"StringFromGUID2 failed\n");
            else {
                wprintf(L"  InterfaceGUID[%d]: %ws\n",i, GuidString);
            }    
            wprintf(L"  Interface Description[%d]: %ws", i, 
                pIfInfo->strInterfaceDescription);
            wprintf(L"\n");
            wprintf(L"  Interface State[%d]:\t ", i);
            switch (pIfInfo->isState) {
            case wlan_interface_state_not_ready:
                wprintf(L"Not ready\n");
                break;
            case wlan_interface_state_connected:
                wprintf(L"Connected\n");
                break;
            case wlan_interface_state_ad_hoc_network_formed:
                wprintf(L"First node in a ad hoc network\n");
                break;
            case wlan_interface_state_disconnecting:
                wprintf(L"Disconnecting\n");
                break;
            case wlan_interface_state_disconnected:
                wprintf(L"Not connected\n");
                break;
            case wlan_interface_state_associating:
                wprintf(L"Attempting to associate with a network\n");
                break;
            case wlan_interface_state_discovering:
                wprintf(L"Auto configuration is discovering settings for the network\n");
                break;
            case wlan_interface_state_authenticating:
                wprintf(L"In process of authenticating\n");
                break;
            default:
                wprintf(L"Unknown state %ld\n", pIfInfo->isState);
                break;
            }
            wprintf(L"\n");
        }
    }

    if (pIfList != NULL) {
        WlanFreeMemory(pIfList);
        pIfList = NULL;
    }
    return 0;
}

요구 사항

   
지원되는 최소 클라이언트 Windows Vista, WINDOWS XP SP3 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 wlanapi.h(Wlanapi.h 포함)
라이브러리 Wlanapi.lib
DLL Wlanapi.dll
재배포 가능 파일 WINDOWS XP용 무선 LAN API SP2

참고 항목

WLAN_INTERFACE_INFO

WLAN_INTERFACE_INFO_LIST

WlanFreeMemory