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.
Usare queste regole per verificare che il driver effettui chiamate DDI al livello IRQL richiesto.
Un driver che non segue le regole IRQL può causare gravi problemi durante l'operazione che possono portare a condizioni di deadlock o arresti anomali del computer.
In questa sezione
| Argomento | Descrizione |
|---|---|
La regola ForwardedAtBadIrql specifica che il driver deve chiamare IoCallDriver e PoCallDriver in IRQL<DISPATCH_LEVEL a meno che il codice della funzione principale IRP non venga inoltrato è uno dei seguenti: |
|
La regola ForwardedAtBadIrqlAllocate specifica che il driver deve chiamare IoCallDriver e PoCallDriver a IRQL<DISPATCH_LEVEL, a meno che il codice della funzione principale IRP inoltrato non sia uno dei seguenti: |
|
La regola ForwardedAtBadIrqlFsdAsync specifica che il driver chiami IoCallDriver e PoCallDriver in IRQL<DISPATCH_LEVEL, a meno che il codice della funzione principale IRP inoltrato non sia uno dei seguenti: |
|
La regola ForwardedAtBadIrqlFsdSync specifica che il driver chiama IoCallDriver e PoCallDriver a livello IRQL<DISPATCH_LEVEL, a meno che il codice funzione principale di IRP inoltrato sia uno dei seguenti: |
|
La regola IrqlApcLte specifica che il driver chiama ObGetObjectSecurity e ObReleaseObjectSecurity solo quando viene eseguito in IRQL <= APC_LEVEL. |
|
La regola IrqlDispatch specifica che il driver chiama le DDI seguenti solo quando viene eseguito in IRQL = DISPATCH_LEVEL. |
|
La regola IrqlExAllocatePool specifica che il driver chiama ExAllocatePoolWithTag e ExAllocatePoolWithTagPriority solo quando viene eseguito in IRQL<=DISPATCH_LEVEL. |
|
La regola IrqlExApcLte1 specifica che il driver chiama ExAcquireFastMutex e ExTryToAcquireFastMutex solo in IRQL <= APC_LEVEL. |
|
La regola IrqlExApcLte2 specifica che il driver chiama le routine seguenti solo in IRQL <= APC_LEVEL. |
|
La regola IrqlExApcLte3 specifica che il driver chiama le routine di supporto esecutivo seguenti solo in IRQL <= APC_LEVEL. |
|
La regola IrqlExApcLteInline specifica che le DDI vengono chiamate solo a livelli IRQL appropriati |
|
La regola IrqlExFree1 specifica che ExFreePool e ExFreePoolWithTag vengono chiamati in IRQL appropriati. |
|
La regola IrqlExFree2 specifica che ExFreePool e ExFreePoolWithTag vengono chiamati in IRQL corretto. |
|
La regola IrqlExFree3 specifica che ExFreePool e ExFreePoolWithTag vengono chiamati in IRQL appropriati. |
|
La regola IrqlExPassive specifica che il driver chiama le routine di supporto esecutivo seguenti solo in IRQL = PASSIVE_LEVEL: La regola IrqlExPassive specifica inoltre che il driver chiama ExRaiseStatus in IRQL <= APC_LEVEL |
|
La regola IrqlIoApcLte specifica che il driver chiama le routine di gestione di I/O seguenti solo quando viene eseguito in IRQL <= APC_LEVEL: |
|
La regola IrqlIoDispatch specifica che il driver chiama le routine di I/O Manager seguenti solo quando viene eseguito in IRQL <= DISPATCH_LEVEL: IoGetDeviceToVerify, IoSetDeviceToVerify. |
|
La regola IrqlIoPassive1 specifica che il driver chiama le routine seguenti solo quando viene eseguito in IRQL = PASSIVE_LEVEL: |
|
La regola IrqlIoPassive2 specifica che il driver chiama le routine di I/O Manager seguenti solo in IRQL = PASSIVE_LEVEL: |
|
La regola IrqlIoPassive3 specifica che il driver chiama le routine seguenti solo quando viene eseguito in IRQL = PASSIVE_LEVEL: |
|
La regola IrqlIoPassive4 specifica che il driver chiama le routine seguenti solo quando viene eseguito in IRQL = PASSIVE_LEVEL: |
|
La regola IrqlIoPassive5 specifica che il driver chiama routine di I/O Manager specifiche solo quando viene eseguito in IRQL = PASSIVE_LEVEL. |
|
La regola IrqlIoRtlZwPassive specifica che il driver chiama specifiche routine del gestore I/O solo quando opera a IRQL = PASSIVE_LEVEL. |
|
La regola IrqlKeApcLte1 specifica che il driver chiama le routine del kernel seguenti solo quando viene eseguito in IRQL <= APC_LEVEL: |
|
La regola IrqlKeApcLte2 specifica che il driver chiama le routine del kernel seguenti solo quando viene eseguito in IRQL <= APC_LEVEL: |
|
La regola IrqlKeDispatchLte specifica che il driver chiama le routine del kernel seguenti solo quando viene eseguito in IRQL <= DISPATCH_LEVEL: |
|
La regola IrqlKeRaiseLower specifica che il driver esegue le operazioni seguenti durante l'aumento e l'abbassamento di IRQL: Quando il driver chiama KeRaiseIrql, viene eseguito in un runtime di integrazione inferiore o uguale al valore del parametro NewIrql .Il driver chiama KeLowerIrql solo dopo aver chiamato KeRaiseIrql o KeRaiseIrqlToDpcLevel. |
|
La regola IrqlKeRaiseLower2 specifica che i driver usano KeLowerIrql per ripristinare l'IRQL originale generato da una chiamata precedente a KeRaiseIrql o KeRaiseIrqlToDpcLevel. |
|
La regola IrqlKeReleaseSpinLock specifica che il driver chiama KeReleaseSpinLock solo quando viene eseguito in IRQL = DISPATCH_LEVEL. |
|
La regola IrqlKeSetEvent specifica che la routine KeSetEvent viene chiamata solo in IRQL <= DISPATCH_LEVEL quando Wait è impostato su FALSE e in IRQL <= APC_LEVEL quando Wait è impostato su TRUE. |
|
La regola IrqlKeWaitForMutexObject specifica che il driver deve chiamare la routine KeWaitForMutexObject al corretto livello IRQL in base al valore del parametro Timeout. |
|
La regola IrqlKeWaitForMultipleObjects specifica che i chiamanti della routine KeWaitForMultipleObjects devono essere eseguiti a un livello IRQL appropriato in base al parametro Timeout. |
|
La regola IrqlMmApcLte specifica che il driver chiama le routine di gestione della memoria seguenti solo quando viene eseguito in IRQL <= APC_LEVEL: |
|
La regola IrqlMmDispatch specifica che il driver chiama MmFreeContiguousMemory solo quando viene eseguito in IRQL <= DISPATCH_LEVEL. |
|
La regola IIrqlNtifsApcPassive specifica che il driver chiama le DDI elencate nella regola solo quando viene eseguito in IRQL = PASSIVE_LEVEL o in IRQL <= APC_LEVEL. |
|
La regola IrqlObPassive specifica che il driver chiama ObReferenceObjectByHandle solo quando viene eseguito in IRQL = PASSIVE_LEVEL. |
|
La regola IrqlPsPassive specifica che il driver chiama le routine specifiche della struttura di processo solo quando viene eseguito in IRQL = PASSIVE_LEVEL. |
|
La regola IrqlReturn specifica che le routine di invio del driver restituiscono allo stesso IRQL in corrispondenza del quale sono state chiamate. |
|
La regola IrqlRtlPassive specifica che il driver chiama RtlDeleteRegistryValue solo quando viene eseguito in IRQL = PASSIVE_LEVEL. |
|
La regola IrqlZwPassive specifica che il driver chiama ZwClose solo quando viene eseguito in IRQL = PASSIVE_LEVEL. |
Per selezionare il set di regole Irql
Selezionare il progetto driver (.vcxProj) in Microsoft Visual Studio. Dal menu Driver fare clic su Launch Static Driver Verifier...(Avvia verifica driver statico...).
Fare clic sulla scheda Regole . In Set di regole selezionare Irql.
Per selezionare il set di regole predefinito da una finestra del prompt dei comandi per sviluppatori di Visual Studio, specificare Irql.sdv con l'opzione /check . Per esempio:
msbuild /t:sdv /p:Inputs="/check:Irql.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Per altre informazioni, vedere Uso di Static Driver Verifier per individuare difetti nei driver e Comandi di Static Driver Verifier (MSBuild).