次の方法で共有


WZCEnumInterfaces 関数

[WZCEnumInterfaces は、Windows Vista および Windows Server 2008 以降ではサポートされていません。 代わりに、 WlanEnumInterfaces 関数を 使用します。 詳細については、「 ネイティブ Wifi API について」を参照してください。

WZCEnumInterfaces 関数は、ワイヤレス ゼロ構成サービスによって管理されているすべてのワイヤレス LAN インターフェイスを列挙します。

構文

DWORD WZCEnumInterfaces(
  _In_  LPWSTR           pSrvAddr,
  _Out_ PINTFS_KEY_TABLE pIntfs
);

パラメーター

pSrvAddr [in]

この関数を実行するコンピューターの名前を含む文字列へのポインター。 このパラメーターが NULL の場合、ワイヤレス ゼロ構成サービスはローカル コンピューターに列挙されます。

指定された pSrvAddr パラメーターがリモート コンピューターの場合、リモート コンピューターはリモート RPC 呼び出しをサポートする必要があります。

pIntfs [out]

すべてのインターフェイスのキー情報のテーブルを含む INTFS_KEY_TABLE 構造体へのポインター。

戻り値

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

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

リターン コード 説明
ERROR_ARENA_TRASHED
ストレージ制御ブロックが破棄されました。 このエラーは、ワイヤレス ゼロ構成サービスが内部オブジェクトを初期化していない場合に返されます。
RPC_S_UNKNOWN_IF
インターフェイスは不明です。
このエラーは、ワイヤレス ゼロ構成サービスが開始されていない場合に返されます。
RPC_X_NULL_REF_POINTER
null 参照ポインターがスタブに渡されました。
このエラーは、 pIntfs パラメーターが NULL の場合に返されます。
ERROR_NOT_ENOUGH_MEMORY
この要求を処理し、クエリ結果のメモリを割り当てるのに十分なメモリがありません。
RPC_STATUS
さまざまなエラー コード。

 

解説

pIntf が指すINTFS_KEY_TABLE構造体の dwNumIntfs メンバーは、WZCEnumInterfaces 関数を呼び出す前に 0 に設定する必要があります。 また、 pIntfs メンバーを NULL に設定する必要があります。

その後、他のワイヤレス ゼロ構成関数を呼び出す場合、アプリケーションは 、WZCEnumInterfaces 関数によって返される関連するキー情報を提供することによって、動作しているインターフェイスを識別する必要があります。

WZCEnumInterfaces がERROR_SUCCESSを返す場合、呼び出し元は LocalFree を呼び出して、この情報が不要になったら、返されるデータに割り当てられた内部バッファーを解放する必要があります。

注意

Wzcsapi.h ヘッダー ファイルと Wzcsapi.lib インポート ライブラリ ファイルは、Windows SDK では使用できません。

 

次の例では、ワイヤレス ゼロ構成サービスによって管理されているローカル コンピューター上のワイヤレス LAN インターフェイスを列挙し、各インターフェイスのインターフェイス GUID の値を出力します。

注意

この例は、Windows Vista 以降では失敗します。

 

#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>
#include <objbase.h>
#include <wtypes.h>

#include <stdio.h>
#include <stdlib.h>

// Wzcsapi.h and Wsczapi.lib were never shipped
// So we need to LOadlibrary and call the WZCEnumInterfaces function 
// in Wzcsapi.dll in the 

typedef struct
{
    LPWSTR wszGuid;
} INTF_KEY_ENTRY, *PINTF_KEY_ENTRY;

typedef struct
{
    DWORD dwNumIntfs;
    PINTF_KEY_ENTRY pIntfs;
} INTFS_KEY_TABLE, *PINTFS_KEY_TABLE;

DWORD WZCEnumInterfaces(LPWSTR pSrvAddr, PINTFS_KEY_TABLE pIntfs);

//Define the function prototype
typedef DWORD (CALLBACK* WZCEnumInterfacesType)(LPWSTR, PINTFS_KEY_TABLE);

int wmain()
{
    // Declare and initialize variables.

    DWORD dwResult = 0;
//    int iRet = 0;
    
//    WCHAR GuidString[40] = {0};
     
    int i;

    /* variables used for WZCEnumInterfaces  */
    
    PINTFS_KEY_TABLE pIfList; 
    PINTF_KEY_ENTRY pIfInfo;
    
    BOOL freeResult = FALSE;
    BOOL runTimeLinkSuccess = FALSE; 
    HINSTANCE dllHandle = NULL;              
    WZCEnumInterfacesType WZCEnumInterfacesPtr = NULL;

//    wprintf(L"Sample to test WZCEnumInterface\n");
    
    //Load the dll and keep the handle to it
    dllHandle = LoadLibrary( (LPCWSTR) L"wzcsapi.dll");

    // If the handle is valid, try to get the function address. 
    if (dllHandle == NULL) {
        dwResult = GetLastError();
        wprintf(L"LoadLibrary of wzcsapi.dll failed with error: %d\n", dwResult);
        if (dwResult ==  ERROR_MOD_NOT_FOUND)
            wprintf(L"Error: The specified module could not be found\n");
        return 1;
    }
    else  
    { 
        //Get pointer to our function using GetProcAddress:
        WZCEnumInterfacesPtr = (WZCEnumInterfacesType) GetProcAddress(dllHandle,
         "WZCEnumInterfaces");

        if (WZCEnumInterfacesPtr != NULL)
            runTimeLinkSuccess = TRUE;
        else {
            dwResult = GetLastError();   
            wprintf(L"GetProcAddress of WZCEnumInterfaces failed with error: %d\n", dwResult);
            return 1;
        }    
             
        // The function address is valid, allocate some memory for pIflist
        pIfList = (PINTFS_KEY_TABLE) LocalAlloc(LMEM_ZEROINIT,4096);
        if (pIfList == NULL) {    
            wprintf(L"Unable to allocate memory to store INTFS_KEY_TABLE\n");
            freeResult = FreeLibrary(dllHandle);
            return 1;
        }    

        // If the function address is valid, call the function. 
        if (runTimeLinkSuccess)
        {
            dwResult = WZCEnumInterfacesPtr(NULL, pIfList); 
            if (dwResult != ERROR_SUCCESS)  {
                wprintf(L"WZCEnumInterfaces failed with error: %u\n", dwResult);
                // FormatMessage can be used to find out why the function failed
                  //Free the library:
                freeResult = FreeLibrary(dllHandle);
                return 1;
            }
            else {
                wprintf(L"Num Entries: %lu\n", pIfList->dwNumIntfs);

                for (i = 0; i < (int) pIfList->dwNumIntfs; i++) {
                    pIfInfo = &pIfList->pIntfs[i];
                    if (pIfInfo->wszGuid == NULL)
                        wprintf(L"  InterfaceGUID[%d]: NULL\n",i);
                    else
                        wprintf(L"  InterfaceGUID[%d]: %ws\n",i, pIfInfo->wszGuid);
                    
                }    
            }
            wprintf(L"\n");
        }
        
        freeResult = FreeLibrary(dllHandle);
    }

    if (pIfList != NULL) {
        LocalFree(pIfList);
        pIfList = NULL;
    }
    return 0;
}

必要条件

要件
サポートされている最小のクライアント
WINDOWS XP と SP2 [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows Server 2003 [デスクトップ アプリのみ]
クライアント サポートの終了
Windows XP と SP3
サーバー サポートの終了
Windows Server 2003
ヘッダー
Wzcsapi.h
ライブラリ
Wzcsapi.lib
[DLL]
Wzcsapi.dll

関連項目

INTFS_KEY_TABLE

INTF_KEY_ENTRY

WZCEapolGetInterfaceParams

WZCQueryInterface

WZCRefreshInterface