Routine di invio e IRQLs
La maggior parte delle routine di invio dei driver viene chiamata in un contesto di thread arbitrario in IRQL = PASSIVE_LEVEL, con le eccezioni seguenti:
Tutte le routine di invio del driver di livello più alto vengono chiamate nel contesto del thread che ha generato la richiesta di I/O, che è comunemente un thread di applicazione in modalità utente.
In altre parole, le routine di invio di driver di file system e altri driver di livello più alto vengono chiamati in un contesto di thread non arbiverso in IRQL = PASSIVE_LEVEL.
Le routine DispatchRead, DispatchWrite e DispatchDeviceControl dei driver di dispositivo di livello più basso e dei driver intermedi a livelli sopra di essi nel percorso di paging del sistema, possono essere chiamate in IRQL = APC_LEVEL e in un contesto di thread arbitrario.
Le routine DispatchRead e/o DispatchWrite e qualsiasi altra routine che elabora anche richieste di lettura e/o scrittura in un dispositivo o un driver intermedio di questo tipo, devono essere residenti in ogni momento. Queste routine di driver non possono essere né paginabili né far parte della sezione dell'immagine paginabile di un driver; non devono accedere a memoria paginabile. Inoltre, non devono dipendere da chiamate di blocco ,ad esempio KeWaitForSingleObject con un timeout diverso da zero.
La routine DispatchPower dei driver nei percorsi di ibernazione e/o paging può essere chiamata in IRQL = DISPATCH_LEVEL. Le routine DispatchPnP di tali driver devono essere preparate per gestire le richieste di IRP_MN_DEVICE_USAGE_NOTIFICATION PnP.
La routine DispatchPower dei driver che richiedono alimentazione inrush all'avvio può essere chiamata in IRQL = DISPATCH_LEVEL.
Per altre informazioni, vedere Gestione delle priorità hardware.