Condividi tramite


Restrizioni sul codice paginabile nei driver di archiviazione

Per evitare il deadlock, nessuna parte di un driver di archiviazione usato per la lettura o la scrittura delle richieste deve avere codice impaginabile, né deve mai tentare di accedere alla memoria impaginabile. Ciò avviene perché le routine DispatchRead e DispatchWrite del driver possono essere chiamate in irQL > PASSIVE_LEVEL e l'I/O in paging che esegue un errore di pagina in IRQL = APC_LEVEL.

Le regole simili si applicano alla routine di invio del controllo del dispositivo del driver di archiviazione, DispatchDeviceControl, con determinate qualifiche. La routine di invio del controllo del dispositivo del driver di archiviazione non deve contenere codice paginabile o memoria paginabile. La routine di invio deve essere in grado di ricevere richieste IOCTL destinate ad altri driver in IRQLs arbitrarie e passarle allo stack di driver. I driver devono passare tutte le richieste IOCTL non gestite nello stack senza modificare irQL o il contesto della richiesta.

Tuttavia, Microsoft richiede che tutte le richieste IOCTL di archiviazione vengano inviate in PASSIVE_LEVEL, quindi, anche se la routine di invio non è paginabile, può chiamare sottoroutine paginabili per gestire le richieste IOCTL di archiviazione. Queste subroutine possono anche accedere alla memoria paginabile.

Routine come DriverEntry, Reinitialize e Scaricamento, che non eseguono operazioni di I/O e eseguite in IRQL = PASSIVE_LEVEL possono avere anche codice paginabile.

Considerazioni speciali si applicano ai driver che gestiscono i dispositivi di archiviazione nel percorso di paging. Un driver si trova nel "percorso di paging" se partecipa alle operazioni di I/O nel file di paging. Quando un driver di archiviazione si trova nel percorso di paging, la routine DispatchPower per le richieste di IRP_MJ_POWER non deve essere impaginabile.

Per impostazione predefinita, il codice per i driver in modalità kernel non è paginabile né la memoria globale usata dai driver in modalità kernel visualizzabili. Per informazioni su come rendere possibile la tabella codici, vedere Creazione di codice driver o pagina dati.