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 成员设置为结构的大小。
如果 numInterfaces 或 SettingPairs 为 NULL,WDF_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_MULTIPLE_INTERFACES
-
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_INTERFACES_DESCRIPTORS
示例
下面的代码示例根据设备配置支持的接口数调用 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE 或 WDF_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(¶ms);
}
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(
¶ms,
numInterfaces,
settingPairs
);
}
status = WdfUsbTargetDeviceSelectConfig(
UsbDevice,
NULL,
¶ms
);
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