Поделиться через


Функция WlanEnumInterfaces (wlanapi.h)

Функция WlanEnumInterfaces перечисляет все интерфейсы беспроводной локальной сети, которые в настоящее время включены на локальном компьютере.

Синтаксис

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 .

Буфер для возвращаемого WLAN_INTERFACE_INFO_LIST выделяется функцией WlanEnumInterfaces , если вызов выполнен успешно.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение будет ERROR_SUCCESS.

Если функция завершается сбоем, возвращаемое значение может быть одним из следующих кодов возврата.

Код возврата Описание
ERROR_INVALID_PARAMETER
Неправильный параметр. Эта ошибка возвращается, если параметр hClientHandle или ppInterfaceList имеет значение NULL. Эта ошибка возвращается, если значение pReserved не равно NULL. Эта ошибка также возвращается, если параметр hClientHandle недопустим.
ERROR_INVALID_HANDLE
Дескриптор hClientHandle не найден в таблице дескрипторов.
RPC_STATUS
Различные коды ошибок.
ERROR_NOT_ENOUGH_MEMORY
Недостаточно памяти для обработки этого запроса и выделения памяти для результатов запроса.

Комментарии

Функция WlanEnumInterfaces выделяет память для списка возвращенных интерфейсов, возвращаемого в буфере, на который указывает параметр ppInterfaceList при успешном выполнении функции. Память, используемую для буфера, на который указывает параметр ppInterfaceList , должна быть освобождена путем вызова функции WlanFreeMemory после того, как буфер больше не нужен.

Примеры

В следующем примере перечисляются интерфейсы беспроводной локальной сети на локальном компьютере и выводится значение из полученной структуры WLAN_INTERFACE_INFO_LIST и перечисленных WLAN_INTERFACE_INFO структур.

Примечание Этот пример не сможет загрузиться в 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 с пакетом обновления 3 (SP3) [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header wlanapi.h (включая Wlanapi.h)
Библиотека Wlanapi.lib
DLL Wlanapi.dll
Распространяемые компоненты API беспроводной локальной сети для Windows XP с пакетом обновления 2 (SP2)

См. также раздел

WLAN_INTERFACE_INFO

WLAN_INTERFACE_INFO_LIST

WlanFreeMemory