Trabalhando com interfaces 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. Drivers universais do Windows devem usar UMDF 2.

Os exemplos 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 interface USB como um objeto de interface USB de estrutura. Quando um driver UMDF cria um objeto de dispositivo USB de estrutura, a estrutura cria um objeto de interface USB de estrutura para cada interface USB compatível com o dispositivo.

A maioria dos dispositivos USB tem apenas uma interface e a interface tem apenas uma configuração alternativa. Os drivers para esses dispositivos normalmente não precisam usar os métodos de objeto definidos pelo objeto de interface USB da estrutura.

Se um driver UMDF der suporte a dispositivos USB que fornecem várias interfaces ou configurações alternativas, os métodos de objeto de interface permitirão que o driver:

Obtendo informações da interface UMDF-USB

Depois que um driver UMDF tiver chamado o método IWDFUsbTargetFactory::CreateUsbTargetDevice para criar um objeto de dispositivo de destino UMDF-USB, o driver poderá chamar o método IWDFUsbTargetDevice::GetNumInterfaces para obter o número de interfaces USB compatíveis com o dispositivo. Em seguida, o driver pode fazer chamadas para o método IWDFUsbTargetDevice::RetrieveUsbInterface para obter ponteiros para as interfaces IWDFUsbInterface que expõem as interfaces USB compatíveis com o dispositivo. Em seguida, o driver pode chamar os seguintes métodos que cada objeto de interface USB define para obter informações sobre a interface USB:

IWDFUsbInterface::GetInterfaceNumber
Obtém o número da interface USB associado a um objeto de interface USB.

IWDFUsbInterface::GetInterfaceDescriptor
Obtém esse descritor de interface USB associado a uma das configurações alternativas de uma interface USB.

IWDFUsbInterface::GetNumEndPoints
Obtém o número de pontos de extremidade (também conhecidos como pipes) associados a uma das configurações alternativas de uma interface USB.

IWDFUsbInterface::GetConfiguredSettingIndex
Obtém um valor de índice que identifica a configuração alternativa que está selecionada atualmente para uma interface USB.

IWDFUsbInterface::RetrieveUsbPipeObject
Recupera um ponteiro para a interface IWDFUsbTargetPipe que expõe o objeto de pipe da estrutura associado a uma interface de dispositivo USB especificada e ao índice de pipe.

IWDFUsbInterface::GetWinUsbHandle
Obtém o identificador da interface WinUsb associado a uma interface USB.

Selecionando uma configuração alternativa para uma interface UMDF-USB

O driver UMDF pode chamar o método IWDFUsbInterface::SelectSetting para selecionar uma configuração alternativa para uma das interfaces USB compatíveis com o dispositivo.

As configurações alternativas do dispositivo devem ser numeradas contíguamente, começando com zero.

Importante Selecionar uma configuração invalida qualquer informação sobre a interface e os pontos de extremidade. Portanto, o driver deve obter essas informações novamente. O driver também deve descartar todos os objetos de pipe USB recuperados anteriormente e recriá-los.