Set di regole IRQL (WDM)
Usare queste regole per verificare che il driver effettui chiamate DDI nel runtime di integrazione richiesto.
Un driver che non segue le regole IRQL può causare gravi problemi durante l'operazione che possono causare condizioni di deadlock o arresti anomali del computer.
Contenuto della 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 in IRQL<DISPATCH_LEVEL, a meno che il codice della funzione principale IRP non venga inoltrato è uno dei seguenti: |
|
La regola ForwardedAtBadIrqlFsdAsync specifica che il driver chiama IoCallDriver e PoCallDriver in IRQL<DISPATCH_LEVEL, a meno che il codice della funzione principale IRP non venga inoltrato è uno dei seguenti: |
|
La regola ForwardedAtBadIrqlFsdSync specifica che il driver chiama IoCallDriver e PoCallDriver in IRQL<DISPATCH_LEVEL, a meno che il codice della funzione principale IRP non venga inoltrato è 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 corretto. |
|
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 corretto. |
|
La regola IrqlExPassive specifica che il driver chiama le routine di supporto esecutivo seguenti solo in IRQL = PASSIVE_LEVEL: La regola IrqlExPassive specifica anche che il driver chiama ExRaiseStatus in IRQL <= APC_LEVEL |
|
La regola IrqlIoApcLte specifica che il driver chiama le routine di gestione 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 routine di I/O Manager specifiche solo quando viene eseguito in 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 la generazione e l'abbassamento di IRQL: Quando il driver chiama KeRaiseIrql, viene eseguito in un IRQL 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 il driver per chiamare la routine KeWaitForMutexObject in base al valore del parametro Timeout : |
|
La regola IrqlKeWaitForMultipleObjects specifica che i chiamanti della routine KeWaitForMultipleObjects devono essere eseguiti in base al parametro Timeout . |
|
La regola IrqlMmApcLte specifica che il driver chiama le routine di gestione 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 della struttura di processo seguenti solo quando viene eseguito in IRQL = PASSIVE_LEVEL: |
|
La regola IrqlReturn specifica che le routine di invio del driver restituiscono allo stesso irQL in cui sono stati chiamati. |
|
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 (con estensione vcxProj) in Microsoft Visual Studio. Dal menu Driver fare clic su 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 . Ad esempio:
msbuild /t:sdv /p:Inputs="/check:Irql.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Per altre informazioni, vedere Uso del verificatore driver statico per trovare i difetti nei comandi driver e verifica driver statici (MSBuild).