Condividi tramite


Quando il codice e i dati devono essere pageable?

È possibile rendere visualizzabili tutti i driver o parte del driver. Il codice del driver di paging può ridurre le dimensioni dell'immagine di caricamento del driver, liberando così spazio di sistema per altri usi. È più pratico per i driver di dispositivi usati sporadicamente, ad esempio modem e CD-ROM, o per parti di driver che vengono raramente chiamati.

Il codice del driver che esegue una delle operazioni seguenti deve essere residente in memoria. Ovvero, questo codice deve trovarsi in una sezione non di paging o in una sezione di paging bloccata in memoria quando viene eseguito il codice.

  • Viene eseguito in corrispondenza o superiore a IRQL = DISPATCH_LEVEL.

  • Acquisisce i blocchi di rotazione.

  • Chiama una delle routine di supporto degli oggetti del kernel, ad esempio KeReleaseMutex o KeReleaseSemaphore, in cui il parametro Wait è impostato su TRUE. Se il kernel viene chiamato con Wait impostato su TRUE, la chiamata restituisce con IRQL al DISPATCH_LEVEL.

Il codice del driver deve essere in esecuzione in IRQL < DISPATCH_LEVEL quando il codice esegue qualsiasi operazione che potrebbe causare un errore di pagina. Il codice può causare un errore di pagina se esegue una delle operazioni seguenti:

  • Accede al pool di paging che non è bloccato in memoria.

  • Chiama una routine di paging.

  • Accede ai buffer utente sbloccati nel contesto del thread utente.

In genere, è consigliabile creare una pagina di sezione se la quantità totale di tutto il codice di paging (o dati) è di almeno 4 kilobyte (KB). Quando possibile, è necessario isolare il codice (o i dati) puramente pagable in una sezione separata dal codice (o dai dati) che a volte può essere ridimensionabile, ma a volte deve essere bloccato. Ad esempio, la combinazione di codice puramente pagable e codice bloccato su richiesta causa il blocco di più spazio di sistema per la sezione combinata di quanto sia necessario. Tuttavia, se un driver ha meno di 4 KB di codice o dati di cui è possibile eseguire la paging, è possibile combinare tale codice (o dati) con codice bloccato su richiesta (o dati) in una sezione, risparmiando spazio di sistema.