Share via


WlanGetProfileList 関数 (wlanapi.h)

WlanGetProfileList 関数は、プロファイルの一覧を優先順に取得します。

構文

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

パラメーター

[in] hClientHandle

WlanOpenHandle 関数の以前の呼び出しによって取得されたクライアントのセッション ハンドル。

[in] pInterfaceGuid

ワイヤレス インターフェイスの GUID。

ローカル コンピューター上のワイヤレス インターフェイスの GUID の一覧は、 WlanEnumInterfaces 関数を使用して取得できます。

[in] pReserved

将来利用するために予約されています。 NULL に設定する必要があります。

[out] ppProfileList

プロファイル情報の一覧を含む PWLAN_PROFILE_INFO_LIST 構造体。

戻り値

関数が成功した場合、戻り値は ERROR_SUCCESS です。

関数が失敗した場合、戻り値は次のいずれかのリターン コードになります。

リターン コード 説明
ERROR_INVALID_HANDLE
ハンドル テーブルにハンドル hClientHandle が見つかりませんでした。
ERROR_INVALID_PARAMETER
パラメーターが正しくありません。 このエラーは、次のいずれかの条件が発生した場合に返されます。
  • hClientHandleNULL です
  • pInterfaceGuidNULL です
  • ppProfileListNULL です
  • pReservedNULL ではありません。
ERROR_NOT_ENOUGH_MEMORY
この要求を処理し、クエリ結果のメモリを割り当てるのに十分なメモリがありません。
RPC_STATUS
さまざまなエラー コード。

解説

WlanGetProfileList 関数は、ワイヤレス インターフェイス上のワイヤレス プロファイルに関する基本情報のみを返します。 ワイヤレス インターフェイス上のワイヤレス プロファイルの一覧は、優先順位で取得されます。 WlanSetProfilePosition を使用して、ワイヤレス インターフェイス上のワイヤレス プロファイルの優先順位を変更できます。

ワイヤレス インターフェイス上のワイヤレス プロファイルの詳細については、 WlanGetProfile 関数を使用して取得できます。 WlanGetProfileCustomUserData 関数を使用して、ワイヤレス インターフェイス上のワイヤレス プロファイルのカスタム ユーザー データを取得できます。 ローカル コンピューター上のワイヤレス インターフェイスと関連する GUID の一覧は、 WlanEnumInterfaces 関数を使用して取得できます。

WlanGetProfileList 関数は、ppProfileList パラメーターによって指されるバッファーで返されるプロファイルの一覧にメモリを割り当てます。 呼び出し元は、このバッファーが不要になったときに WlanFreeMemory 関数を使用してこのメモリを解放する必要があります。

SP3 を使用した Windows XP と、SP2 を使用した Windows XP 用のワイヤレス LAN API: ゲスト プロファイル、ワイヤレス プロビジョニング サービス (WPS) 認証を使用したプロファイル、および Wi-Fi Protected Access-None (WPA-None) 認証を使用したプロファイルはサポートされていません。 この種類のプロファイルが優先プロファイル リストに表示されている場合でも、これらの種類のプロファイルは WlanGetProfileList によって返されません。

次の例では、ローカル コンピューター上のワイヤレス LAN インターフェイスを列挙し、各ワイヤレス LAN インターフェイスのプロファイルの一覧を取得し、WLAN_PROFILE_INFO エントリを含む取得したWLAN_PROFILE_INFO_LISTから値を出力します。

メモ この例では、ワイヤレス LAN サービスがインストールされて起動されていない場合、Windows Server 2008 および Windows Server 2008 R2 で読み込みに失敗します。
 
#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;
}

要件

   
サポートされている最小のクライアント Windows Vista、WINDOWS XP と SP3 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー wlanapi.h (Wlanapi.h を含む)
Library Wlanapi.lib
[DLL] Wlanapi.dll
再頒布可能パッケージ Sp2 を使用した Windows XP 用ワイヤレス LAN API

関連項目

WLAN_PROFILE_INFO

WLAN_PROFILE_INFO_LIST

WlanDeleteProfile

WlanFreeMemory

WlanGetProfile

WlanGetProfileCustomUserData

WlanOpenHandle

WlanRenameProfile

WlanSaveTemporaryProfile

WlanSetProfile

WlanSetProfileCustomUserData

WlanSetProfileEapUserData

WlanSetProfileEapXmlUserData

WlanSetProfileList

WlanSetProfilePosition