Condividi tramite


Uso dei dispositivi USB

In questo argomento vengono descritte le operazioni che un driver framework (KMDF) Kernel-Mode o User-Mode driver Framework (UMDF) a partire dalla versione 2 può eseguire usando i metodi dell'oggetto dispositivo USB forniti da Windows Driver Framework (WDF).

Contiene le sezioni seguenti:

Per istruzioni dettagliate sulla scrittura di un semplice driver client USB basato su KMDF, vedere Come scrivere il primo driver client USB (KMDF).

Creazione di un oggetto dispositivo USB

Per usare gli oggetti di destinazione USB I/O del framework (WDFUSBDEVICE, WDFUSBINTERFACE e WDFUSBPIPE), il driver client deve prima chiamare WdfUsbTargetDeviceCreateWithParameters per creare un oggetto dispositivo USB. In genere, un driver chiama WdfUsbTargetDeviceCreateWithParameters dalla sua funzione di callback EvtDevicePrepareHardware .

Quando il driver chiama WdfUsbTargetDeviceCreateWithParameters, il framework crea un oggetto WDFUSBDEVICE e lo associa all'oggetto FDO che rappresenta il dispositivo USB. Il metodo restituisce un handle al nuovo oggetto dispositivo USB del framework che il driver client USB può quindi usare per comunicare con il dispositivo fisico.

Dopo aver chiamato WdfUsbTargetDeviceCreateWithParameters, il driver può chiamare WdfUsbTargetDeviceGetDeviceDescriptor e WdfUsbTargetDeviceRetrieveConfigDescriptor per ottenere descrittori USB dal dispositivo. Questi descrittori contengono informazioni sulla prima configurazione del dispositivo, sulle relative impostazioni di interfaccia e sui relativi endpoint definiti. I descrittori USB sono definiti nella specifica USB ufficiale.

Configurazione di un dispositivo USB

Il metodo WdfUsbTargetDeviceCreateWithParameters crea anche un oggetto interfaccia USB del framework per ogni interfaccia USB che contiene la prima configurazione del dispositivo.

Dopo aver chiamato WdfUsbTargetDeviceCreateWithParameters, il driver client deve chiamare WdfUsbTargetDeviceSelectConfig per selezionare una configurazione. Questo metodo crea oggetti interfaccia framework per ogni impostazione alternativa dell'interfaccia nella configurazione selezionata.

Il metodo crea anche oggetti pipe che rappresentano gli endpoint definiti in ogni impostazione alternativa di ogni interfaccia della configurazione selezionata.

Dopo aver selezionato una configurazione, è possibile modificare le impostazioni alternative per le interfacce della configurazione, se necessario.

È anche possibile chiamare WdfUsbTargetDeviceSelectConfig per deconfigurare un dispositivo.

Per informazioni correlate, vedere:

Recupero delle informazioni sul dispositivo

Dopo aver configurato un dispositivo, il driver client può chiamare i metodi seguenti per ottenere informazioni su un dispositivo USB:

WdfUsbTargetDeviceQueryUsbCapability
Determina se il controller host e lo stack di driver USB supportano una funzionalità specifica. Prima di chiamare WdfUsbTargetDeviceQueryUsbCapability, un driver deve chiamare WdfUsbTargetDeviceCreateWithParameters.

WdfUsbTargetDeviceGetIoTarget
Restituisce un handle all'oggetto di destinazione I/O associato a un dispositivo USB. Il driver può passare questo handle a WdfRequestSend o WdfIoTargetStop.

WdfUsbTargetDeviceRetrieveInformation
Recupera le informazioni sulla versione e sulle funzionalità associate a un dispositivo USB.

WdfUsbTargetDeviceIsConnectedSynchronous (solo KMDF)
Determina se il dispositivo è connesso.

WdfUsbTargetDeviceRetrieveCurrentFrameNumber (solo KMDF)
Recupera il numero di frame USB corrente.

Recupero di descrittori USB

Per ottenere le stringhe Unicode contenute nei descrittori di un dispositivo USB, il driver può chiamare uno dei metodi seguenti:

WdfUsbTargetDeviceGetDeviceDescriptor
Ottiene il descrittore di dispositivo USB di un dispositivo.

WdfUsbTargetDeviceRetrieveConfigDescriptor
Ottiene il descrittore di configurazione USB di un dispositivo, i descrittori dell'interfaccia e i descrittori dell'endpoint.

WdfUsbTargetDeviceQueryString
Copia una stringa Unicode in un buffer fornito dal driver.

WdfUsbTargetDeviceAllocAndQueryString
Copia una stringa Unicode in un buffer fornito dal framework.

WdfUsbTargetDeviceFormatRequestForString
Formatta una richiesta per una stringa Unicode. Il driver può chiamare WdfRequestSend per inviare la richiesta in modo sincrono o asincrono.

Invio di un trasferimento di controllo

Il driver può chiamare i metodi seguenti per inviare una richiesta di I/O che descrive un trasferimento di controllo USB standard, specifico della classe di dispositivo o specifico del fornitore.

WdfUsbTargetDeviceSendControlTransferSynchronously
Invia in modo sincrono una richiesta di trasferimento del controllo USB.

WdfUsbTargetDeviceFormatRequestForControlTransfer
Formatta una richiesta per il trasferimento di un controllo USB. Il driver può chiamare WdfRequestSend per inviare la richiesta in modo sincrono o asincrono.

Per informazioni correlate, vedere Come inviare un trasferimento di controllo USB.

Reimpostazione e Power-Cycling porta di un dispositivo

Il driver può chiamare i metodi seguenti per reimpostare o usare il ciclo di alimentazione della porta USB a cui è connesso un dispositivo:

WdfUsbTargetDeviceResetPortSynchronously
Invia in modo sincrono una richiesta per reimpostare la porta USB di un dispositivo.

WdfUsbTargetDeviceCyclePortSynchronously (solo KMDF)
Invia in modo sincrono una richiesta alla porta USB di un dispositivo.

WdfUsbTargetDeviceFormatRequestForCyclePort (solo KMDF)
Formatta una richiesta per il ciclo di alimentazione della porta USB di un dispositivo. Il driver deve chiamare WdfRequestSend per inviare la richiesta in modo sincrono o asincrono.

Per informazioni correlate, vedere Come recuperare dagli errori della pipe USB.

Invio di UN'istanza DI a un dispositivo

Se il driver KMDF comunica con il dispositivo USB inviando richieste di I/O contenenti URL, il driver può chiamare i metodi seguenti:

WdfUsbTargetDeviceCreateUrb (solo KMDF)
Alloca un blocco di richiesta USB (URB). Prima di chiamare WdfUsbTargetDeviceCreateUrb, un driver deve chiamare WdfUsbTargetDeviceCreateWithParameters.

WdfUsbTargetDeviceCreateIsochUrb (solo KMDF)
Alloca un blocco di richiesta USB isochronous (URB). Prima di chiamare WdfUsbTargetDeviceCreateIsochUrb, un driver deve chiamare WdfUsbTargetDeviceCreateWithParameters.

WdfUsbTargetDeviceSendUrbSynchronously (solo KMDF)
Invia in modo sincrono una richiesta di I/O che contiene UN'istanza DI VALORE.

WdfUsbTargetDeviceFormatRequestForUrb (solo KMDF)
Formatta una richiesta di I/O che contiene UN'istanza DI. Il driver deve chiamare WdfRequestSend per inviare la richiesta in modo sincrono o asincrono.

WdfUsbTargetDeviceWdmGetConfigurationHandle (solo KMDF)
Restituisce l'handle di configurazione USBD di un dispositivo. Alcuni URL richiedono questo handle.

Per lo sfondo concettuale generale sugli UR, vedere Allocazione e compilazione degli URL.