IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE IOCTL (usbioctl.h)

A solicitação de E/ S IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE registra o driver de um dispositivo usb de várias funções (driver composto) com a pilha de driver USB subjacente.

Essa solicitação é enviada por um driver que substitui o driver composto fornecido pela Microsoft, Usbccgp.sys e implementa o recurso de suspensão de função e de ativação remota, de acordo com a especificação do Barramento Serial Universal (USB) 3.0.

IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE é uma solicitação de controle de E/S no modo kernel. Essa solicitação tem como destino o PDO (objeto de dispositivo físico) do hub USB. Essa solicitação deve ser enviada em um nível de solicitação de interrupção (IRQL) de PASSIVE_LEVEL.

Código principal

IRP_MJ_INTERNAL_DEVICE_CONTROL

Buffer de entrada

Parameters.Others.Argument1 é um ponteiro para uma estrutura de REGISTER_COMPOSITE_DEVICE< alocada e inicializada pelo chamador que contém informações sobre o driver pai. Para inicializar a estrutura, chame a rotina de USBD_BuildRegisterCompositeDevice .

O membro AssociatedIrp.SystemBuffer aponta para um buffer alocado pelo chamador que é grande o suficiente para manter uma matriz de identificadores de função (digitado USBD_FUNCTION_HANDLE) para funções no dispositivo composto USB. O número de elementos na matriz é indicado pelo membro FunctionCount de REGISTER_COMPOSITE_DEVICE. Para obter o número de funções, inspecione os descritores retornados por uma solicitação get-configuration.

Comprimento do buffer de entrada

O tamanho de uma estrutura REGISTER_COMPOSITE_DEVICE .

Buffer de saída

Na saída, o buffer apontado pelo membro AssociatedIrp.SystemBuffer é preenchido com identificadores de função para funções no dispositivo de várias funções.

Comprimento do buffer de saída

O tamanho das alças de função para funções no dispositivo.

Bloco de status

A pilha do driver USB define Irp-IoStatus.Status> como STATUS_SUCCESS se a solicitação for concluída com êxito. STATUS_SUCCESS indica que os identificadores de função são válidos.

No caso de um erro, Irp-IoStatus.Status> contém um erro apropriado status. Por exemplo, se o driver composto enviar a solicitação mais de uma vez, o Status será definido como STATUS_INVALID_DEVICE_REQUEST.

Comentários

A finalidade de IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE é que o driver composto envie uma solicitação de registro para a pilha de driver USB. Na solicitação de registro, o driver composto especifica o número de funções compatíveis com o dispositivo. Portanto, você deve enviar a solicitação IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE depois de determinar o número de funções. Normalmente, essas informações são recuperadas na rotina do dispositivo inicial do driver composto IRP_MN_START_DEVICE. Observe que o número de interfaces em uma configuração pode indicar o número de funções, mas nem sempre. Determinados dispositivos de várias funções expõem várias interfaces relacionadas a uma função. Para obter o número de funções, você deve inspecionar vários descritores relacionados a uma configuração específica. Esses descritores podem ser obtidos por meio de uma solicitação get-descriptor.

Em resposta à solicitação de registro, a pilha de driver USB fornece uma lista de identificadores para as funções no dispositivo. Para obter um exemplo de código, consulte Como registrar um dispositivo composto.

Depois que o driver composto for registrado, o driver poderá configurar o recurso de ativação remota. Usando o identificador de função, o driver composto pode enviar uma solicitação IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION para obter notificações de ativação remota da pilha do driver USB, quando a função associada envia um sinal de retomada.

Para remover a associação do driver composto com a pilha do driver USB e liberar todos os recursos alocados para registro, o driver deve enviar o IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE solicitação.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8
Cabeçalho usbioctl.h (inclua Usbioctl.h)
IRQL PASSIVE_LEVEL

Confira também

Como registrar um dispositivo composto

IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE