Share via


Driver-Managed code IRP

Ad eccezione dei driver del file system, la gestione I/O associa un oggetto code di dispositivi (per accodamento di IRP) a ogni oggetto dispositivo creato da un driver.

La maggior parte dei driver di dispositivo chiama le routine di supporto di I/O manager per l'uso della coda del dispositivo associata, che contiene gli INDIRIZZI IP ogni volta che le richieste di I/O del dispositivo per un oggetto dispositivo di destinazione arrivano più velocemente rispetto al driver può elaborarli al completamento. Con questa tecnica, gli IRP vengono accodati a una routine StartIo fornita dal driver.

Per prestazioni ottimali, la maggior parte dei driver intermedi passa semplicemente IRP a driver inferiori quanto arrivano, quindi i driver intermedi quasi non usano mai le code di dispositivo associate ai rispettivi oggetti dispositivo.

È tuttavia possibile progettare un driver per gestire le code interne dei provider di sicurezza di rete configurando in modo esplicito una o più code di dispositivi, code interlock o code annullate. Questo approccio può essere particolarmente utile se il driver controlla un dispositivo che si sovrappone alle operazioni di I/O. Per questo dispositivo, può essere difficile gestire l'elaborazione simultanea di due o più IRP per lo stesso oggetto dispositivo di destinazione usando solo una singola coda.

Il modo più semplice per creare una coda interna consiste nell'usare il framework di coda IRP cancel-safe. È possibile implementare il meccanismo di accodamento scelto nel driver. È quindi possibile usare IoCsqInitialize per registrare un set di routine di callback che gestiscono l'inserimento e l'eliminazione di IRP, nonché il blocco e lo sblocco della coda. Il framework di coda IRP cancel-safe fornisce le routine IoCsqInsertIrp, IoCsqRemoveIrp e IoCsqRemoveNextIrp che usano automaticamente le routine di callback per inserire e rimuovere in modo sicuro gli INDIRIZZI IP dalla coda del driver. Il sistema usa anche le routine di callback per rimuovere in modo sicuro eventuali IP annullati.

È anche possibile scegliere di configurare code supplementari per i provider di accesso nel driver di un controller di dispositivo per un set di dispositivi eterogenei. Ad esempio, il driver della porta SCSI usa oggetti coda di dispositivi per le code interne. Questo driver ha una routine StartIo e configura gli oggetti coda del dispositivo come code supplementari, oltre alla coda del dispositivo associata all'oggetto dispositivo creato per rappresentare un HBA. Il driver della porta SCSI usa le code di dispositivi supplementari per contenere i gruppi di integrazione associati per unità logiche specifiche sul bus SCSI controllato da HBA.

Il driver del controller floppy di sistema è un esempio di driver che non dispone di routine StartIo e usa una coda interlock. Questo driver configura una coda interlock collegata doubly in cui e da cui il driver e il relativo inserimento del thread dedicato al dispositivo e rimuovere i provider di integrazione.

Il kernel definisce il tipo di oggetto coda del dispositivo. Il componente di supporto esecutivo fornisce routine per l'inserimento e la rimozione di IRP nelle code interlock. I driver per Windows XP e versioni successive di Windows possono usare code IRP annullate per gestire l'accodamento di IRP.

Le sezioni seguenti illustrano come usare code di dispositivi, code interlock e code annullate:

Configurazione e uso di code di dispositivi

Gestione delle code dei dispositivi

Configurazione e uso di code interlock

Gestione di code interlock con un thread Driver-Created

Code IRP annullate