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;
}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最低 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