Condividi tramite


Uso dei dispositivi USB in driver UMDF 1.x

Avviso

UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Nessuna nuova funzionalità viene aggiunta a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2.

Gli esempi di UMDF 1 archiviati sono disponibili nell'Windows 11, versione 22H2 - Aggiornamento degli esempi di driver di maggio 2022.

Per altre informazioni, vedere Introduzione con UMDF.

Il framework rappresenta ogni dispositivo USB come oggetto dispositivo USB framework. Un driver UMDF deve creare un oggetto dispositivo USB del framework prima che il driver possa accedere al supporto del framework per le destinazioni di I/O USB. UMDF fornisce metodi di oggetto dispositivo USB che consentono a un driver UMDF di:

Creazione di un oggetto dispositivo UMDF-USB

Per usare le funzionalità di destinazione USB I/O del framework, un driver UMDF deve prima ottenere un puntatore all'interfaccia IWDFUsbTargetFactory . Per ottenere il puntatore, il driver deve chiamare il metodo QueryInterface dell'interfaccia IWDFDevice del dispositivo. Nell'esempio di codice seguente viene illustrato come chiamare QueryInterface per ottenere il puntatore:

hr = pdevice->QueryInterface(IID_IWDFUsbTargetFactory, (LPVOID*)&ppUsbTargetFactory);

Il driver deve quindi chiamare il metodo IWDFUsbTargetFactory::CreateUsbTargetDevice per creare un oggetto di destinazione di I/O USB per il dispositivo. Dopo aver creato la destinazione di I/O USB, il driver può inviare richieste alla destinazione di I/O. In genere, i driver chiamano IWDFUsbTargetFactory::CreateUsbTargetDevice dall'interno di una funzione di callbackware IPnpCallbackHardware::OnPrepareHardware .

Dopo che il driver chiama IWDFUsbTargetFactory::CreateUsbTargetDevice, il driver può ottenere informazioni sul dispositivo USB (ad esempio, descrittori USB per il dispositivo, interfacce USB e endpoint dell'interfaccia). I descrittori USB sono descritti nella specifica USB.

Recupero delle informazioni sul dispositivo UMDF-USB

Dopo che un driver UMDF chiama il metodo IWDFUsbTargetFactory::CreateUsbTargetDevice per creare un oggetto dispositivo di destinazione UMDF-USB, il driver può chiamare i metodi seguenti che l'oggetto dispositivo di destinazione USB definisce per ottenere informazioni su un dispositivo USB:

IWDFUsbTargetDevice::RetrieveDescriptor
Ottiene il descrittore di dispositivo USB di un dispositivo.

IWDFUsbTargetDevice::GetNumInterfaces
Ottiene il numero di interfacce USB supportate dal dispositivo.

IWDFUsbTargetDevice::RetrieveUsbInterface
Ottiene un puntatore a un'interfaccia IWDFUsbInterface che espone una delle interfacce USB supportate dal dispositivo.

IWDFUsbTargetDevice::RetrieveDeviceInformation
Recupera le informazioni sulle funzionalità associate a un dispositivo USB.

IWDFUsbTargetDevice::RetrievePowerPolicy
Recupera un criterio di alimentazione WinUsb.

IWDFUsbTargetDevice::GetWinUsbHandle
Ottiene l'handle dell'interfaccia WinUsb associato all'oggetto dispositivo di destinazione I/O.

Invio di un trasferimento di controllo a un oggetto dispositivo UMDF-USB

Un driver UMDF può chiamare il metodo IWDFUsbTargetDevice::FormatRequestForControlTransfer per formattare una richiesta di I/O che descrive un trasferimento di controllo USB specifico della classe del dispositivo standard o specifico del fornitore. Il driver può quindi chiamare il metodo IWDFIoRequest::Send per inviare la richiesta in modo sincrono o asincrono.

Impostazione di Power Policy per un dispositivo UMDF-USB

Un driver UMDF può chiamare il metodo IWDFUsbTargetDevice::SetPowerPolicy per impostare i criteri di alimentazione usati da WinUsb per un dispositivo USB. I criteri di alimentazione per un dispositivo USB cambiano gli stati di risparmio energia per il dispositivo.