Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico descreve as operações que um driver KMDF (Kernel-Mode Driver Framework) ou UMDF (User-Mode Driver Framework) a partir da versão 2 pode executar usando os métodos de objeto de dispositivo USB fornecidos pelo WDF (Windows Driver Frameworks).
Contém as seguintes secções:
- Criando um objeto de dispositivo USB
- Configurando um dispositivo USB
- Obtenção de informações do dispositivo
- Acesso a descritores USB
- Enviando uma Transferência de Controlo
- Redefinir a porta de um dispositivo Power-Cycling
- Enviar um URB para um dispositivo
Para obter instruções passo a passo sobre como escrever um driver de cliente USB simples baseado em KMDF, consulte Como escrever seu primeiro driver de cliente USB (KMDF).
Criando um objeto de dispositivo USB
Para usar os objetos de destino de E/S USB da estrutura (WDFUSBDEVICE, WDFUSBINTERFACE e WDFUSBPIPE), o driver do cliente deve primeiro chamar WdfUsbTargetDeviceCreateWithParameters para criar um objeto de dispositivo USB. Normalmente, um driver chama WdfUsbTargetDeviceCreateWithParameters a partir da sua função de retorno de chamada EvtDevicePrepareHardware.
Quando o driver chama WdfUsbTargetDeviceCreateWithParameters, a estrutura cria um objeto WDFUSBDEVICE e o associa ao FDO que representa o dispositivo USB. O método retorna um identificador para o novo objeto de dispositivo USB da estrutura do framework que o driver de cliente USB pode usar para se comunicar com o dispositivo físico.
Depois de invocar WdfUsbTargetDeviceCreateWithParameters, o controlador pode invocar WdfUsbTargetDeviceGetDeviceDescriptor e WdfUsbTargetDeviceRetrieveConfigDescriptor para obter descritores USB do dispositivo. Esses descritores contêm informações sobre a primeira configuração do dispositivo, suas configurações de interface e seus pontos finais definidos. (Os descritores USB são definidos na especificação USB oficial.)
Configurando um dispositivo USB
O método WdfUsbTargetDeviceCreateWithParameters também cria um objeto de interface USB da estrutura para cada interface USB que a primeira configuração do dispositivo contém.
Depois de chamar WdfUsbTargetDeviceCreateWithParameters, o driver do cliente deve chamar WdfUsbTargetDeviceSelectConfig para selecionar uma configuração. Este método cria objetos de interface de estrutura para cada configuração alternativa da interface na configuração selecionada.
O método também cria objetos de pipe que representam pontos de extremidade definidos em cada configuração alternativa de cada interface da configuração selecionada.
Depois de selecionar uma configuração, você pode alterar configurações alternativas para as interfaces da configuração, se necessário.
Você também pode chamar WdfUsbTargetDeviceSelectConfig para desconfigurar um dispositivo.
Para obter informações relacionadas, consulte:
- Como selecionar uma configuração para um dispositivo USB
- Como selecionar uma configuração alternativa em uma interface USB
Obtenção de informações do dispositivo
Depois de configurar um dispositivo, o driver do cliente pode chamar os seguintes métodos para obter informações sobre um dispositivo USB:
WdfUsbTargetDeviceQueryUsbCapability
Determina se o controlador principal e a pilha de drivers USB suportam uma capacidade específica. Antes de chamar WdfUsbTargetDeviceQueryUsbCapability, um driver deve chamar WdfUsbTargetDeviceCreateWithParameters.
WdfUsbTargetDeviceGetIoTarget
Retorna um identificador para o objeto de destino de E/S associado a um dispositivo USB. O driver pode passar esse identificador para WdfRequestSend ou WdfIoTargetStop.
WdfUsbTargetDeviceRetrieveInformation
Recupera informações de versão e capacidade associadas a um dispositivo USB.
WdfUsbTargetDeviceIsConnectedSynchronous (somente KMDF)
Determina se o dispositivo está conectado.
WdfUsbTargetDeviceRetrieveCurrentFrameNumber (somente KMDF)
Recupera o número de quadro USB atual.
Obter descritores USB
Para obter as cadeias de caracteres Unicode contidas nos descritores de um dispositivo USB, o driver pode chamar qualquer um dos seguintes métodos:
WdfUsbTargetDeviceGetDeviceDescriptor
Obtém o descritor de dispositivo de um dispositivo USB.
WdfUsbTargetDeviceRetrieveConfigDescriptor
Obtém os descritores de configuração USB , de interface e de ponto final de um dispositivo.
WdfUsbTargetDeviceQueryString
Copia uma cadeia de caracteres Unicode para um buffer fornecido pelo driver.
WdfUsbTargetDeviceAllocAndQueryString
Copia uma cadeia de caracteres Unicode para um buffer fornecido pela estrutura.
WdfUsbTargetDeviceFormatRequestForString
Formata uma solicitação para uma cadeia de caracteres Unicode. O driver pode chamar WdfRequestSend para enviar a solicitação de forma síncrona ou assíncrona.
Enviando uma transferência de controle
O seu controlador pode chamar os seguintes métodos para enviar uma solicitação de E/S que descreva uma transferência de controle USB padrão, específica da classe do dispositivo ou específica do fornecedor.
WdfUsbTargetDeviceSendControlTransferSynchronously
Envia de forma síncrona uma solicitação de transferência de controle USB.
WdfUsbTargetDeviceFormatRequestForControlTransfer
Formata uma solicitação para uma transferência de controle USB. O driver pode chamar WdfRequestSend para enviar a solicitação de forma síncrona ou assíncrona.
Para obter informações relacionadas, consulte Como enviar uma transferência de controle USB.
Redefinir e reiniciar a porta de um dispositivo
O driver pode chamar os seguintes métodos para redefinir ou reiniciar a porta USB à qual um dispositivo está conectado.
WdfUsbTargetDeviceResetPortSynchronously
Envia de forma síncrona uma solicitação para redefinir a porta USB de um dispositivo.
WdfUsbTargetDeviceCyclePortSynchronously (apenas KMDF)
Envia de forma síncrona uma solicitação para reiniciar a porta USB de um dispositivo.
WdfUsbTargetDeviceFormatRequestForCyclePort (somente KMDF)
Formata uma solicitação para reiniciar a porta USB de um dispositivo. O driver deve chamar WdfRequestSend para enviar a solicitação de forma síncrona ou assíncrona.
Para obter informações relacionadas, consulte Como recuperar de erros de canal USB.
Enviar um URB para um dispositivo
Se o driver KMDF se comunicar com seu dispositivo USB enviando solicitações de E/S que contenham URBs, o driver poderá chamar os seguintes métodos:
WdfUsbTargetDeviceCreateUrb (somente KMDF)
Aloca um bloco de solicitação USB (URB). Antes de chamar WdfUsbTargetDeviceCreateUrb, um controlador deve chamar WdfUsbTargetDeviceCreateWithParameters.
WdfUsbTargetDeviceCreateIsochUrb (somente KMDF)
Aloca um bloco de solicitação USB isócrono (URB). Antes de chamar WdfUsbTargetDeviceCreateIsochUrb, um driver deve chamar WdfUsbTargetDeviceCreateWithParameters.
WdfUsbTargetDeviceSendUrbSynchronously (somente KMDF)
Envia de forma síncrona uma solicitação de E/S que contém um URB.
WdfUsbTargetDeviceFormatRequestForUrb (somente KMDF)
Formata uma solicitação de E/S que contém um URB. O driver deve chamar WdfRequestSend para enviar a solicitação de forma síncrona ou assíncrona.
WdfUsbTargetDeviceWdmGetConfigurationHandle (somente KMDF)
Retorna o identificador de configuração USBD de um dispositivo. Alguns URBs exigem este controlador.
Para um contexto conceptual geral sobre as URBs, consulte Atribuição e construção de URBs.