Compartir a través de


Función WlanGetProfileList (wlanapi.h)

La función WlanGetProfileList recupera la lista de perfiles en orden de preferencia.

Sintaxis

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

Parámetros

[in] hClientHandle

Identificador de sesión del cliente, obtenido por una llamada anterior a la función WlanOpenHandle .

[in] pInterfaceGuid

GUID de la interfaz inalámbrica.

Se puede recuperar una lista de los GUID para interfaces inalámbricas en el equipo local mediante la función WlanEnumInterfaces .

[in] pReserved

Reservado para uso futuro. Debe establecerse en NULL.

[out] ppProfileList

Estructura PWLAN_PROFILE_INFO_LIST que contiene la lista de información de perfil.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es ERROR_SUCCESS.

Si se produce un error en la función, el valor devuelto puede ser uno de los siguientes códigos de retorno.

Código devuelto Descripción
ERROR_INVALID_HANDLE
No se encontró el identificador hClientHandle en la tabla handle.
ERROR_INVALID_PARAMETER
Un parámetro es incorrecto. Este error se devuelve si se produce alguna de las condiciones siguientes:
  • hClientHandle es NULL.
  • pInterfaceGuid es NULL.
  • ppProfileList es NULL.
  • pReserved no es NULL.
ERROR_NOT_ENOUGH_MEMORY
No hay suficiente memoria disponible para procesar esta solicitud y asignar memoria para los resultados de la consulta.
RPC_STATUS
Varios códigos de error.

Observaciones

La función WlanGetProfileList devuelve solo la información básica de los perfiles inalámbricos en una interfaz inalámbrica. La lista de perfiles inalámbricos en una interfaz inalámbrica se recupera en el orden de preferencia. WlanSetProfilePosition se puede usar para cambiar el orden de preferencia de los perfiles inalámbricos en una interfaz inalámbrica.

Se puede recuperar información más detallada para un perfil inalámbrico en una interfaz inalámbrica mediante la función WlanGetProfile . La función WlanGetProfileCustomUserData se puede usar para recuperar datos de usuario personalizados para un perfil inalámbrico en una interfaz inalámbrica. Se puede recuperar una lista de las interfaces inalámbricas y los GUID asociados en el equipo local mediante la función WlanEnumInterfaces .

La función WlanGetProfileList asigna memoria para la lista de perfiles devueltos en el búfer al que apunta el parámetro ppProfileList . El autor de la llamada es responsable de liberar esta memoria mediante la función WlanFreeMemory cuando este búfer ya no es necesario.

Windows XP con SP3 y LAN inalámbrica API para Windows XP con SP2: No se admiten perfiles de invitado, perfiles con autenticación del Servicio de aprovisionamiento inalámbrico (WPS) y perfiles con Wi-Fi autenticación de Access-None protegida (WPA-None). WlanGetProfileList no devuelve estos tipos de perfiles, aunque aparezca un perfil de este tipo en la lista de perfiles preferidos.

Ejemplos

En el ejemplo siguiente se enumeran las interfaces de LAN inalámbricas en el equipo local, se recupera la lista de perfiles en cada interfaz LAN inalámbrica y se imprimen valores de la WLAN_PROFILE_INFO_LIST recuperada que contiene las entradas WLAN_PROFILE_INFO .

Nota Este ejemplo no se cargará en Windows Server 2008 y Windows Server 2008 R2 si el servicio LAN inalámbrico no está 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 compatible Windows Vista, Windows XP con SP3 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado wlanapi.h (incluya Wlanapi.h)
Library Wlanapi.lib
Archivo DLL Wlanapi.dll
Redistribuible API de LAN inalámbrica para Windows XP con SP2

Consulte también

WLAN_PROFILE_INFO

WLAN_PROFILE_INFO_LIST

WlanDeleteProfile

WlanFreeMemory

WlanGetProfile

WlanGetProfileCustomUserData

WlanOpenHandle

WlanRenameProfile

WlanSaveTemporaryProfile

WlanSetProfile

WlanSetProfileCustomUserData

WlanSetProfileEapUserData

WlanSetProfileEapXmlUserData

WlanSetProfileList

WlanSetProfilePosition