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 |