Condividi tramite


Forza il controllo IRQL

Anche se i driver in modalità kernel non sono consentiti di accedere alla memoria impaginabile a un irQL elevato o durante la conservazione di un blocco di rotazione, tale azione potrebbe non essere nota se la pagina non è effettivamente stata ritagliata dal set di lavoro e impaginato sul disco.

Quando force IRQL Check è abilitato, Driver Verifier fornisce una pressione estrema sull'uso della memoria di sistema. Ogni volta che un driver viene verificato richiede un blocco di rotazione, chiama KeSynchronizeExecution o genera irQL in DISPATCH_LEVEL o versione successiva, tutti i pool visualizzabili di sistema, il codice e i dati (che includono il codice e i dati pageable del driver) vengono tagliati dal set di lavoro. Se il driver tenta di accedere a una qualsiasi di questa memoria, il verificatore driver genera un controllo di bug.

A partire da Windows Vista, questa opzione causa anche il rilevamento del verificatore driver quando alcuni oggetti di sincronizzazione sono inclusi nella memoria paginabile. Questi oggetti di sincronizzazione non possono essere paginati perché il kernel del sistema operativo li accede a IRQL con privilegi elevati. Il verificatore driver può rilevare le strutture KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE e FAST_MUTEX .

Questa pressione sull'utilizzo della memoria non influisce direttamente sui driver che non sono selezionati per la verifica. Quando un driver non selezionato per la verifica genera irQL, non attiva l'azione di taglio. Tuttavia, quando viene verificato un driver che genera IRQL, Il verifica driver esegue il taglio delle pagine che possono essere usate dai driver che non vengono verificati. Quindi gli errori commessi dai driver che non vengono verificati possono essere rilevati occasionalmente quando questa opzione è attiva.

Monitoraggio di IRQL genera e blocca spin

È possibile monitorare il numero di istanze di IRQL, blocchi di spin e chiamate a KeSynchronizeExecution effettuate dai driver verificati. È anche possibile monitorare il numero di volte in cui il verificatore driver ha ridotto la memoria paginabile dal set di lavoro. 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 di contatori globali .

L'estensione del debugger del kernel !verifier può essere usata anche per monitorare queste statistiche. Presenta informazioni simili a quella di Driver Verifier Manager. In Windows XP e versioni successive, l'estensione !verifier 0x8 visualizzerà un log delle modifiche irQL recenti apportate dai driver verificati. Per informazioni sulle estensioni del debugger, vedere Debug di Windows.

Chiamata a KeEnterCriticalRegion o KeLeaveCriticalRegion in DISPATCH_LEVEL o sopra

KeEnterCriticalRegion e KeLeaveCriticalRegion sono API che è possibile usare per sincronizzare l'esecuzione di una sequenza critica di codice driver con il recapito di chiamate asincrone di routine asincrone del kernel normale. Le API KeEnterCriticalRegion e KeLeaveCriticalRegion non possono essere chiamate in IRQL = DISPATCH_LEVEL o versioni successive. La chiamata a KeEnterCriticalRegion o KeLeaveCriticalRegion in DISPATCH_LEVEL o versioni successive può causare un danneggiamento della memoria o del blocco del sistema.

A partire da Windows 7, Driver Verifier rileva le chiamate a queste API in DISPATCH_LEVEL o versioni successive se l'opzione Force IRQL Check è abilitata.

Attivazione di questa opzione

È possibile attivare la funzionalità Force IRQL Check 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 Force IRQL Check è rappresentata da Bit 1 (0x2).. Per attivare Force IRQL Check, usare un valore flag di 0x2 o aggiungere 0x2 al valore del flag. Ad esempio:

    verifier /flags 0x2 /driver MyDriver.sys
    

    La funzionalità sarà attiva dopo l'avvio successivo.

    È anche possibile attivare e disattivare Force IRQL Check senza riavviare il computer aggiungendo il parametro /volatile al comando. Ad esempio:

    verifier /volatile /flags 0x2 /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à Force IRQL Check è 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) Forza controllo IRQL.

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