Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
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.
Abbreviation |
Spp |
Valore esadecimale |
(Nessuno) |
Nome simbolico |
(Nessuno) |
Destinazione |
Voce del Registro di sistema a livello di sistema (Windows Vista e versioni successive) Voce del Registro di sistema globale, flag del kernel |
Selezione di un tag pool
Quando si richiede un pool speciale per un tag di pool specifico, assicurarsi che il driver o un altro programma in modalità kernel usi un tag di pool univoco.
Inoltre, quando si crea un tag del pool ,ad esempio usando ExAllocatePoolWithTag, è consigliabile immettere i caratteri di 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 in altri strumenti in ordine inverso (endian inferiore). Se li si immette in ordine inverso, vengono visualizzati in ordine normale (0x46726564)
Se si sospetta che il driver usi tutto il pool speciale, è consigliabile usare più tag del pool nel codice. È quindi possibile testare il driver più volte, assegnando un pool speciale a un tag del pool in ogni test.
Selezionare anche un tag del pool con un valore esadecimale maggiore delle dimensioni della pagina del sistema. Per il codice in modalità kernel, se si immette un tag del 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 un pool speciale per le allocazioni con un tag di pool equivalente. Ad esempio, se si seleziona una dimensione pari a 30, verrà usato un pool speciale per tutte le allocazioni comprese tra 17 e 32 byte e per le allocazioni con il tag 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 processore x86, PAGE_SIZE è 0x1000 e gli intervalli di dimensioni di allocazione sono di 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 a 0xFF0 byte |
FF8 (decimale 4088) |
In un computer con processore AMD x86-64, PAGE_SIZE è 0x1000 e gli intervalli di dimensioni di allocazione sono di 16 byte. 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) |
... |
... |
da 0xFD1 a 0xFE0 byte |
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 un pool speciale. Per informazioni sulla configurazione della funzionalità Pool speciale nella riga di comando, vedere Comandi GFlags. Per un esempio, vedere Esempio 14: Configurazione di un pool speciale.
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 di un determinato driver, utilizzare Driver Verifier. Per ulteriori informazioni, si prega di consultare l'argomento "Pool speciale" nella sezione "Driver Verifier" del Windows Driver Kit (WDK).
Le funzionalità speciali del pool di Gflags e Driver Verifier consentono di rilevare e identificare l'origine degli errori nell'uso del 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 paginabile e due pagine di spazio di indirizzi virtuali. 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 richiedente restituisce uno stato di esito positivo. Non restituisce un errore, perché l'allocazione è riuscita, 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). Nelle macchine x86, poiché lo spazio virtuale (oltre a quello fisico) viene utilizzato, non usare l'opzione di avvio /3GB quando si usa un pool speciale. È anche consigliabile aumentare la quantità minima/massima del file di paging per un fattore di due o tre.
È anche possibile configurare la funzionalità Pool Speciale per allineare l'allocazione di memoria al fine di rilevare riferimenti alla memoria precedenti l'allocazione ("sottosuperamenti") o riferimenti alla memoria oltre l'allocazione ("superamenti"). Questa funzionalità è disponibile solo nella finestra di dialogo Flag globali in tutte le versioni di Windows. Per informazioni dettagliate, vedere Individuazione di Overrun e Underrun.
In Windows Vista e versioni successive di Windows è possibile configurare la funzionalità Pool speciale come impostazione del Registro di sistema che richiede un riavvio, ma rimane effettiva fino a quando non si modifica o come impostazione del flag del kernel che non richiede un riavvio, ma è efficace solo fino al riavvio o all'arresto di 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 dalla riga di comando. Nella versione precedente di Windows questa funzionalità è disponibile solo nella finestra di dialogo Flag globali.