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.
함수가 실패하면 반환 값은 다음 반환 코드 중 하나일 수 있습니다.
반환 코드 | 설명 |
---|---|
|
핸들 테이블에 hClientHandle 핸들을 찾을 수 없습니다. |
|
매개 변수가 잘못되었습니다. 이 오류는 다음 조건 중 어느 것이 발생하는 경우 반환됩니다.
|
|
이 요청을 처리하고 쿼리 결과에 대한 메모리를 할당하는 데 메모리가 부족합니다. |
|
다양한 오류 코드. |
설명
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 항목이 포함된 값을 출력합니다.
#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 |