Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Práticas recomendadas para um driver do controlador de host para lidar com solicitações de E/S enviadas pelo UCX.
O UCX monitora todos os endpoints criados pelo driver do controlador de host para dispositivos no barramento USB. Todas as solicitações de transferência de dados enviadas pelo driver do hub ou por outro driver mais alto na pilha de dispositivos USB são manipuladas primeiramente pela UCX. O UCX é responsável por encaminhar o objeto de solicitação do framework para a fila de endpoint correta. O URB (Bloco de Solicitação USB) contido na solicitação pode especificar um identificador de ponto de extremidade. Se um identificador de ponto de extremidade for especificado, o UCX verificará o ponto de extremidade correspondente entre os pontos de extremidade presentes para o dispositivo. Se o identificador de endpoint especificado estiver presente, a solicitação será encaminhada para a fila do endpoint. Se o identificador de ponto de extremidade especificado não for encontrado, a solicitação falhará. Se nenhum identificador for especificado, a solicitação será para o ponto de extremidade padrão e o UCX encaminha a solicitação para a fila de ponto de extremidade padrão do driver do controlador de host para esse dispositivo.
Para garantir a compatibilidade com os drivers USB existentes, o controlador de host deve estar em conformidade com os seguintes requisitos ao concluir a solicitação URB:
- WdfRequestComplete deve ser chamado em DISPATCH_LEVEL.
- Se o URB foi entregue à fila da estrutura e o driver começou a processá-lo de forma síncrona na thread ou no DPC do driver de chamada, a solicitação também não deve ser concluída de forma síncrona. A solicitação deve ser concluída em um DPC separado, que pode ser agendado com uma chamada para WdfDpcEnqueue.
- Semelhante ao requisito anterior, ao receber EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE ou EVT_WDF_REQUEST_CANCEL, o driver do controlador de host deve concluir a requisição URB em um DPC separado do thread de chamada ou do DPC. Por padrão, o WDF conclui solicitações canceladas na fila de forma síncrona. Esse comportamento pode causar problemas para solicitações URB. Por esse motivo, o driver deve fornecer um callback EvtIoCanceledOnQueue para suas filas URB.
O objeto de requisição do framework para um IOCTL_INTERNAL_USB_SUBMIT_URB contém um URB localizado em Parameters.Others.Arg1 da requisição. Quando a solicitação for concluída, o status da URB deverá ser definido como USBD_STATUS_SUCCESS ou como um status de falha que indique a natureza da falha. Os valores de status de falha são definidos no arquivo de cabeçalho usb.h.