2009-04-28 12 views

risposta

8

Dipende. Il pool Non di paging deve essere riservato per la memoria che deve rimanere nella RAM, quindi se si sta facendo qualcosa di critico che potrebbe essere influenzato da una pagina di memoria dall'operazione del disco, quindi utilizzare non paginato.

Vedere here per ulteriori informazioni.

Guardando a this (anche se si discute di C++ rispetto a C), sembrerebbe che per impostazione predefinita i globals possano trovarsi in #pragma. Anche su p22 di vediamo come farlo. Infine, this discuss qui vediamo che il segmento di dati dovrebbe essere non pagagable per impostazione predefinita.

+0

domanda No.my è somthing come se mi dichiaro una variabile globale nella device driver, che di memoria viene utilizzata, cioè memoria di paging e non di paging-memoria del pool? (Local la variabile utilizzerà la memoria del pool non di paging). – Navaneeth

+0

non sarà dipende. sarà un pool di paging o non di paging. – Navaneeth

+2

#pragma data_seg ("PAGE") int foo; #pragma data_seg ("NONPAGE") int bar; - foo qui è paginabile e la barra non è paginata. L'impostazione predefinita è non di paging se non gli viene fornito un pragma. – SecurityMatt

2

Le variabili globali in un driver in modalità kernel vengono allocate da NonPagedPool.

È anche possibile utilizzare l'estensione del dispositivo (quando si chiama IoCreateDevice), viene sempre allocata dalla memoria NonPagina.

Spero che questo aiuta, Martin

+1

Questo non è vero. I driver del kernel in Windows sono file PE con sezioni multiple e, a differenza dei normali programmi in modalità utente, i driver KM hanno normalmente * due * sezioni di dati, una paginata e una non paginata (e occasionalmente una terza che viene scartata dopo il driver KM è stato inizializzato). Nel tuo codice puoi scegliere se la tua variabile (o anche la sua funzione) è paginata o non paginata attraverso l'uso dei prg di allocazione. – SecurityMatt

Problemi correlati