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 |