Funzione WlanGetProfileCustomUserData (wlanapi.h)
La funzione WlanGetProfileCustomUserData ottiene i dati utente personalizzati associati a un profilo wireless.
Sintassi
DWORD WlanGetProfileCustomUserData(
[in] HANDLE hClientHandle,
[in] const GUID *pInterfaceGuid,
[in] LPCWSTR strProfileName,
PVOID pReserved,
[out] DWORD *pdwDataSize,
[out] PBYTE *ppData
);
Parametri
[in] hClientHandle
Handle di sessione del client ottenuto da una chiamata precedente alla funzione WlanOpenHandle .
[in] pInterfaceGuid
Puntatore al GUID dell'interfaccia LAN wireless.
[in] strProfileName
Nome del profilo con cui sono associati i dati utente personalizzati. I nomi dei profili sono distinzione tra maiuscole e minuscole. Questa stringa deve essere terminata con null.
pReserved
Riservato per utilizzi futuri. Deve essere impostato su NULL.
[out] pdwDataSize
Dimensioni, in byte, del buffer dei dati utente a cui fa riferimento il parametro ppData .
[out] ppData
Puntatore ai dati utente.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è ERROR_SUCCESS.
Se la funzione ha esito negativo, il valore restituito può essere uno dei codici restituiti seguenti.
Codice restituito | Descrizione |
---|---|
|
Non è possibile trovare il file specificato. Questo errore viene restituito se non esistono dati personalizzati utente per il profilo specificato. |
|
Il parametro hClientHandle è NULLo non valido, il parametro pInterfaceGuidè NULL, il parametro strProfileName è NULL, il parametro pReserved non è NULL, il parametro pdwDataSize è 0 o il parametro ppData è NULL. |
|
Non è possibile trovare il file specificato. Questo errore viene restituito se non esistono dati utente personalizzati per il profilo specificato. |
|
L'handle hClientHandle non è stato trovato nella tabella handle. |
|
Questa funzione è stata chiamata da una piattaforma non supportata. Questo valore verrà restituito se questa funzione è stata chiamata da un'API Windows XP con SP3 o WIRELESS LAN per Windows XP con il client SP2. |
|
Vari codici di errore. |
Commenti
Per ogni profilo WLAN wireless usato dal servizio Native Wifi AutoConfig, Windows mantiene il concetto di dati utente personalizzati. Questi dati utente personalizzati non sono inizialmente esistenti, ma possono essere impostati chiamando la funzione WlanSetProfileCustomUserData . I dati utente personalizzati vengono reimpostati in qualsiasi momento in cui il profilo viene modificato chiamando la funzione WlanSetProfile .
Dopo aver impostato i dati utente personalizzati, questi dati possono essere accessibili usando la funzione WlanGetProfileCustomUserData .
Il chiamante è responsabile della liberazione della memoria allocata per il buffer a cui punta il parametro ppData usando la funzione WlanFreeMemory .
Esempio
L'esempio seguente enumera le interfacce LAN wireless nel computer locale e quindi tenta di recuperare le informazioni sui dati utente personalizzati per un profilo wireless specifico in ogni interfaccia LAN wireless. Le dimensioni dei dati personalizzati dell'utente sono stampate.
#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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista [solo app desktop] |
Server minimo supportato | Windows Server 2008 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | wlanapi.h (include Wlanapi.h) |
Libreria | Wlanapi.lib |
DLL | Wlanapi.dll |