Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use estas reglas para comprobar que el controlador realiza llamadas DDI en el IRQL necesario.
Un controlador que no sigue las reglas IRQL puede causar problemas graves durante la operación que pueden provocar problemas de interbloqueo o bloqueos de equipo.
En esta sección
Tema | Descripción |
---|---|
La regla ForwardedAtBadIrql especifica que el controlador debe llamar a IoCallDriver y PoCallDriver en IRQL<DISPATCH_LEVEL a menos que el código de función principal de IRP que se reenvíe sea uno de los siguientes: |
|
La regla ForwardedAtBadIrqlAllocate especifica que el controlador debe llamar a IoCallDriver y PoCallDriver en IRQL<DISPATCH_LEVEL, a menos que el código de función principal de IRP que se reenvíe sea uno de los siguientes: |
|
La regla ForwardedAtBadIrqlFsdAsync especifica que el controlador llama a IoCallDriver y PoCallDriver en IRQL<DISPATCH_LEVEL, a menos que el código de función principal de IRP reenviado sea uno de los siguientes: |
|
La regla ForwardedAtBadIrqlAllocate especifica que el controlador llama a IoCallDriver y PoCallDriver en IRQL<DISPATCH_LEVEL, a menos que el código de función principal de IRP que se reenvíe sea uno de los siguientes: |
|
La regla IrqlApcLte especifica que el controlador llama a ObGetObjectSecurity y ObReleaseObjectSecurity solo cuando se ejecuta en IRQL <= APC_LEVEL. |
|
La regla IrqlDispatch especifica que el controlador llama a las siguientes DDI solo cuando se ejecuta en IRQL = DISPATCH_LEVEL. |
|
La regla IrqlExAllocatePool especifica que el controlador llama a ExAllocatePoolWithTag y ExAllocatePoolWithTagPriority solo cuando se ejecuta en IRQL<=DISPATCH_LEVEL. |
|
La regla IrqlExApcLte1 especifica que el controlador llama a ExAcquireFastMutex y ExTryToAcquireFastMutex solo en IRQL <= APC_LEVEL. |
|
La regla IrqlExApcLte2 especifica que el controlador llama a las siguientes rutinas solo en IRQL <= APC_LEVEL. |
|
La regla IrqlExApcLte3 especifica que el controlador solo llama a las siguientes rutinas de soporte ejecutivo cuando el IRQL es igual a APC_LEVEL. |
|
La regla IrqlExApcLteInline especifica que las DDI solo se llaman en niveles IRQL adecuados. |
|
La regla IrqlExFree1 especifica que se llama a ExFreePool y ExFreePoolWithTag en el IRQL adecuado. |
|
La regla IrqlExFree2 especifica que ExFreePool y ExFreePoolWithTag se llaman en el IRQL adecuado. |
|
La regla IrqlExFree3 especifica que se llama a ExFreePool y ExFreePoolWithTag en el IRQL adecuado. |
|
La regla IrqlExPassive especifica que el controlador llama a las siguientes rutinas de soporte ejecutivo solo en IRQL = PASSIVE_LEVEL: La regla IrqlExPassive también especifica que el controlador llama a ExRaiseStatus en IRQL <= APC_LEVEL |
|
La regla IrqlIoApcLte especifica que el controlador llama a las siguientes rutinas del administrador de E/S solo cuando se ejecuta en IRQL <= APC_LEVEL: |
|
La regla IrqlIoDispatch especifica que el controlador llama a las siguientes rutinas del Administrador de E/S solo cuando se ejecuta en IRQL <= DISPATCH_LEVEL: IoGetDeviceToVerify, IoSetDeviceToVerify. |
|
La regla IrqlIoPassive1 especifica que el controlador llama a las siguientes rutinas solo cuando se ejecuta en IRQL = PASSIVE_LEVEL: |
|
La regla IrqlIoPassive2 especifica que el controlador llama a las siguientes rutinas del Administrador de E/S solo en IRQL = PASSIVE_LEVEL: |
|
La regla IrqlIoPassive3 especifica que el controlador llama a las siguientes rutinas solo cuando se ejecuta en IRQL = PASSIVE_LEVEL: |
|
La regla IrqlIoPassive4 especifica que el controlador llama a las siguientes rutinas solo cuando se ejecuta en IRQL = PASSIVE_LEVEL: |
|
La regla IrqlIoPassive5 especifica que el controlador llama a rutinas específicas del Administrador de E/S solo cuando se ejecuta en IRQL = PASSIVE_LEVEL. |
|
La regla IrqlIoRtlZwPassive especifica que el controlador llama a rutinas específicas del Administrador de E/S solo cuando se ejecuta en IRQL = PASSIVE_LEVEL. |
|
La regla IrqlKeApcLte1 especifica que el controlador llama a las siguientes rutinas de kernel solo cuando se ejecuta en IRQL <= APC_LEVEL: |
|
La regla IrqlKeApcLte2 especifica que el controlador llama a las siguientes rutinas de kernel solo cuando se ejecuta en IRQL <= APC_LEVEL: |
|
La regla IrqlKeDispatchLte especifica que el controlador llama a las siguientes rutinas de kernel solo cuando se ejecuta en IRQL <= DISPATCH_LEVEL: |
|
La regla IrqlKeRaiseLower especifica que el controlador hace lo siguiente al generar y reducir IRQL: Cuando el controlador llama a KeRaiseIrql, se ejecuta en un IRQL que es menor o igual que el valor del parámetro NewIrql .El controlador llama a KeLowerIrql solo después de llamar a KeRaiseIrql o KeRaiseIrqlToDpcLevel. |
|
La regla IrqlKeRaiseLower2 especifica que los controladores usan KeLowerIrql para restaurar el IRQL original generado por una llamada anterior a KeRaiseIrql o KeRaiseIrqlToDpcLevel. |
|
La regla IrqlKeReleaseSpinLock especifica que el controlador llama a KeReleaseSpinLock solo cuando se ejecuta en IRQL = DISPATCH_LEVEL. |
|
La regla IrqlKeSetEvent especifica que solo se llama a la rutina KeSetEvent en IRQL <= DISPATCH_LEVEL cuando Wait está establecido en FALSE y en IRQL <= APC_LEVEL cuando Wait está establecido en TRUE. |
|
La regla IrqlKeWaitForMutexObject especifica el controlador para llamar a la rutina KeWaitForMutexObject en el IRQL adecuado basado en el valor del parámetro Timeout : |
|
La regla IrqlKeWaitForMultipleObjects especifica que los llamadores de la rutina KeWaitForMultipleObjects deben ejecutarse a un nivel IRQL adecuado según el parámetro Timeout. |
|
La regla IrqlMmApcLte especifica que el controlador llama a las siguientes rutinas del administrador de memoria solo cuando se ejecuta en IRQL <= APC_LEVEL: |
|
La regla IrqlMmDispatch especifica que el controlador llama a MmFreeContiguousMemory solo cuando se ejecuta en IRQL <= DISPATCH_LEVEL. |
|
La regla IIrqlNtifsApcPassive especifica que el controlador llama a los DDIs enumerados en la regla solo cuando se ejecuta en IRQL = PASSIVE_LEVEL o en IRQL <= APC_LEVEL. |
|
La regla IrqlObPassive especifica que el controlador llama a ObReferenceObjectByHandle solo cuando se ejecuta en IRQL = PASSIVE_LEVEL. |
|
La regla IrqlPsPassive especifica que el controlador llama a las rutinas de estructura de procesos específicas solo cuando se ejecuta en IRQL = PASSIVE_LEVEL. |
|
La regla IrqlReturn especifica que las rutinas de distribución del controlador vuelven al mismo IRQL al que se llamaron. |
|
La regla IrqlRtlPassive especifica que el controlador llama a RtlDeleteRegistryValue solo cuando se ejecuta en IRQL = PASSIVE_LEVEL. |
|
La regla IrqlZwPassive especifica que el controlador llama a ZwClose solo cuando se ejecuta en IRQL = PASSIVE_LEVEL. |
Para seleccionar el conjunto de reglas irql
Seleccione el proyecto de controlador (.vcxProj) en Microsoft Visual Studio. En el menú Controlador , haga clic en Iniciar comprobador de controladores estáticos....
Haga clic en la pestaña Reglas . En Conjuntos de reglas, seleccione Irql.
Para seleccionar las reglas predeterminadas en una ventana de comando de desarrollador de Visual Studio, especifique Irql.sdv con la opción /check. Por ejemplo:
msbuild /t:sdv /p:Inputs="/check:Irql.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Para obtener más información, consulte Uso del comprobador de controladores estáticos para buscar defectos en controladores y comandos de comprobador de controladores estáticos (MSBuild).