Pool speciale
La funzionalità Pool speciale configura Windows per richiedere allocazioni di memoria da un pool di memoria riservato quando la memoria viene allocata con un tag di pool specificato o si trova all'interno di un intervallo di dimensioni specificato.
Abbreviazione |
Spp |
Valore esadecimale |
(nessuna) |
Nome simbolico |
(nessuna) |
Destinazione |
Voce del Registro di sistema (Windows Vista e versioni successive) Voce del Registro di sistema, flag del kernel |
Selezione di un tag di pool
Quando si richiede un pool speciale per un tag di pool specifico, assicurarsi che il driver o altro programma in modalità kernel usi un tag di pool univoco.
Inoltre, quando si crea un tag di pool, ad esempio usando ExAllocatePoolWithTag, è consigliabile immettere i caratteri del tag in ordine inverso. Ad esempio, se il tag è Fred, è consigliabile immetterlo come derF (0x64657246). I tag del pool vengono archiviati nel Registro di sistema e visualizzati nel debugger e altri strumenti in ordine inverso (endian inferiore). Se li si immette in ordine inverso, vengono visualizzati in ordine di inoltro (0x46726564)
Se si sospetta che il driver usi tutto il pool speciale, prendere in considerazione l'uso di più tag di pool nel codice. È quindi possibile testare il driver più volte, assegnando un pool speciale a un tag di pool in ogni test.
Selezionare anche un tag di pool con un valore esadecimale maggiore delle dimensioni della pagina del sistema. Per il codice in modalità kernel, se si immette un tag di pool con un valore minore di PAGE_SIZE, Gflags richiede un pool speciale per tutte le allocazioni le cui dimensioni si trovano all'interno dell'intervallo corrispondente e richiede pool speciali per le allocazioni con un tag di pool equivalente. Ad esempio, se si seleziona una dimensione di 30, verrà usato un pool speciale per tutte le allocazioni tra 17 e 32 byte di dimensioni e per le allocazioni con il tag del pool 0x0030.
Selezione di una dimensione di allocazione
Usare le linee guida seguenti per selezionare una dimensione di allocazione per la funzionalità Pool speciale.
In un computer con un processore x86, PAGE_SIZE è 0x1000 e gli intervalli di dimensioni di allocazione sono 8 byte di lunghezza. Per configurare la funzionalità Pool speciale per tutte le allocazioni con dimensioni in questo intervallo, immettere un numero uguale al massimo di questo intervallo più 8. Questo numero è sempre un multiplo di 8.) La tabella seguente illustra questi valori:
Intervallo di dimensioni | Immettere questo numero |
---|---|
da 1 a 8 byte |
10 (decimale 16) |
Da 9 a 16 byte |
18 (decimale 24) |
Da 17 a 24 byte |
20 (decimale 32) |
... |
... |
0xFE9 da 0xFF0 byte |
FF8 (decimale 4088) |
In un computer con un processore AMD x86-64, PAGE_SIZE è 0x1000 e gli intervalli di dimensioni di allocazione sono 16 byte di lunghezza. Per configurare la funzionalità Pool speciale per tutte le allocazioni con dimensioni in questo intervallo, immettere un numero uguale al massimo di questo intervallo più 16. Questo numero è sempre un multiplo di 16.) La tabella seguente illustra questi valori:
Intervallo di dimensioni | Immettere questo numero |
---|---|
Da 1 a 16 byte |
20 (decimale 32) |
Da 17 a 32 byte |
30 (decimale 48) |
Da 33 a 48 byte |
40 (decimale 64) |
... |
... |
0xFD1 a byte 0xFE0 |
FF0 (decimale 4080) |
In un computer con qualsiasi processore è possibile usare un asterisco ( ) o 0x2A ( * decimale 42) per configurare la funzionalità Pool speciale per tutte le allocazioni di memoria nel sistema.
Commenti
Per informazioni sulla configurazione della funzionalità Pool speciale nella finestra di dialogo Flag globali, vedere Configurazione di pool speciali. Per informazioni sulla configurazione della funzionalità Del pool speciale nella riga di comando, vedere Comandi GFlags. Per un esempio, vedere Esempio 14: Configurazione di pool speciali.
La funzionalità Pool speciale di Gflags indirizza Windows a richiedere allocazioni di memoria da un pool di memoria riservato quando la memoria viene allocata con un tag di pool specificato o si trova all'interno di un intervallo di dimensioni specificato. Per richiedere un pool speciale per tutte le allocazioni da un determinato driver, usare Il verificatore driver. Per altre informazioni, vedere l'argomento "Pool speciale" nella sezione "Driver Verifier" di Windows Driver Kit (WDK).
Le funzionalità speciali del pool di Gflags e Driver Verifier consentono di rilevare e identificare l'origine degli errori nel pool di kernel, ad esempio la scrittura oltre lo spazio di memoria allocato o il riferimento alla memoria già liberata.
Non tutte le richieste di pool speciali vengono soddisfatte. Ogni allocazione del pool speciale usa una pagina di memoria fisica non impaginabile e due pagine dello spazio indirizzi virtuale. Se il pool speciale è esaurito, la memoria viene allocata dal pool standard fino a quando il pool speciale non diventa nuovamente disponibile. Quando viene compilata una richiesta di pool speciale dal pool standard, la funzione di richiesta restituisce uno stato di esito positivo. Non restituisce un errore, perché l'allocazione ha avuto esito positivo, anche se non è stata riempita da un pool speciale.
Le dimensioni del pool speciale aumentano con la quantità di memoria fisica nel sistema; idealmente questo deve essere almeno 1 Gigabyte (GB). Nei computer x86, poiché lo spazio virtuale (oltre a quello fisico) viene utilizzato, non usare l'opzione di avvio /3 GB quando si usa un pool speciale. È anche consigliabile aumentare la quantità minima/massima del file di pagina in base a un fattore di due o tre.
È anche possibile configurare la funzionalità Pool speciale per allineare l'allocazione della memoria per rilevare i riferimenti alla memoria prima dell'allocazione ("sottorun") o riferimenti alla memoria oltre l'allocazione ("overruns"). Questa funzionalità è disponibile solo nella finestra di dialogo Flag globali in tutte le versioni di Windows. Per informazioni dettagliate, vedere Rilevamento di overrun e sottorun.
In Windows Vista e versioni successive di Windows è possibile configurare la funzionalità Del pool speciale come impostazione del Registro di sistema che richiede un riavvio, ma rimane efficace finché non lo si modifica o come impostazione del flag del kernel che non richiede un riavvio, ma è efficace solo finché non si riavvia o si arresta Windows. Nelle versioni precedenti di Windows, Il pool speciale è disponibile solo come impostazione del Registro di sistema.
In Windows Vista e versioni successive di Windows è possibile configurare la funzionalità Pool speciale usando la finestra di dialogo Flag globali o nella riga di comando. Nella versione precedente di Windows questa funzionalità è disponibile solo nella finestra di dialogo Flag globali.