IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE IOCTL (usbioctl.h)

Запрос IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE ввода-вывода регистрирует драйвер многофункционального USB-устройства (составной драйвер) в базовом стеке драйверов USB.

Этот запрос отправляется драйвером, который заменяет предоставленный Корпорацией Майкрософт составной драйвер, Usbccgp.sys и реализует функцию приостановки и удаленного пробуждения в спецификации Универсальной последовательной шины (USB) 3.0.

IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE — это запрос на управление вводом-выводом в режиме ядра. Этот запрос предназначен для объекта физического устройства (PDO) концентратора USB. Этот запрос должен отправляться на уровне запроса прерывания (IRQL) PASSIVE_LEVEL.

Основной код

IRP_MJ_INTERNAL_DEVICE_CONTROL

Входной буфер

Parameters.Others.Argument1 — это указатель на структуру, выделенную вызывающим объектом и инициализированную REGISTER_COMPOSITE_DEVICE< , содержащую сведения о родительском драйвере. Чтобы инициализировать структуру, вызовите подпрограмму USBD_BuildRegisterCompositeDevice .

Член AssociatedIrp.SystemBuffer указывает на буфер, выделенный вызывающим объектом, который достаточно велик для хранения массива дескрипторов функций (типизированных USBD_FUNCTION_HANDLE) для функций на составном USB-устройстве. Количество элементов в массиве определяется элементом FunctionCountREGISTER_COMPOSITE_DEVICE. Чтобы получить количество функций, проверьте дескрипторы, возвращаемые запросом get-configuration.

Длина входного буфера

Размер структуры REGISTER_COMPOSITE_DEVICE .

Выходной буфер

В выходных данных буфер, на который указывает элемент AssociatedIrp.SystemBuffer , заполняется дескрипторами функций на устройстве с несколькими функциями.

Длина выходного буфера

Размер дескрипторов функций на устройстве.

Блок состояния

Стек usb-драйвера устанавливает значение Irp-IoStatus.Status> в STATUS_SUCCESS, если запрос успешно завершен. STATUS_SUCCESS указывает, что дескриптора функции допустимы.

В случае ошибки Irp-IoStatus.Status> содержит соответствующее состояние ошибки. Например, если составной драйвер отправляет запрос несколько раз, для параметра Состояние устанавливается значение STATUS_INVALID_DEVICE_REQUEST.

Комментарии

Цель IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE заключается в том, чтобы составной драйвер отправлял запрос на регистрацию в стек драйверов USB. В запросе на регистрацию составной драйвер указывает количество функций, поддерживаемых устройством. Поэтому после определения количества функций необходимо отправить запрос IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE . Как правило, эти сведения извлекаются в IRP_MN_START_DEVICE процедуры запуска устройства составного драйвера. Обратите внимание, что количество интерфейсов в конфигурации может указывать количество функций, но не всегда. Некоторые многофункциональные устройства предоставляют несколько интерфейсов, связанных с одной функцией. Чтобы получить количество функций, необходимо проверить различные дескрипторы, связанные с определенной конфигурацией. Эти дескрипторы можно получить с помощью запроса get-descriptor.

В ответ на запрос на регистрацию стек usb-драйверов предоставляет список дескрипторов для функций на устройстве. Пример кода см . в разделе Регистрация составного устройства.

После регистрации составного драйвера драйвер может настроить функцию удаленного пробуждения. Используя дескриптор функции, составной драйвер может отправить запрос IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION для получения уведомлений о удаленном пробуждении из стека драйвера USB, когда связанная функция отправляет сигнал возобновления.

Чтобы удалить связь составного драйвера со стеком USB-драйверов и освободить все ресурсы, выделенные для регистрации, драйвер должен отправить запрос IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE .

Требования

Требование Значение
Минимальная версия клиента Windows 8
Верхняя часть usbioctl.h (включая Usbioctl.h)
IRQL PASSIVE_LEVEL

См. также раздел

Регистрация составного устройства

IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE