Share via


Rilevamento pool

Monitoraggio pool monitora le allocazioni di memoria effettuate dal driver. Al momento del caricamento del driver, Driver Verifier garantisce che tutte le allocazioni effettuate dal driver siano state liberate.

Le allocazioni di memoria nonfreed (denominate anche perdite di memoria) sono una causa comune delle prestazioni del sistema operativo ridotte. Questi possono frammentare i pool di sistema e infine causare arresti anomali del sistema.

Quando questa opzione è attiva, Il verificatore driver emetterà il controllo dei bug 0xC4 (con parametro 1 uguale a 0x62) se un driver scarica senza liberare tutte le relative allocazioni.

Se il verificatore driver genera il controllo di questo bug con parametro 1 uguale a 0x51, 0x52, 0x53, 0x54 o 0x59, il driver ha scritto in memoria all'esterno delle allocazioni. In questo caso, è necessario abilitare la funzionalità Pool speciale per individuare l'origine dell'errore.

Per un elenco dei parametri di controllo dei bug, vedere Verifica bug 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION ).

A partire da Windows Vista, l'abilitazione dell'opzione Rilevamento pool abilita anche il rilevamento delle pagine bloccate. Quando questa opzione è attiva, Il verificatore driver emetterà il controllo 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 versioni successive del sistema operativo Windows, l'opzione Rilevamento pool supporta la memoria allocata usando le API kernel seguenti:

In Windows 7 e versioni successive del sistema operativo Windows, quando il rilevamento del pool viene attivato, Il verifica driver può rilevare i tentativi di allocare la memoria del pool di kernel con quota nel contesto del processo inattiva. Tali tentativi in genere indicano che il driver alloca la 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 pool di monitoraggio

Le statistiche di allocazione del pool di memoria possono essere monitorate separatamente per ogni driver verificato. Queste statistiche possono essere visualizzate da Gestione verifica driver, riga di comando Verifier.exe o in un file di log. Per informazioni dettagliate, vedere Monitoraggio dei singoli contatori .

L'estensione del debugger del kernel !verificatore 0x3 può essere usata per individuare le allocazioni di memoria in sospeso dopo il caricamento del driver o per tenere traccia delle allocazioni correnti durante l'esecuzione del driver. 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 Debug di Windows.

Costi di quota del pool dalla routine DPC

I driver del kernel possono chiamare ExAllocatePoolWithQuotaTag per allocare la memoria del pool di kernel e caricare il numero di byte allocati alla quota del pool del processo corrente. I driver usano in genere quota per le allocazioni di memoria direttamente correlate a una richiesta proveniente da un'applicazione.

Le routine di chiamata di procedura posticipata (DPC) possono essere eseguite nel contesto di qualsiasi processo. Pertanto, la quota di ricarica da una routine DPC carica un processo casuale. Anche peggio, quando la routine DPC viene eseguita nel contesto del processo inattiva, questa condizione può causare il danneggiamento della memoria o gli arresti anomali del sistema.

A partire da Windows 7, Driver Verifier rileva le chiamate ExAllocatePoolWithQuotaTag da routine DPC.

Attivazione di questa opzione

È possibile attivare la funzionalità Rilevamento pool per uno o più driver usando Gestione verifica driver o la riga di comando Verifier.exe. Per informazioni dettagliate, vedere Selezione delle opzioni di verifica driver.

  • Nella riga di comando

    Nella riga di comando l'opzione Rilevamento pool è rappresentata da Bit 3 (0x8). Per attivare Rilevamento pool, usare un valore flag di 0x8 o aggiungere 0x8 al valore del flag. Ad 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 Rilevamento pool senza riavviare il computer aggiungendo il parametro /volatile al comando. Ad esempio:

    verifier /volatile /flags 0x8 /adddriver MyDriver.sys
    

    Questa impostazione è efficace immediatamente, ma viene persa quando si arresta o si riavvia il computer. Per informazioni dettagliate, vedere Uso delle impostazioni volatili.

    La funzionalità Rilevamento pool è inclusa anche nelle impostazioni standard. Ad esempio:

    verifier /standard /driver MyDriver.sys
    
  • Uso di Gestione verifica driver

    1. Avviare Gestione verifica driver. Digitare Verifica in una finestra del prompt dei comandi.
    2. Selezionare Crea impostazioni personalizzate (per sviluppatori di codice) e quindi fare clic su Avanti.
    3. Selezionare Seleziona singole impostazioni da un elenco completo.
    4. Selezionare (check) Rilevamento pool.

    La funzionalità Rilevamento pool è inclusa anche nelle impostazioni standard. Per usare questa funzionalità, in Gestione verifica driver fare clic su Crea impostazioni standard.