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.