Compartilhar via


Função WlanGetProfileList (wlanapi.h)

A função WlanGetProfileList recupera a lista de perfis na ordem de preferência.

Sintaxe

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

Parâmetros

[in] hClientHandle

O identificador de sessão do cliente, obtido por uma chamada anterior para a função WlanOpenHandle .

[in] pInterfaceGuid

O GUID da interface sem fio.

Uma lista dos GUIDs para interfaces sem fio no computador local pode ser recuperada usando a função WlanEnumInterfaces .

[in] pReserved

Reservado para uso futuro. Deve ser definido como NULL.

[out] ppProfileList

Uma estrutura PWLAN_PROFILE_INFO_LIST que contém a lista de informações de perfil.

Valor retornado

Se a função obtiver êxito, o valor retornado será ERROR_SUCCESS.

Se a função falhar, o valor retornado poderá ser um dos seguintes códigos de retorno.

Código de retorno Descrição
ERROR_INVALID_HANDLE
O identificador hClientHandle não foi encontrado na tabela de identificador.
ERROR_INVALID_PARAMETER
Um parâmetro está incorreto. Esse erro será retornado se alguma das seguintes condições ocorrer:
  • hClientHandle é NULL.
  • pInterfaceGuid é NULL.
  • ppProfileList é NULL.
  • pReserved não é NULL.
ERROR_NOT_ENOUGH_MEMORY
Não há memória suficiente disponível para processar essa solicitação e alocar memória para os resultados da consulta.
RPC_STATUS
Vários códigos de erro.

Comentários

A função WlanGetProfileList retorna apenas as informações básicas sobre os perfis sem fio em uma interface sem fio. A lista de perfis sem fio em uma interface sem fio é recuperada na ordem de preferência. O WlanSetProfilePosition pode ser usado para alterar a ordem de preferência para os perfis sem fio em uma interface sem fio.

Informações mais detalhadas para um perfil sem fio em uma interface sem fio podem ser recuperadas usando a função WlanGetProfile . A função WlanGetProfileCustomUserData pode ser usada para recuperar dados de usuário personalizados para um perfil sem fio em uma interface sem fio. Uma lista das interfaces sem fio e guids associados no computador local pode ser recuperada usando a função WlanEnumInterfaces .

A função WlanGetProfileList aloca memória para a lista de perfis retornados no buffer apontado pelo parâmetro ppProfileList . O chamador é responsável por liberar essa memória usando a função WlanFreeMemory quando esse buffer não for mais necessário.

Windows XP com SP3 e API lan sem fio para Windows XP com SP2: Não há suporte para perfis de convidado, perfis com autenticação WPS (Serviço de Provisionamento Sem Fio) e perfis com autenticação Wi-Fi Access-None Protegida (WPA-None). Esses tipos de perfis não são retornados por WlanGetProfileList, mesmo que um perfil desse tipo apareça na lista de perfis preferencial.

Exemplos

O exemplo a seguir enumera as interfaces lan sem fio no computador local, recupera a lista de perfis em cada interface lan sem fio e imprime valores do WLAN_PROFILE_INFO_LIST recuperado que contém as entradas WLAN_PROFILE_INFO .

Nota Este exemplo falhará ao carregar no Windows Server 2008 e no Windows Server 2008 R2 se o Serviço de LAN Sem Fio não estiver instalado e iniciado.
 
#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;
}

Requisitos

   
Cliente mínimo com suporte Windows Vista, Windows XP com SP3 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wlanapi.h (inclua Wlanapi.h)
Biblioteca Wlanapi.lib
DLL Wlanapi.dll
Redistribuível API de LAN sem fio para Windows XP com SP2

Confira também

WLAN_PROFILE_INFO

WLAN_PROFILE_INFO_LIST

WlanDeleteProfile

WlanFreeMemory

WlanGetProfile

WlanGetProfileCustomUserData

WlanOpenHandle

WlanRenameProfile

WlanSaveTemporaryProfile

WlanSetProfile

WlanSetProfileCustomUserData

WlanSetProfileEapUserData

WlanSetProfileEapXmlUserData

WlanSetProfileList

WlanSetProfilePosition