Función WlanGetProfileCustomUserData (wlanapi.h)
La función WlanGetProfileCustomUserData obtiene los datos de usuario personalizados asociados a un perfil inalámbrico.
Sintaxis
DWORD WlanGetProfileCustomUserData(
[in] HANDLE hClientHandle,
[in] const GUID *pInterfaceGuid,
[in] LPCWSTR strProfileName,
PVOID pReserved,
[out] DWORD *pdwDataSize,
[out] PBYTE *ppData
);
Parámetros
[in] hClientHandle
Identificador de sesión del cliente, obtenido por una llamada anterior a la función WlanOpenHandle .
[in] pInterfaceGuid
Puntero al GUID de la interfaz LAN inalámbrica.
[in] strProfileName
Nombre del perfil con el que están asociados los datos de usuario personalizados. Los nombres de perfil distinguen mayúsculas de minúsculas. Esta cadena debe terminar en NULL.
pReserved
Reservado para uso futuro. Debe establecerse en NULL.
[out] pdwDataSize
Tamaño, en bytes, del búfer de datos de usuario al que apunta el parámetro ppData .
[out] ppData
Un puntero a los datos de usuario.
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 |
---|---|
|
El sistema no encuentra el archivo especificado. Este error se devuelve si no existe ningún dato personalizado de usuario para el perfil especificado. |
|
El parámetro hClientHandle es NULL o no válido, el parámetro pInterfaceGuid es NULL, el parámetro strProfileName es NULL, el parámetro pReserved no es NULL, el parámetro pdwDataSize es 0 o el parámetro ppData es NULL. |
|
El sistema no encuentra el archivo especificado. Este error se devuelve si no existe ningún dato de usuario personalizado para el perfil especificado. |
|
No se encontró el identificador hClientHandle en la tabla handle. |
|
Se llamó a esta función desde una plataforma no admitida. Este valor se devolverá si se llamó a esta función desde un Windows XP con SP3 o la API de LAN inalámbrica para Windows XP con el cliente SP2. |
|
Varios códigos de error. |
Comentarios
Para cada perfil wlan inalámbrico utilizado por el servicio Native Wifi AutoConfig, Windows mantiene el concepto de datos de usuario personalizados. Estos datos de usuario personalizados no existen inicialmente, pero se pueden establecer llamando a la función WlanSetProfileCustomUserData . Los datos de usuario personalizados se restablecen a vacíos cada vez que se modifica el perfil mediante una llamada a la función WlanSetProfile .
Una vez establecidos los datos de usuario personalizados, se puede acceder a estos datos mediante la función WlanGetProfileCustomUserData .
El autor de la llamada es responsable de liberar la memoria asignada para el búfer señalado por el parámetro ppData mediante la función WlanFreeMemory .
Ejemplos
En el ejemplo siguiente se enumeran las interfaces de LAN inalámbricas en el equipo local y, a continuación, se intenta recuperar cualquier información de datos de usuario personalizada para un perfil inalámbrico específico en cada interfaz LAN inalámbrica. Se imprime el tamaño de los datos personalizados del usuario.
#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 _cdecl wmain(int argc, WCHAR **argv)
{
// 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;
/* variables used for WlanEnumInterfaces */
PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
PWLAN_INTERFACE_INFO pIfInfo = NULL;
LPCWSTR pProfileName = NULL;
PBYTE pProfileData = NULL;
DWORD dwDataSize = 0;
// Validate the parameters
if (argc < 2) {
wprintf(L"usage: %s <profile>\n", argv[0]);
wprintf(L" Gets a wireless profile\n");
wprintf(L" Example\n");
wprintf(L" %s \"Default Wireless\"\n", argv[0]);
exit(1);
}
pProfileName = argv[1];
wprintf(L"Custom user data information for profile: %ws\n\n", pProfileName);
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" 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");
dwResult = WlanGetProfileCustomUserData(hClient,
&pIfInfo->InterfaceGuid,
pProfileName,
NULL,
&dwDataSize,
&pProfileData);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanGetProfileCustomData failed with error: %u\n",
dwResult);
// You can use FormatMessage to find out why the function failed
} else {
wprintf(L"Profile Name: %ws\n", pProfileName);
wprintf(L" dwDataSize:\t 0x%x\n", dwDataSize);
wprintf(L" Profile Custom Data:\n");
// wprintf(L"%ws\n\n", pProfileXml);
wprintf(L"\n");
wprintf(L"\n");
}
}
}
if (pProfileData != NULL) {
WlanFreeMemory(pProfileData);
pProfileData = NULL;
}
if (pIfList != NULL) {
WlanFreeMemory(pIfList);
pIfList = NULL;
}
return dwRetVal;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista [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 |