Trabalhando com dispositivos USB em drivers UMDF 1.x
Aviso
O UMDF 2 é a versão mais recente do UMDF e substitui o UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Os drivers universais do Windows devem usar o UMDF 2.
Os exemplos de UMDF 1 arquivados podem ser encontrados no Windows 11, versão 22H2 – Atualização de exemplos de driver de maio de 2022.
Para obter mais informações, consulte Introdução com UMDF.
A estrutura representa cada dispositivo USB como um objeto de dispositivo USB de estrutura. Um driver UMDF deve criar um objeto de dispositivo USB de estrutura antes que o driver possa acessar o suporte da estrutura para destinos de E/S USB. O UMDF fornece métodos de objeto de dispositivo USB que permitem que um driver UMDF:
Criando um objeto de dispositivo UMDF-USB
Para usar os recursos de destino de E/S USB da estrutura, um driver UMDF deve primeiro obter um ponteiro para a interface IWDFUsbTargetFactory . Para obter o ponteiro, o driver deve chamar o método QueryInterface da interface IWDFDevice do dispositivo. O exemplo de código a seguir mostra como chamar QueryInterface para obter o ponteiro:
hr = pdevice->QueryInterface(IID_IWDFUsbTargetFactory, (LPVOID*)&ppUsbTargetFactory);
O driver deve chamar o método IWDFUsbTargetFactory::CreateUsbTargetDevice para criar um objeto de destino de E/S USB para o dispositivo. Depois que o driver cria o destino de E/S USB, o driver pode enviar solicitações para o destino de E/S. Normalmente, os drivers chamam IWDFUsbTargetFactory::CreateUsbTargetDevice de dentro de uma função de retorno de chamada IPnpCallbackHardware::OnPrepareHardware .
Depois que o driver chama IWDFUsbTargetFactory::CreateUsbTargetDevice, o driver pode obter informações de dispositivo USB (por exemplo, descritores USB para o dispositivo, interfaces USB e pontos de extremidade de interface). Os descritores USB são descritos na especificação USB.
Obtendo informações de dispositivo UMDF-USB
Depois que um driver UMDF chama o método IWDFUsbTargetFactory::CreateUsbTargetDevice para criar um objeto de dispositivo de destino UMDF-USB, o driver pode chamar os seguintes métodos que o objeto de dispositivo de destino USB define para obter informações sobre um dispositivo USB:
IWDFUsbTargetDevice::RetrieveDescriptor
Obtém o descritor de dispositivo USB de um dispositivo.
IWDFUsbTargetDevice::GetNumInterfaces
Obtém o número de interfaces USB compatíveis com o dispositivo.
IWDFUsbTargetDevice::RetrieveUsbInterface
Obtém um ponteiro para uma interface IWDFUsbInterface que expõe uma das interfaces USB compatíveis com o dispositivo.
IWDFUsbTargetDevice::RetrieveDeviceInformation
Recupera informações de funcionalidade associadas a um dispositivo USB.
IWDFUsbTargetDevice::RetrievePowerPolicy
Recupera uma política de energia do WinUsb.
IWDFUsbTargetDevice::GetWinUsbHandle
Obtém o identificador de interface WinUsb associado ao objeto de dispositivo de destino de E/S.
Enviando uma transferência de controle para um objeto de dispositivo UMDF-USB
Um driver UMDF pode chamar o método IWDFUsbTargetDevice::FormatRequestForControlTransfer para formatar uma solicitação de E/S que descreve uma transferência de controle USB padrão, específica da classe de dispositivo ou específica do fornecedor. Em seguida, o driver pode chamar o método IWDFIoRequest::Send para enviar a solicitação de forma síncrona ou assíncrona.
Definindo a Política de Energia para um dispositivo UMDF-USB
Um driver UMDF pode chamar o método IWDFUsbTargetDevice::SetPowerPolicy para definir a política de energia usada pelo WinUsb para um dispositivo USB. A política de energia de um dispositivo USB afeta as alterações nos estados de gerenciamento de energia do dispositivo.