共用方式為


WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES函式 (wdfusb.h)

[適用於 KMDF 和 UMDF]

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES 函式會初始化 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 結構,讓驅動程式可以將裝置設定為使用多個介面。

語法

void WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
  [in, out]      PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params,
  [in, optional] UCHAR                                NumberInterfaces,
  [in, optional] PWDF_USB_INTERFACE_SETTING_PAIR      SettingPairs
);

參數

[in, out] Params

驅動程式配置的 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 結構的指標。

[in, optional] NumberInterfaces

SettingPairs 陣列中的元素數目。 如果 SettingPairsNULL,此參數必須大於零。

[in, optional] SettingPairs

WDF_USB_INTERFACE_SETTING_PAIR 結構的陣列。 這個參數是選擇性的,而且可以 NULL

傳回值

沒有

言論

如果裝置介面是由 USB 介面物件的句柄所指定,您的驅動程式可以使用 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES 函式來選取組態。

如果您的裝置有一或多個 USB 介面,您的驅動程式可以使用此功能。

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES 函式會零 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 結構,並將 Size 成員設定為結構的大小。

如果 numInterfacesSettingPairsNULLWDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES 會將 Type 成員設定為 WdfUsbTargetDeviceSelectConfigTypeMultiInterface。 在此情況下,架構會決定您擁有的介面數目,並在每個介面上啟用替代設定零。 如果您想要在所有介面上預設為替代設定零,請使用此設定。

如果 numInterfaces 參數和 SettingPairs 參數都不是 NULL,則此函式會將 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 結構的 Type 成員設定為 WdfUsbTargetDeviceSelectConfigTypeInterfacesPairs。 在此情況下,您可以在任何介面上指定替代設定。

若要初始化 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 結構,驅動程式必須呼叫下列其中一個函式:

例子

下列程式代碼範例會根據裝置組態支援的介面數目,呼叫 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACEWDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES。 然後,此範例會呼叫 WdfUsbTargetDeviceSelectConfig 來選取組態。

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS params;
PWDF_USB_INTERFACE_SETTING_PAIR settingPairs;
UCHAR numInterfaces;

numInterfaces = WdfUsbTargetDeviceGetNumInterfaces(UsbDevice);

if (numInterfaces == 1){
    WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&params);
}
else {
    settingPairs = ExAllocatePoolWithTag(
                        PagedPool,
                        sizeof(WDF_USB_INTERFACE_SETTING_PAIR) * numInterfaces,
                        MEM_TAG
                        );
    if (settingPairs == NULL){
        return STATUS_INSUFFICIENT_RESOURCES;
    }

 //
 // Call driver-defined routine to populate the
    // WDF_USB_INTERFACE_SETTING_PAIR structures 
 // that ExAllocatePoolWithTag allocated.
 //
    InitSettingPairs(
                     UsbDevice,
                     settingPairs,
                     numInterfaces
                     );

    WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
                    &params,
                    numInterfaces,
                    settingPairs
                    );
}
status = WdfUsbTargetDeviceSelectConfig(
                                        UsbDevice,
                                        NULL,
                                        &params
                                        );
if (!NT_SUCCESS(status)) {
    return status;
}

要求

要求 價值
目標平臺 普遍
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
標頭 wdfusb.h (包括 Wdfusb.h)

另請參閱

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_DECONFIG

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_INTERFACES_DESCRIPTORS

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_URB

WDF_USB_INTERFACE_SETTING_PAIR