Allocazione e compilazione di URI
Un driver client USB può usare routine di driver WINDOWS Driver Model (WDM) per allocare e formattare un'eccezione ODBC prima di inviare la richiesta allo stack di driver USB fornito da Microsoft.
Il driver client usa UN CONTROLLO per creare un pacchetto di tutte le informazioni richieste dai driver inferiori nello stack di driver USB per elaborare la richiesta. Nel sistema operativo Windows, un ELEMENTO ROUTE è descritto in una struttura DEL SISTEMA OPERATIVO.
Microsoft fornisce una libreria di routine per i driver client USB. Usando queste routine, i driver client USB possono compilare richieste ODBC per determinate operazioni specificate e inoltrarle nello stack USB. Se si preferisce, è possibile progettare il driver client per chiamare le routine della libreria per le operazioni supportate invece di compilare le proprie richieste ODBC.
Allocazione DI CLUSTER in Windows 7 e versioni precedenti
Per inviare una richiesta USB utilizzando routine incluse in Windows Driver Kit (WDK) per Windows 7 e versioni precedenti di Windows, un driver client in genere alloca e riempie unastrutturaa, associa la struttura DI WINDOWS a un nuovo IRP e invia l'IRP allo stack di driver USB.
Per determinati tipi di richieste, Microsoft fornisce routine helper (esportate da Usbd.sys) che allocano e formattano la struttura JSON. Ad esempio, la routine di USBD_CreateConfigurationRequestEx alloca la memoria per una struttura CSV, formatta l'OPZIONE PER una richiesta di configurazione selezionata e restituisce l'indirizzo della struttura CSV al driver client. Tuttavia, le routine helper non possono essere utilizzate per tutti i tipi di richieste.
Microsoft fornisce anche macro che formattano gli URL per alcuni tipi di richieste. Per queste macro, il driver client deve allocare la struttura DELL'ISTRUZIONE USANDO exAllocatePoolWithTag o allocando la struttura nello stack. Ad esempio, dopo che il driver client alloca un valore DISAD, il driver può chiamare UsbBuildSelectConfigurationRequest per formattare IL VALORE DI PER una richiesta di configurazione selezionata o per cancellare la configurazione.
Per le altre richieste, il driver client deve allocare e formattare manualmente l'ELEMENTO ODBC impostando vari membri della struttura DELL'OPZIONE, a seconda del tipo di richiesta.
Al termine di una richiesta USB, il driver client deve rilasciare la struttura ODBC. Se l'OPZIONE VIENE allocata nello stack, l'OPZIONE VIENE rilasciata quando esce dall'ambito. Se l'OPZIONE VIENE allocata in un pool non di paging, il driver client deve chiamare ExFreePool per rilasciare l'elemento ODBC.
Allocazione DI RISORSE in Windows 8
WDK per Windows 8 offre una nuova libreria statica, Usbdex.lib, che esporta routine per l'allocazione, la formattazione e il rilascio di URI. Inoltre, esiste un nuovo modo per associare un'istanza DI FRAMEWORK a un IRP. Le nuove routine possono essere chiamate da un driver client destinato a Windows Vista e versioni successive di Windows.
Un driver client in esecuzione in Windows Vista e versioni successive deve usare le nuove routine in modo che lo stack di driver USB sottostante possa utilizzare determinati miglioramenti delle prestazioni e dell'affidabilità. Questi miglioramenti si applicano al nuovo stack di driver USB introdotto in Windows 8 per supportare dispositivi USB 3.0 e controller host. Per i controller host USB 2.0, Windows carica una versione precedente dello stack di driver che non supporta i miglioramenti. Indipendentemente dalla versione dello stack di driver sottostante o dalla versione del protocollo supportata dal controller host, è necessario chiamare sempre le nuove routine SIP.
Prima di chiamare una delle nuove routine, assicurarsi di avere un handle USBD per la registrazione del driver client con lo stack di driver USB. Per ottenere un handle USBD, chiamare USBD_CreateHandle.
Le routine seguenti sono disponibili con wdk per Windows 8. Queste routine sono definite in Usbdlib.h.
- USBD_UrbAllocate
- USBD_IsochUrbAllocate
- USBD_SelectConfigUrbAllocateAndBuild
- USBD_SelectInterfaceUrbAllocateAndBuild
- USBD_UrbFree
- USBD_AssignUrbToIoStackLocation
Le routine di allocazione nell'elenco precedente restituiscono un puntatore a una nuovastrutturaa, allocata dallo stack di driver USB. A seconda della versione dello stack di driver USB caricato da Windows, la struttura ODBC può essere associata a un contesto ODBC opaco. Un contesto DI CONTROLLO è un blocco di informazioni sull'OPZIONE. Non è possibile visualizzare il contenuto dell'intestazione HEADER; le informazioni sono destinate a essere usate internamente dallo stack di driver USB per migliorare il rilevamento e l'elaborazione DELL'INFRASTRUTTURA. Il contesto DI GESTIONE viene usato solo dallo stack di driver USB per Windows 8. Se il contesto DI MODALITÀ è disponibile, lo stack di driver USB lo usa per rendere l'elaborazione DELL'istruzione ODBC più sicura ed efficiente. Ad esempio, lo stack di driver USB deve assicurarsi che il driver client non invii UN VALORE DI TIPO ODBC e quindi tentare di riutilizzare lo stesso ELEMENTO ODBC prima del completamento della prima richiesta. Per rilevare questo tipo di errore, lo stack di driver USB archivia le informazioni sullo stato nel contesto DI GESTIONE. Senza le informazioni sullo stato, lo stack di driver USB dovrà confrontare l'elemento INCOMING in ingresso con tutti gli URL attualmente in corso. Le informazioni sullo stato vengono usate anche dallo stack di driver USB quando il driver client tenta di rilasciare l'UTILITÀ. Prima di rilasciare l'UTILITÀ, lo stack di driver USB verifica lo stato per assicurarsi che l'OPZIONE NON sia in sospeso.
Il contesto DI FRAMEWORK fornisce un meccanismo ufficiale per l'archiviazione di informazioni AGGIUNTIVe SULL'ARCHIVIAZIONE. L'uso del contesto DI CONTROLLO è preferibile allocare memoria aggiuntiva in base alle esigenze o archiviare informazioni aggiuntive nei membri riservati della struttura JSON. Lo stack di driver USB alloca gli URL e il relativo contesto ODBC associato nel pool non di paging, in modo che in futuro, se sono necessari contesti PIÙ grandi, l'unica regolazione necessaria sarà la dimensione di un'allocazione del pool.
Migrazione routine DI GESTIONE
Nella tabella seguente vengono riepilogate le modifiche apportate alle routine DI ROUTE.
Caso d'uso | Disponibile in WDK per Windows 7 e versioni precedenti | Disponibile in WDK per Windows 8 e versioni successive |
---|---|---|
Destinazioni Windows 7 e versioni precedenti del sistema operativo | È destinato a Windows 8 e versioni successive del sistema operativo | |
Per creare un'istruzione DI TIPO... | Il driver client alloca una struttura CSV e formatta la struttura a seconda della richiesta. Il driver client alloca lastrutturaa nello stack oppure il driver alloca la struttura in un pool non di paging chiamando ExAllocatePoolWithTag. |
Il driver client chiama USBD_UrbAllocate e riceve un puntatore alla nuova struttura RPC, allocata dallo stack di driver USB. L'ELEMENTO ODBC potrebbe essere associato a un contesto DI CONTROLLO, a seconda della versione dell'interfaccia USBD dello stack di driver USB sottostante. |
Per creare un'istruzione EXPLORER per una richiesta di configurazione selezionata... | Il driver client chiama la routine USBD_CreateConfigurationRequestEx che restituisce un puntatore al nuovo ELEMENTO ODBC creato e formattato dallo stack di driver USB. | Il driver client chiama USBD_SelectConfigUrbAllocateAndBuild e riceve un puntatore alla nuova struttura DELL'ISTRUZIONE, allocata e formattata (per la richiesta di configurazione di selezione) dallo stack di driver USB. L'ELEMENTO ODBC potrebbe essere associato a un contesto DI CONTROLLO, a seconda della versione dell'interfaccia USBD dello stack di driver USB sottostante. |
Per creare una richiesta DI INTERFACCIA SELECT... | Il driver client alloca una struttura PATH e usa la struttura _ODBC_edizione Standard LECT_INTERFACE per definire il formato di un comando di interfaccia select per un dispositivo USB. | Il driver client chiama USBD_SelectInterfaceUrbAllocateAndBuild e riceve un puntatore alla nuova struttura RPC, allocata e formattata (per la richiesta di interfaccia select) dallo stack di driver USB. L'ELEMENTO ODBC potrebbe essere associato a un contesto DI CONTROLLO, a seconda della versione dell'interfaccia USBD dello stack di driver USB sottostante. |
Per associare UN'istanza di CLASSE a un IRP... | Il driver client ottiene un puntatore alla posizione successiva dello stack IRP chiamando IoGetNextIrpStackLocation. Il driver client imposta quindi manualmente il membro Parameters.Others.Argument1 della posizione dello stack sull'indirizzo della struttura ODBC. | Il driver client ottiene un puntatore alla posizione successiva dello stack IRP chiamando IoGetNextIrpStackLocation. Il driver client chiama quindi USBD_AssignUrbToIoStackLocation per associare l'elemento ODBC alla posizione dello stack. |
Per rilasciare un'istanza DI. | Se il driver client alloca un valore DI RUNTIME nello stack, la variabile esce dall'ambito al termine della richiesta. Per liberare una struttura RPC che il driver client o lo stack di driver USB allocato nel pool non di paging, il driver client chiama ExFreePool. |
Il driver client chiama USBD_UrbFree. |