URBs (blocos de solicitação USB)
Este artigo descreve um URB (Bloco de Solicitação USB) e fornece informações sobre como um driver cliente USB pode usar rotinas do Modelo de Driver do Windows (WDM) para alocar, compilar e enviar URBs para a pilha de drivers USB.
Um driver cliente USB (Barramento Serial Universal) não pode se comunicar diretamente com seu dispositivo. Em vez disso, o driver cliente cria solicitações e as envia para a pilha de driver USB para processamento. Dentro de cada solicitação, o driver cliente fornece uma estrutura de dados de comprimento variável chamada URB (Bloco de Solicitação USB). A estrutura URB descreve os detalhes da solicitação e também contém informações sobre o status da solicitação concluída. O driver cliente executa todas as operações específicas do dispositivo, incluindo transferências de dados, por meio de URBs. O driver cliente deve inicializar o URB com informações sobre a solicitação antes de enviá-la para a pilha de driver USB. Para determinados tipos de solicitações, a Microsoft fornece rotinas auxiliares e macros que alocam uma estrutura URB e preenchem os membros necessários da estrutura URB com detalhes fornecidos pelo driver cliente.
Cada URB começa com um cabeçalho de tamanho fixo padrão (_URB_HEADER) cuja finalidade é identificar o tipo de operação solicitada. O membro Length de _URB_HEADER especifica o tamanho, em bytes, do URB. O membro Function , que deve ser uma de uma série de constantes URB_FUNCTION_XXX definidas pelo sistema, determina o tipo de operação solicitada. No caso de transferências de dados, por exemplo, esse membro indica o tipo de transferência. Os códigos de função URB_FUNCTION_CONTROL_TRANSFER, URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER e URB_FUNCTION_ISOCH_TRANSFER indicam transferências de controle, interrupção/interrupção e isócronas, respectivamente. A pilha de driver USB usa o membro Status para retornar um código de status específico de USB.
Para enviar um URB, o driver cliente usa a solicitação IOCTL_INTERNAL_USB_SUBMIT_URB , que é entregue ao dispositivo por meio de um IRP (pacote de solicitação de E/S) do tipo IRP_MJ_INTERNAL_DEVICE_CONTROL.
Depois que a pilha de driver USB terminar de processar o URB, a pilha de driver usará o membro Status da estrutura URB para retornar um código de status específico de USB.
Observação
Os desenvolvedores de driver KMDF e UMDF devem usar as respectivas interfaces de estrutura para se comunicar com um dispositivo USB. Para obter mais informações, consulte Trabalhando com dispositivos USB para drivers KMDF e Trabalhando com interfaces USB no UMDF. Estes tópicos discutem as interfaces de driver WDM subjacentes usadas para comunicação de dispositivo USB.
Nesta seção
Tópico | Descrição |
---|---|
Alocando e criando URBs | Este tópico descreve como um driver de cliente USB pode usar rotinas de driver WDM (Modelo de Driver do Windows) para alocar e formatar um URB antes de enviar a solicitação para a pilha de driver USB fornecida pela Microsoft. |
Como enviar um URB | Este tópico descreve as etapas necessárias para enviar um URB inicializado para a pilha de driver USB para processar uma solicitação específica. |
Práticas recomendadas: usando URBs | Este tópico descreve as práticas recomendadas para um driver de cliente para alocar, compilar e enviar um URB para a pilha de driver USB incluída com Windows 8. |