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 — это запрос управления в режиме ядра. Этот запрос предназначен для объекта физического устройства 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

См. также

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

IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE