Функция WdfUsbTargetDeviceSelectConfig (wdfusb.h)
[Применимо к KMDF и UMDF]
Метод WdfUsbTargetDeviceSelectConfig выбирает конфигурацию USB для устройства или отменяет настройку устройства.
Синтаксис
NTSTATUS WdfUsbTargetDeviceSelectConfig(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] PWDF_OBJECT_ATTRIBUTES PipeAttributes,
[in, out] PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params
);
Параметры
[in] UsbDevice
Дескриптор объекта USB-устройства, полученный при предыдущем вызове WdfUsbTargetDeviceCreateWithParameters.
[in, optional] PipeAttributes
Указатель на структуру, выделенную вызывающим объектом WDF_OBJECT_ATTRIBUTES , которая содержит атрибуты для новых объектов USB-канала платформы, создаваемых платформой для интерфейсов устройства. Для драйверов KMDF этот параметр является необязательным и может быть WDF_NO_OBJECT_ATTRIBUTES. Драйверы UMDF должны задать для этого параметра значение NULL.
[in, out] Params
Указатель на выделенный вызывающим объектом WDF_USB_DEVICE_SELECT_CONFIG_PARAMS структуру, которую вызывающий объект и платформа используют для указания параметров конфигурации.
Возвращаемое значение
WdfUsbTargetDeviceSelectConfig возвращает значение состояния завершения целевого объекта ввода-вывода, если операция выполнена успешно. В противном случае этот метод может возвращать одно из следующих значений:
Код возврата | Описание |
---|---|
|
Обнаружен недопустимый параметр. |
|
Неправильный элемент Sizeструктуры WDF_USB_DEVICE_SELECT_CONFIG_PARAMS , на которую указывает Params . |
|
Не удалось выделить буфер памяти. |
|
Платформа возвращает это значение, если драйвер UMDF вызывает WdfUsbTargetDeviceSelectConfig с типом Params->, равным любому из следующих значений:
|
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Драйвер может выбрать конфигурацию устройства, используя структуру WDF_USB_DEVICE_SELECT_CONFIG_PARAMS , чтобы указать дескрипторы USB, URB или дескрипторы для объектов интерфейса USB платформы.
Платформа создает объект USB-канала платформы для каждого канала, связанного с каждым интерфейсом в конфигурации, после удаления всех объектов канала, которые платформа могла ранее создать для конфигурации. Платформа использует альтернативный нулевой параметр для каждого интерфейса, если драйвер не указывает другой альтернативный параметр.
Чтобы получить сведения об объектах канала интерфейса, драйвер может вызвать WdfUsbInterfaceGetNumConfiguredPipes и WdfUsbInterfaceGetConfiguredPipe.
Дополнительные сведения о методе WdfUsbTargetDeviceSelectConfig и целевых объектах USB-ввода-вывода см. в разделе Usb I/O Targets.
WdfUsbTargetDeviceSelectConfig можно использовать для выбора только первой конфигурации USB, указанной в списке дескрипторов, но можно выбрать несколько интерфейсов в этой одной конфигурации.
Примеры
В следующем примере кода выбирается конфигурация с одним указанным интерфейсом.
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS configParams;
NTSTATUS status;
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&configParams);
status = WdfUsbTargetDeviceSelectConfig(
UsbDevice,
WDF_NO_OBJECT_ATTRIBUTES,
&configParams
);
В следующем примере кода выбирается конфигурация с несколькими интерфейсами, используя альтернативный нулевой параметр для всех интерфейсов. Этот пример применяется только к драйверам KMDF.
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS configParams;
PWDF_USB_INTERFACE_SETTING_PAIR settingPairs;
UCHAR numInterfaces;
NTSTATUS status;
numInterfaces = WdfUsbTargetDeviceGetNumInterfaces(UsbDevice);
settingPairs = ExAllocatePoolWithTag(
PagedPool,
sizeof(WDF_USB_INTERFACE_SETTING_PAIR) * numInterfaces,
MY_DRIVER_TAG
);
if (settingPairs == NULL){
return STATUS_INSUFFICIENT_RESOURCES;
}
for (interfaceIndex = 0; interfaceIndex < numInterfaces; interfaceIndex++) {
settingPairs[interfaceIndex].UsbInterface =
WdfUsbTargetDeviceGetInterface(
UsbDevice,
interfaceIndex);
// Select alternate setting zero on all interfaces.
settingPairs[interfaceIndex].SettingIndex = 0;
}
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
&configParams,
numInterfaces,
settingPairs
);
status = WdfUsbTargetDeviceSelectConfig(
UsbDevice,
NULL,
&configParams
);
if (!NT_SUCCESS(status)) {
ExFreePoolWithTag(
settingPairs,
MY_DRIVER_TAG
);
return status;
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfusb.h (включая Wdfusb.h) |
Библиотека | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
См. также раздел
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES
WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE
WdfUsbInterfaceGetConfiguredPipe