WlanGetProfileList-Funktion (wlanapi.h)

Die WlanGetProfileList-Funktion ruft die Liste der Profile in der bevorzugten Reihenfolge ab.

Syntax

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

Parameter

[in] hClientHandle

Das Sitzungshandle des Clients, das durch einen vorherigen Aufruf der WlanOpenHandle-Funktion abgerufen wurde.

[in] pInterfaceGuid

Die GUID der drahtlosen Schnittstelle.

Eine Liste der GUIDs für drahtlose Schnittstellen auf dem lokalen Computer kann mit der Funktion WlanEnumInterfaces abgerufen werden.

[in] pReserved

Für die zukünftige Verwendung reserviert. Muss auf NULL festgelegt werden.

[out] ppProfileList

Eine PWLAN_PROFILE_INFO_LIST-Struktur , die die Liste der Profilinformationen enthält.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert ERROR_SUCCESS.

Wenn die Funktion fehlschlägt, kann der Rückgabewert einer der folgenden Rückgabecodes sein.

Rückgabecode Beschreibung
ERROR_INVALID_HANDLE
Das Handle hClientHandle wurde in der Handletabelle nicht gefunden.
ERROR_INVALID_PARAMETER
Ein Parameter ist falsch. Dieser Fehler wird zurückgegeben, wenn eine der folgenden Bedingungen auftritt:
  • hClientHandle ist NULL.
  • pInterfaceGuid ist NULL.
  • ppProfileList ist NULL.
  • pReserved ist nicht NULL.
ERROR_NOT_ENOUGH_MEMORY
Es ist nicht genügend Arbeitsspeicher verfügbar, um diese Anforderung zu verarbeiten und Arbeitsspeicher für die Abfrageergebnisse zuzuweisen.
RPC_STATUS
Verschiedene Fehlercodes.

Hinweise

Die WlanGetProfileList-Funktion gibt nur die grundlegenden Informationen zu den Drahtlosprofilen auf einer Drahtlosen Schnittstelle zurück. Die Liste der Drahtlosprofile auf einer Drahtlosen Schnittstelle wird in der Einstellungsreihenfolge abgerufen. WlanSetProfilePosition kann verwendet werden, um die Einstellungsreihenfolge für die Drahtlosprofile auf einer Drahtlosen Schnittstelle zu ändern.

Ausführlichere Informationen zu einem Drahtlosprofil auf einer Drahtlosen Schnittstelle können mithilfe der WlanGetProfile-Funktion abgerufen werden. Die WlanGetProfileCustomUserData-Funktion kann verwendet werden, um benutzerdefinierte Benutzerdaten für ein Drahtlosprofil auf einer drahtlosen Schnittstelle abzurufen. Eine Liste der Drahtlosen Schnittstellen und zugehörigen GUIDs auf dem lokalen Computer kann mithilfe der WlanEnumInterfaces-Funktion abgerufen werden.

Die WlanGetProfileList-Funktion ordnet Arbeitsspeicher für die Liste der Profile zu, die im Puffer zurückgegeben werden, auf den der ppProfileList-Parameter verweist. Der Aufrufer ist dafür verantwortlich, diesen Arbeitsspeicher mithilfe der WlanFreeMemory-Funktion freizugeben, wenn dieser Puffer nicht mehr benötigt wird.

Windows XP mit SP3 und Wlan-API für Windows XP mit SP2: Gastprofile, Profile mit WPS-Authentifizierung (Wireless Provisioning Service) und Profile mit Wi-Fi Protected Access-None-Authentifizierung (WPA-None) werden nicht unterstützt. Diese Typen von Profilen werden von WlanGetProfileList nicht zurückgegeben, auch wenn ein Profil dieses Typs in der Liste der bevorzugten Profile angezeigt wird.

Beispiele

Im folgenden Beispiel werden die WLAN-Schnittstellen auf dem lokalen Computer aufgelistet, die Liste der Profile für jede WLAN-Schnittstelle abgerufen und Werte aus der abgerufenen WLAN_PROFILE_INFO_LIST ausgegeben, die die WLAN_PROFILE_INFO Einträge enthält.

Hinweis Dieses Beispiel kann nicht unter Windows Server 2008 und Windows Server 2008 R2 geladen werden, wenn der WLAN-Dienst nicht installiert und gestartet wird.
 
#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;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista, Windows XP mit SP3 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile wlanapi.h (wlanapi.h einschließen)
Bibliothek Wlanapi.lib
DLL Wlanapi.dll
Verteilbare Komponente Wlan-API für Windows XP mit SP2

Weitere Informationen

WLAN_PROFILE_INFO

WLAN_PROFILE_INFO_LIST

WlanDeleteProfile

WlanFreeMemory

WlanGetProfile

WlanGetProfileCustomUserData

WlanOpenHandle

WlanRenameProfile

WlanSaveTemporaryProfile

WlanSetProfile

WlanSetProfileCustomUserData

WlanSetProfileEapUserData

WlanSetProfileEapXmlUserData

WlanSetProfileList

WlanSetProfilePosition