다음을 통해 공유


WlanGetProfileList 함수(wlanapi.h)

WlanGetProfileList 함수는 기본 설정 순서로 프로필 목록을 검색합니다.

구문

DWORD WlanGetProfileList(
  [in]  HANDLE                  hClientHandle,
  [in]  const GUID              *pInterfaceGuid,
  [in]  PVOID                   pReserved,
  [out] PWLAN_PROFILE_INFO_LIST *ppProfileList
);

매개 변수

[in] hClientHandle

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

[in] pInterfaceGuid

무선 인터페이스의 GUID입니다.

WlanEnumInterfaces 함수를 사용하여 로컬 컴퓨터의 무선 인터페이스에 대한 GUID 목록을 검색할 수 있습니다.

[in] pReserved

다음에 사용하도록 예약됩니다. NULL로 설정해야 합니다.

[out] ppProfileList

프로필 정보 목록을 포함하는 PWLAN_PROFILE_INFO_LIST 구조체입니다.

반환 값

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

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

반환 코드 설명
ERROR_INVALID_HANDLE
핸들 테이블에 hClientHandle 핸들을 찾을 수 없습니다.
ERROR_INVALID_PARAMETER
매개 변수가 잘못되었습니다. 이 오류는 다음 조건 중 어느 것이 발생하는 경우 반환됩니다.
  • hClientHandleNULL입니다.
  • pInterfaceGuidNULL입니다.
  • ppProfileListNULL입니다.
  • pReservedNULL이 아닙니다.
ERROR_NOT_ENOUGH_MEMORY
이 요청을 처리하고 쿼리 결과에 대한 메모리를 할당하는 데 메모리가 부족합니다.
RPC_STATUS
다양한 오류 코드.

설명

WlanGetProfileList 함수는 무선 인터페이스의 무선 프로필에 대한 기본 정보만 반환합니다. 무선 인터페이스의 무선 프로필 목록은 기본 설정 순서로 검색됩니다. WlanSetProfilePosition을 사용하여 무선 인터페이스에서 무선 프로필의 기본 설정 순서를 변경할 수 있습니다.

무선 인터페이스의 무선 프로필에 대한 자세한 내용은 WlanGetProfile 함수를 사용하여 검색할 수 있습니다. WlanGetProfileCustomUserData 함수를 사용하여 무선 인터페이스에서 무선 프로필에 대한 사용자 지정 사용자 데이터를 검색할 수 있습니다. WlanEnumInterfaces 함수를 사용하여 로컬 컴퓨터의 무선 인터페이스 및 연결된 GUID 목록을 검색할 수 있습니다.

WlanGetProfileList 함수는 ppProfileList 매개 변수가 가리키는 버퍼에 반환된 프로필 목록에 대한 메모리를 할당합니다. 호출자는 이 버퍼가 더 이상 필요하지 않을 때 WlanFreeMemory 함수를 사용하여 이 메모리를 해제합니다.

SP3이 있는 Windows XP 및 SP2를 사용하는 Windows XP용 무선 LAN API: 게스트 프로필, WPS(무선 프로비저닝 서비스) 인증을 사용하는 프로필 및 Wi-Fi 보호된 Access-None(WPA-None) 인증이 있는 프로필은 지원되지 않습니다. 이러한 유형의 프로필은 이 형식의 프로필이 기본 설정 프로필 목록에 표시되더라도 WlanGetProfileList에서 반환되지 않습니다.

예제

다음 예제에서는 로컬 컴퓨터의 무선 LAN 인터페이스를 열거하고, 각 무선 LAN 인터페이스에서 프로필 목록을 검색하고, 검색된 WLAN_PROFILE_INFO_LISTWLAN_PROFILE_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;
    DWORD dwRetVal = 0;
    int iRet = 0;
    
    WCHAR GuidString[39] = {0};

    unsigned int i, j;

    /* variables used for WlanEnumInterfaces  */

    PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
    PWLAN_INTERFACE_INFO pIfInfo = NULL;

    PWLAN_PROFILE_INFO_LIST pProfileList = NULL;
    PWLAN_PROFILE_INFO pProfile = NULL;

    dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
    if (dwResult != ERROR_SUCCESS) {
        wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult);
        return 1;
        // You can use FormatMessage here to find out why the function failed
    }

    dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
    if (dwResult != ERROR_SUCCESS) {
        wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);
        return 1;
        // You can use FormatMessage here to find out why the function failed
    } else {
        wprintf(L"WLAN_INTERFACE_INFO_LIST for this system\n");

        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[%u]:\t %lu\n", i, i);
            iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 
                sizeof(GuidString)/sizeof(*GuidString)); 
            // For c rather than C++ source code, the above line needs to be
            // iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 
            //     sizeof(GuidString)/sizeof(*GuidString)); 
            if (iRet == 0)
                wprintf(L"StringFromGUID2 failed\n");
            else {
                wprintf(L"  Interface GUID[%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");

            dwResult = WlanGetProfileList(hClient,
                                             &pIfInfo->InterfaceGuid,
                                             NULL, 
                                             &pProfileList);

            if (dwResult != ERROR_SUCCESS) {
                wprintf(L"WlanGetProfileList failed with error: %u\n",
                        dwResult);
                dwRetVal = 1;
                // You can use FormatMessage to find out why the function failed
            } else {
                wprintf(L"WLAN_PROFILE_INFO_LIST for this interface\n");

                wprintf(L"  Num Entries: %lu\n\n", pProfileList->dwNumberOfItems);

                for (j = 0; j < pProfileList->dwNumberOfItems; j++) {
                    pProfile =
                        (WLAN_PROFILE_INFO *) & pProfileList->ProfileInfo[j];

                    wprintf(L"  Profile Name[%u]:  %ws\n", j, pProfile->strProfileName);
                    
                    wprintf(L"  Flags[%u]:\t    0x%x", j, pProfile->dwFlags);
                    if (pProfile->dwFlags & WLAN_PROFILE_GROUP_POLICY)
                        wprintf(L"   Group Policy");
                    if (pProfile->dwFlags & WLAN_PROFILE_USER)
                        wprintf(L"   Per User Profile");
                    wprintf(L"\n");    

                    wprintf(L"\n");
                }
            }
        }

    }
    if (pProfileList != NULL) {
        WlanFreeMemory(pProfileList);
        pProfileList = NULL;
    }

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

    return dwRetVal;
}

요구 사항

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

참고 항목

WLAN_PROFILE_INFO

WLAN_PROFILE_INFO_LIST

WlanDeleteProfile

WlanFreeMemory

WlanGetProfile

WlanGetProfileCustomUserData

WlanOpenHandle

WlanRenameProfile

WlanSaveTemporaryProfile

WlanSetProfile

WlanSetProfileCustomUserData

WlanSetProfileEapUserData

WlanSetProfileEapXmlUserData

WlanSetProfileList

WlanSetProfilePosition