Partilhar via


Blocos de solicitação USB (URBs)

Este artigo descreve um USB Request Block (URB) e fornece informações sobre como um driver de cliente USB pode usar rotinas WDM (Windows Driver Model) para alocar, criar e enviar URBs para a pilha de drivers USB.

Um driver de cliente USB (Universal Serial Bus) não pode se comunicar diretamente com seu dispositivo. Em vez disso, o driver do cliente cria solicitações e as envia para a pilha de drivers USB para processamento. Dentro de cada solicitação, o driver do cliente fornece uma estrutura de dados de comprimento variável chamada USB Request Block (URB). 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 do cliente executa todas as operações específicas do dispositivo, incluindo transferências de dados, através de URBs. O controlador cliente deve inicializar o URB com informações sobre a solicitação antes de o submeter à pilha de controladores 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 do cliente.

Cada URB começa com um cabeçalho padrão de tamanho fixo (_URB_HEADER) cujo objetivo é 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 de URB_FUNCTION_XXX definidas pelo sistema, determina o tipo de operação que é solicitada. No caso de transferências de dados, por exemplo, este 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, volume/interrupção e isócronas, respectivamente. A pilha de drivers USB usa o membro Status para retornar um código de status específico do USB.

Para enviar um URB, o driver do cliente usa a solicitação IOCTL_INTERNAL_USB_SUBMIT_URB , que é entregue ao dispositivo por meio de um pacote de solicitação de E/S (IRP) do tipo IRP_MJ_INTERNAL_DEVICE_CONTROL.

Após a pilha de drivers USB concluir o processamento do URB, ela usa o membro Status da estrutura URB para retornar um código de status específico do USB.

Observação

Os desenvolvedores de drivers KMDF e UMDF devem usar as respetivas 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 em UMDF. Estes tópicos discutem as interfaces de driver WDM subjacentes usadas para comunicação de dispositivo USB.

Nesta secção

Tópico Descrição
Atribuição e construção de URBs Este tópico descreve como um driver de cliente USB pode usar rotinas de driver WDM (Windows Driver Model) para alocar e formatar um URB antes de enviar a solicitação para a pilha de drivers USB fornecida pela Microsoft.
Como apresentar um URB Este tópico descreve as etapas necessárias para submeter um URB inicializado à stack de drivers USB para processar uma solicitação específica.
Melhores práticas: utilização dos URBs Este tópico descreve as práticas recomendadas para um driver de cliente para alocação, criação e envio de um URB para a pilha de drivers USB incluída no Windows 8.