共用方式為


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

呼叫端提供的指標,指向 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 和裝置實例識別碼的所有裝置相關聯的裝置介面,如果有的話。

CM_GET_DEVICE_INTERFACE_LIST_PRESENT

函式會提供清單,其中包含與目前使用中裝置相關聯的裝置介面,以及符合指定 GUID 和裝置實例識別碼,如果有的話。

傳回值

如果作業成功,函式會傳回CR_SUCCESS。 否則,它會傳回其中一個錯誤碼,其中一個錯誤碼具有 CR_ 前置詞,如 Cfgmgr32.h中所定義。

下表包含此函式可能會傳回的一些較常見的錯誤碼。

傳回碼 描述
CR_BUFFER_SMALL
Buffer 緩衝區太小,無法保存要求的裝置介面清單。

言論

在呼叫 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 標頭會將CM_Get_Device_Interface_List定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Microsoft Windows 2000 和更新版本的 Windows 中提供。
目標平臺 普遍
標頭 cfgmgr32.h (包括 Cfgmgr32.h)
連結庫 Cfgmgr32.lib
DLL CfgMgr32.dll

另請參閱

CM_Get_Device_Interface_List_Size