Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Запрос ввода-вывода IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE регистрирует драйвер устройства с несколькими функциями USB (составного драйвера) с базовым стеком USB-драйверов.
Этот запрос отправляется драйвером, который заменяет составной драйвер Майкрософт, Usbccgp.sys, и реализует функцию приостановки и удаленного пробуждения в спецификации универсальной последовательной шины (USB) 3.0.
IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE — это запрос управления в режиме ядра. Этот запрос предназначен для объекта физического устройства USB-концентратора (PDO). Этот запрос должен быть отправлен на уровне запроса прерывания (IRQL) PASSIVE_LEVEL.
Основной код
IRP_MJ_INTERNAL_DEVICE_CONTROL
Входной буфер
Parameters.Others.Argument1 — это указатель на выделенную и инициализированную REGISTER_COMPOSITE_DEVICE структуру, содержащую сведения о родительском драйвере. Чтобы инициализировать структуру, вызовите процедуру USBD_BuildRegisterCompositeDevice.
Элемент AssociatedIrp.SystemBuffer указывает на выделенный вызывающим буфером, который достаточно велик для хранения массива дескрипторов функций (типизированных USBD_FUNCTION_HANDLE) для функций в составном USB-устройстве. Число элементов в массиве указывается элементом REGISTER_COMPOSITE_DEVICEfunctionCount . Чтобы получить количество функций, проверьте дескрипторы, возвращаемые запросом 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 (include Usbioctl.h) |
| IRQL | PASSIVE_LEVEL |