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.