CM_Get_Device_Interface_ListW関数 (cfgmgr32.h)
CM_Get_Device_Interface_List 関数は、指定された デバイス インターフェイス クラスに属するデバイス インターフェイス インスタンスの一覧を取得します。
構文
CMAPI CONFIGRET CM_Get_Device_Interface_ListW(
[in] LPGUID InterfaceClassGuid,
[in, optional] DEVINSTID_W pDeviceID,
[out] PZZWSTR Buffer,
[in] ULONG BufferLen,
[in] ULONG ulFlags
);
パラメーター
[in] InterfaceClassGuid
デバイス インターフェイス クラスを識別する GUID を提供します。
[in, optional] pDeviceID
デバイス インスタンス IDを表す NULL で終わる文字列への呼び出し元指定のポインター。 指定した場合、関数は、指定したクラスのデバイスでサポートされているデバイス インターフェイスを取得します。 この値が NULL
[out] Buffer
インターフェイス インスタンスのシンボリック リンク名を表す複数の NULL で終わる Unicode 文字列を受け取るバッファーへの呼び出し元が指定したポインター。
[in] BufferLen
Bufferが指すバッファーの長さを文字数で指定する呼び出し元指定の値。 CM_Get_Device_Interface_List_Size を呼び出して、必要なバッファー サイズを決定します。
[in] ulFlags
次の呼び出し元が指定したフラグのいずれかを含みます。
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES
この関数は、指定された GUID とデバイス インスタンス ID (存在する場合) に一致するすべてのデバイスに関連付けられているデバイス インターフェイスを含む一覧を提供します。
CM_GET_DEVICE_INTERFACE_LIST_PRESENT
この関数は、現在アクティブであり、指定された GUID とデバイス インスタンス ID (存在する場合) と一致するデバイスに関連付けられているデバイス インターフェイスを含む一覧を提供します。
戻り値
操作が成功した場合、関数はCR_SUCCESSを返します。 それ以外の場合は、Cfgmgr32.hで定義されているCR_ プレフィックスを持つエラー コードのいずれかを返します。
次の表に、この関数が返す可能性がある一般的なエラー コードの一部を示します。
リターン コード | 形容 |
---|---|
|
バッファー バッファーが小さすぎて、要求されたデバイス インターフェイスの一覧を保持できません。 |
備考
CM_Get_Device_Interface_List_Size を呼び出してリストのサイズを取得し、CM_Get_Device_Interface_List を呼び出してリストを取得する間に、新しいデバイス インターフェイスをシステムに追加して、返されたサイズが無効になる可能性があります。 呼び出し元は、その条件に対して堅牢であり、CM_Get_Device_Interface_List が CR_BUFFER_SMALLを返す場合は、サイズとリストの取得を再試行する必要があります。
例
このスニペットは、「解説」セクションで説明されているように、サイズとリストの取得を再試行する方法を示しています。
CONFIGRET cr = CR_SUCCESS;
PWSTR DeviceInterfaceList = NULL;
ULONG DeviceInterfaceListLength = 0;
do {
cr = CM_Get_Device_Interface_List_Size(&DeviceInterfaceListLength,
(LPGUID)&GUID_DEVINTERFACE_VOLUME,
NULL,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
if (cr != CR_SUCCESS)
{
break;
}
if (DeviceInterfaceList != NULL) {
HeapFree(GetProcessHeap(),
0,
DeviceInterfaceList);
}
DeviceInterfaceList = (PWSTR)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
DeviceInterfaceListLength * sizeof(WCHAR));
if (DeviceInterfaceList == NULL)
{
cr = CR_OUT_OF_MEMORY;
break;
}
cr = CM_Get_Device_Interface_List((LPGUID)&GUID_DEVINTERFACE_VOLUME,
NULL,
DeviceInterfaceList,
DeviceInterfaceListLength,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
} while (cr == CR_BUFFER_SMALL);
if (cr != CR_SUCCESS)
{
goto Exit;
}
手記
cfgmgr32.h ヘッダーは、unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとしてCM_Get_Device_Interface_Listを定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Microsoft Windows 2000 以降のバージョンの Windows で使用できます。 |
ターゲット プラットフォーム の |
万国 |
ヘッダー | cfgmgr32.h (Cfgmgr32.h を含む) |
ライブラリ | Cfgmgr32.lib |
DLL | CfgMgr32.dll |