WlanDeleteProfile 関数 (wlanapi.h)

WlanDeleteProfile 関数は、ローカル コンピューター上のワイヤレス インターフェイスのワイヤレス プロファイルを削除します。

構文

DWORD WlanDeleteProfile(
  [in] HANDLE     hClientHandle,
  [in] const GUID *pInterfaceGuid,
  [in] LPCWSTR    strProfileName,
       PVOID      pReserved
);

パラメーター

[in] hClientHandle

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

[in] pInterfaceGuid

プロファイルを削除するインターフェイスの GUID。

[in] strProfileName

削除するプロファイルの名前。 プロファイル名では大文字と小文字が区別されます。 この文字列は NULL で終わる必要があります。

WINDOWS XP SP3 とワイヤレス LAN API for Windows XP SP2: 指定された名前は、ネットワークの SSID から自動的に派生したプロファイル名と一致する必要があります。 インフラストラクチャ ネットワーク プロファイルの場合は、プロファイル名に SSID を指定する必要があります。 アドホック ネットワーク プロファイルの場合、指定された名前はアドホック ネットワークの SSID の後に が -adhoc続く必要があります。

pReserved

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

戻り値

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

関数が失敗した場合、戻り値は次のいずれかの戻りコードになる可能性があります。

リターン コード 説明
ERROR_INVALID_PARAMETER
hClientHandle パラメーターが NULL であるか無効か、pInterfaceGuid パラメーターが NULLstrProfileName パラメーターが NULL、または pReservedNULL ではありません。
ERROR_INVALID_HANDLE
hClientHandle パラメーターで指定されたハンドルがハンドル テーブルに見つかりませんでした。
ERROR_NOT_FOUND
strProfileName で指定されたワイヤレス プロファイルがプロファイル ストアに見つかりませんでした。
ERROR_ACCESS_DENIED
呼び出し元には、プロファイルを削除するための十分なアクセス許可がありません。
RPC_STATUS
さまざまなエラー コード。

注釈

WlanDeleteProfile 関数は、ローカル コンピューター上のワイヤレス インターフェイスのワイヤレス プロファイルを削除します。

すべてのワイヤレス LAN 機能では、プロファイル操作を実行するときにワイヤレス インターフェイスのインターフェイス GUID が必要です。 ワイヤレス インターフェイスが削除されると、その状態はワイヤレス LAN サービス (WLANSVC) からクリアされ、プロファイル操作は実行できません。

WlanDeleteProfile 関数は、ワイヤレス LAN プロファイルの pInterfaceGuid パラメーターで指定されたワイヤレス インターフェイスがシステムから削除された場合 (たとえば、削除された USB ワイヤレス アダプター)、ERROR_INVALID_PARAMETERで失敗する可能性があります。

コマンド ラインでプロファイルを削除するには、 netsh wlan delete profile コマンドを使用します。 詳細については、「 ワイヤレス ローカル エリア ネットワーク (wlan) の Netsh コマンド」を参照してください。

次の例では、ローカル コンピューター上のワイヤレス LAN インターフェイスを列挙し、各ワイヤレス LAN インターフェイスで特定のワイヤレス プロファイルの削除を試みます。

メモ この例では、ワイヤレス 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 _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;

    // Validate the parameters
    if (argc < 2) {
        wprintf(L"usage: %s <profile>\n", argv[0]);
        wprintf(L"   Deletes a wireless profile\n");
        wprintf(L"   Example\n");
        wprintf(L"       %s \"Default Wireless\"\n", argv[0]);
        exit(1);
    }

    pProfileName = argv[1];

    wprintf(L"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 < 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 = WlanDeleteProfile(hClient,
                                         &pIfInfo->InterfaceGuid,
                                         pProfileName, NULL);

            if (dwResult != ERROR_SUCCESS) {
                wprintf
                    (L"WlanDeleteProfile failed on this interface with error: %u\n",
                     dwResult);
                if (dwResult == ERROR_NOT_FOUND)
                    wprintf
                        (L"  Error was the following profile was not found: %ws\n",
                         pProfileName);
                // You can use FormatMessage to find out why the function failed
            } else {
                wprintf(L"Successfully deleted Profile Name: %ws\n",
                        pProfileName);
            }
            wprintf(L"\n");
        }

    }
    if (pIfList != NULL) {
        WlanFreeMemory(pIfList);
        pIfList = NULL;
    }

    return dwRetVal;
}


要件

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

こちらもご覧ください

ネイティブ Wifi API のアクセス許可

WlanGetProfile

WlanGetProfileList

WlanRenameProfile

WlanSetProfile