Bagikan melalui


Fungsi WlanGetProfileList (wlanapi.h)

Fungsi WlanGetProfileList mengambil daftar profil dalam urutan preferensi.

Sintaks

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

Parameter

[in] hClientHandle

Handel sesi klien, diperoleh dengan panggilan sebelumnya ke fungsi WlanOpenHandle .

[in] pInterfaceGuid

GUID antarmuka nirkabel.

Daftar GUID untuk antarmuka nirkabel pada komputer lokal dapat diambil menggunakan fungsi WlanEnumInterfaces .

[in] pReserved

Disiapkan untuk penggunaan masa mendatang. Harus diatur ke NULL.

[out] ppProfileList

Struktur PWLAN_PROFILE_INFO_LIST yang berisi daftar informasi profil.

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan ERROR_SUCCESS.

Jika fungsi gagal, nilai yang dikembalikan mungkin salah satu kode pengembalian berikut.

Menampilkan kode Deskripsi
ERROR_INVALID_HANDLE
Handel hClientHandle tidak ditemukan dalam tabel handel.
ERROR_INVALID_PARAMETER
Parameter salah. Kesalahan ini dikembalikan jika salah satu kondisi berikut terjadi:
  • hClientHandle adalah NULL.
  • pInterfaceGuid adalah NULL.
  • ppProfileList adalah NULL.
  • pReserved bukan NULL.
ERROR_NOT_ENOUGH_MEMORY
Memori tidak cukup tersedia untuk memproses permintaan ini dan mengalokasikan memori untuk hasil kueri.
RPC_STATUS
Berbagai kode kesalahan.

Keterangan

Fungsi WlanGetProfileList hanya mengembalikan informasi dasar pada profil nirkabel pada antarmuka nirkabel. Daftar profil nirkabel pada antarmuka nirkabel diambil dalam urutan preferensi. WlanSetProfilePosition dapat digunakan untuk mengubah urutan preferensi profil nirkabel pada antarmuka nirkabel.

Informasi lebih rinci untuk profil nirkabel pada antarmuka nirkabel dapat diambil dengan menggunakan fungsi WlanGetProfile . Fungsi WlanGetProfileCustomUserData dapat digunakan untuk mengambil data pengguna kustom untuk profil nirkabel pada antarmuka nirkabel. Daftar antarmuka nirkabel dan GUID terkait di komputer lokal dapat diambil menggunakan fungsi WlanEnumInterfaces .

Fungsi WlanGetProfileList mengalokasikan memori untuk daftar profil yang dikembalikan dalam buffer yang diarahkan oleh parameter ppProfileList . Pemanggil bertanggung jawab untuk membebaskan memori ini menggunakan fungsi WlanFreeMemory ketika buffer ini tidak lagi diperlukan.

Windows XP dengan SP3 dan WIRELESS LAN API untuk Windows XP dengan SP2: Profil tamu, profil dengan autentikasi Wireless Provisioning Service (WPS), dan profil dengan autentikasi Wi-Fi Protected Access-None (WPA-None) tidak didukung. Jenis profil ini tidak dikembalikan oleh WlanGetProfileList, bahkan jika profil jenis ini muncul di daftar profil pilihan.

Contoh

Contoh berikut menghitung antarmuka LAN nirkabel di komputer lokal, mengambil daftar profil pada setiap antarmuka LAN nirkabel, dan mencetak nilai dari WLAN_PROFILE_INFO_LIST yang diambil yang berisi entri WLAN_PROFILE_INFO .

Catatan Contoh ini akan gagal dimuat pada Windows Server 2008 dan Windows Server 2008 R2 jika Layanan LAN Nirkabel tidak diinstal dan dimulai.
 
#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;
}

Persyaratan

   
Klien minimum yang didukung Windows Vista, Windows XP dengan SP3 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 [hanya aplikasi desktop]
Target Platform Windows
Header wlanapi.h (termasuk Wlanapi.h)
Pustaka Wlanapi.lib
DLL Wlanapi.dll
Redistribusi API LAN Nirkabel untuk Windows XP dengan SP2

Lihat juga

WLAN_PROFILE_INFO

WLAN_PROFILE_INFO_LIST

WlanDeleteProfile

WlanFreeMemory

WlanGetProfile

WlanGetProfileCustomUserData

WlanOpenHandle

WlanRenameProfile

WlanSaveTemporaryProfile

WlanSetProfile

WlanSetProfileCustomUserData

WlanSetProfileEapUserData

WlanSetProfileEapXmlUserData

WlanSetProfileList

WlanSetProfilePosition