Scrittura di routine di invio IRP

Nota

Per garantire un'affidabilità e prestazioni ottimali, usare i driver minifilter del file system con il supporto di Gestione filtri anziché i driver di filtro del file system legacy. Per convertire il driver legacy in un driver minifilter, vedere Linee guida per la conversione dei driver di filtro legacy.

I driver di filtro del file system usano routine dispatch simili a quelle usate nei driver di dispositivo. Una routine dispatch gestisce uno o più tipi di runtime di integrazione. Il tipo di un IRP è determinato dal codice della funzione principale. La routine DriverEntry del driver registra i punti di ingresso della routine di invio archiviandoli nella tabella dispatch dell'oggetto driver. Quando un IRP viene inviato al driver, il sottosistema I/O chiama la routine dispatch appropriata in base al codice della funzione principale di IRP.

Ogni routine di invio IRP viene definita come segue:

NTSTATUS
(*PDRIVER_DISPATCH) (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

Le routine di invio dei driver di filtro del file system vengono spesso chiamate in IRQL PASSIVE_LEVEL, nel contesto del thread che ha originato la richiesta di I/O, che è in genere un thread applicazione in modalità utente. Esistono tuttavia alcune eccezioni a questa regola. Ad esempio, gli errori di pagina causano la chiamata delle routine dispatch di lettura e scrittura al APC_LEVEL IRQL. Queste eccezioni vengono riepilogate in una tabella in Dispatch Routine IRQL e Thread Context. Sfortunatamente, non è attualmente possibile impedire ai driver nella catena di filtri di chiamare IoCallDriver in IRQL > PASSIVE_LEVEL (ad esempio, non rilasciando uno spinlock o un mutex veloce). Tuttavia, è consigliabile che le routine di invio filtro chiamino sempre IoCallDriver allo stesso IRQL in cui sono state chiamate.

Le routine Dispatch possono essere rese disponibili per la pagina, purché soddisfino i criteri descritti nella sezione Creazione di driver pageable della guida alla progettazione dell'architettura dei driver Kernel-Mode.

Se un driver di filtro del file system ha un oggetto dispositivo di controllo (CDO), le routine dispatch devono essere in grado di rilevare e gestire i casi in cui l'oggetto dispositivo di destinazione di IRP è il CDO anziché un oggetto dispositivo volume (VDO) per un volume montato. Per altre informazioni sull'oggetto CDO, vedere Oggetto dispositivo di controllo del driver di filtro.

In questa sezione vengono illustrati gli argomenti seguenti:

Completamento dell'IRP

Passaggio dell'IRP Down ai driver di Lower-Level

Restituzione dello stato dalle routine dispatch

Esempio: passaggio dell'IRP verso il basso senza impostare una routine di completamento

Vincoli sulle routine dispatch

Dispatch Routine IRQL and Thread Context