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 数组中的元素数。 如果 SettingPairs 不为 NULL,则此参数必须大于零。

[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 成员设置为结构的大小。

如果 numInterfacesSettingPairsNULL,WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACESType 成员设置为 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