Condividi tramite


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.