Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il tracciamento del pool monitora le allocazioni di memoria effettuate dal driver. Nel momento in cui il driver viene scaricato, Driver Verifier garantisce che tutte le allocazioni effettuate dal driver siano state rilasciate.
Le allocazioni di memoria non aggiornate (dette anche perdite di memoria) sono una causa comune delle prestazioni del sistema operativo ridotte. Questi possono frammentare i pool di sistema e alla fine causare blocchi del sistema.
Quando questa opzione è attiva, Driver Verifier genererà il controllo dei bug 0xC4 (con parametro 1 uguale a 0x62) se un driver scarica senza liberare tutte le allocazioni.
Se Driver Verifier genera questo controllo bug con il parametro 1 pari a 0x51, 0x52, 0x53, 0x54 o 0x59, il driver ha scritto in memoria al di fuori delle allocazioni. In questo caso, è necessario abilitare la funzionalità Pool speciale per individuare l'origine dell'errore.
Vedere Controllo bug 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION) per un elenco dei parametri di controllo dei bug.
A partire da Windows Vista, l'abilitazione dell'opzione Rilevamento pool abilita anche il rilevamento delle pagine bloccate. Quando questa opzione è attiva, Driver Verifier genererà il controllo dei bug 0xCB (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS) se un driver non rilascia pagine bloccate dopo un'operazione di I/O.
In Windows 7 e nelle versioni successive del sistema operativo Windows, l'opzione Tracciamento del Pool supporta la memoria che è stata allocata tramite le seguenti API del kernel:
IoAllocateIrp e le altre routine in grado di allocare strutture di dati I/O request packet (IRP)
RtlAnsiStringToUnicodeString e altre routine di stringhe della libreria di runtime (RTL)
In Windows 7 e versioni successive del sistema operativo Windows, quando il Pool Tracking è attivata, Driver Verifier può rilevare i tentativi di allocare memoria del pool di kernel con quota nel contesto del processo inattivo. Tali tentativi indicano in genere che il driver sta allocando memoria da una routine DPC. Il contesto del thread o del processo per le routine DPC non è affidabile, quindi il tentativo di caricare la quota a tale processo non è corretto.
Monitoraggio del tracciamento del pool
Le statistiche di allocazione del pool di memoria possono essere monitorate separatamente per ogni driver verificato. Queste statistiche possono essere visualizzate da Gestione driver verifier, dalla riga di comando Verifier.exe o da un file di log. Per informazioni dettagliate, vedere Monitoraggio dei singoli contatori .
L'estensione del debugger del kernel !verifier 0x3 può essere usata per individuare allocazioni di memoria in sospeso dopo il caricamento del driver o per tenere traccia delle allocazioni correnti mentre il driver è in esecuzione. Questa estensione mostra anche il tag del pool, le dimensioni del pool e l'indirizzo dell'allocatore per ogni allocazione. Per informazioni sulle estensioni del debugger, vedere Debugging di Windows.
Addebiti per la quota di risorse dal sistema DPC
I driver del kernel possono chiamare ExAllocatePoolWithQuotaTag per allocare la memoria del pool del kernel e caricare il numero di byte allocati alla quota del pool del processo corrente. I driver usano in genere la quota per le allocazioni di memoria direttamente correlate a una richiesta proveniente da un'applicazione.
Le routine DPC (Deferred Procedure Call) possono essere eseguite nel contesto di qualsiasi processo. Pertanto, l'attribuzione della quota da un processo di routine DPC coinvolge un processo casuale. Peggio ancora, quando la routine DPC viene eseguita nel contesto del processo inattivo, questa condizione può causare corruzione della memoria o arresti anomali del sistema.
A partire da Windows 7, Driver Verifier rileva le chiamate ExAllocatePoolWithQuotaTag dalle routine DPC.
l'attivazione di questa opzione
È possibile attivare la funzione di rilevamento del pool per uno o più driver utilizzando il Driver Verifier Manager o la riga di comando Verifier.exe. Per informazioni dettagliate, vedere Selezione delle Opzioni del Verificatore Driver.
Alla riga di comando
Nella riga di comando, l'opzione Monitoraggio pool è rappresentata da Bit 3 (0x8).At the command line, the Pool Tracking option is represented by Bit 3 (0x8). Per attivare il rilevamento pool, usare un valore flag di 0x8 o aggiungere 0x8 al valore del flag. Per esempio:
verifier /flags 0x8 /driver MyDriver.sys
La funzionalità sarà attiva dopo l'avvio successivo.
In Windows Vista e versioni successive di Windows è anche possibile attivare e disattivare Monitoraggio pool senza riavviare il computer aggiungendo il parametro /volatile al comando. Per esempio:
verifier /volatile /flags 0x8 /adddriver MyDriver.sys
Questa impostazione è effettiva immediatamente, ma viene persa quando si arresta o si riavvia il computer. Per informazioni dettagliate, vedere Uso di impostazioni volatili.
La funzionalità di monitoraggio del pool è inclusa anche nelle impostazioni standard. Per esempio:
verifier /standard /driver MyDriver.sys
Uso del Driver Verifier Manager
- Avviare il Manager verifica driver. Digitare Verifier in una finestra del Prompt dei Comandi.
- Selezionare Crea impostazioni personalizzate (per sviluppatori di codice) e quindi fare clic su Avanti.
- Selezionare Selezionare le singole impostazioni da un elenco completo.
- Seleziona Rilevamento pool.
Anche la funzionalità di monitoraggio del pool è inclusa nelle impostazioni standard. Per usare questa funzionalità, in Gestione Verificatore Driver, fare clic su Crea impostazioni standard.