Функция 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 беспроводного интерфейса.
Список GUID для беспроводных интерфейсов на локальном компьютере можно получить с помощью функции WlanEnumInterfaces .
[in] pReserved
Зарезервировано для последующего использования. Для параметра должно быть задано значение NULL.
[out] ppProfileList
Структура PWLAN_PROFILE_INFO_LIST , содержащая список сведений о профиле.
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение будет ERROR_SUCCESS.
Если функция завершается сбоем, возвращаемое значение может быть одним из следующих кодов возврата.
Код возврата | Описание |
---|---|
|
Дескриптор hClientHandle не найден в таблице дескрипторов. |
|
Неправильный параметр. Эта ошибка возвращается при возникновении любого из следующих условий:
|
|
Недостаточно памяти для обработки этого запроса и выделения памяти для результатов запроса. |
|
Различные коды ошибок. |
Комментарии
Функция WlanGetProfileList возвращает только основные сведения о беспроводных профилях в беспроводном интерфейсе. Список беспроводных профилей в беспроводном интерфейсе извлекается в порядке предпочтения. WlanSetProfilePosition можно использовать для изменения порядка предпочтений для беспроводных профилей в беспроводном интерфейсе.
Более подробные сведения о беспроводном профиле в беспроводном интерфейсе можно получить с помощью функции WlanGetProfile . Функцию WlanGetProfileCustomUserData можно использовать для получения пользовательских данных пользователя для беспроводного профиля в беспроводном интерфейсе. Список беспроводных интерфейсов и связанных идентификаторов GUID на локальном компьютере можно получить с помощью функции WlanEnumInterfaces .
Функция WlanGetProfileList выделяет память для списка профилей, возвращаемых в буфере, на который указывает параметр ppProfileList . Вызывающий объект отвечает за освобождение памяти с помощью функции WlanFreeMemory , если этот буфер больше не нужен.
Windows XP с пакетом обновления 3 (SP3) и API беспроводной локальной сети для Windows XP с пакетом обновления 2 (SP2): Гостевые профили, профили с проверкой подлинности службы беспроводной подготовки (WPS) и профили с проверкой подлинности Wi-Fi защищенных Access-None (WPA-None) не поддерживаются. WlanGetProfileList не возвращает эти типы профилей, даже если профиль этого типа отображается в списке предпочтительных профилей.
Примеры
В следующем примере перечисляются интерфейсы беспроводной локальной сети на локальном компьютере, извлекается список профилей для каждого интерфейса беспроводной локальной сети и выводится значение из полученного WLAN_PROFILE_INFO_LIST, содержащего записи WLAN_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 с пакетом обновления 3 (SP3) [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | wlanapi.h (включая Wlanapi.h) |
Библиотека | Wlanapi.lib |
DLL | Wlanapi.dll |
Распространяемые компоненты | API беспроводной локальной сети для Windows XP с пакетом обновления 2 (SP2) |