функция 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.
Возвращаемое значение
None
Remarks
Драйвер может использовать функцию WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES для выбора конфигурации, если интерфейсы устройства задаются дескрипторами для объектов интерфейса USB.
Драйвер может использовать эту функцию, если устройство имеет один или несколько 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, эта функция задает для элемента Type структуры WDF_USB_DEVICE_SELECT_CONFIG_PARAMS значение 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