Forzar comprobación de IRQL

Aunque los controladores en modo kernel están prohibidos para acceder a la memoria paginable en un IRQL alto o al mantener un bloqueo de número, es posible que no se observe esta acción si la página no se ha recortado realmente del espacio de trabajo y se ha paginado en el disco.

Cuando se habilita la comprobación de IRQL Force, Driver Verifier proporciona una presión extrema sobre el uso de la memoria del sistema. Cada vez que un controlador que se comprueba solicita un bloqueo de número, llama a KeSynchronizeExecution o genera irQL para DISPATCH_LEVEL o superior, se recortan todos los datos, el código y el grupo paginable del sistema (que incluye el código paginable y los datos del controlador) del conjunto de trabajo. Si el controlador intenta acceder a cualquiera de esta memoria, el Comprobador de controladores emite una comprobación de errores.

A partir de Windows Vista, esta opción también hace que el Comprobador de controladores detecte cuándo se incluyen determinados objetos de sincronización en la memoria paginable. Estos objetos de sincronización no se pueden paginar porque el kernel del sistema operativo tiene acceso a ellos en IRQL con privilegios elevados. El Comprobador de controladores puede detectar las estructuras KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE y FAST_MUTEX .

Esta presión sobre el uso de memoria no afectará directamente a los controladores que no están seleccionados para la comprobación. Cuando un controlador que no está seleccionado para la comprobación genera irQL, no desencadena la acción de recorte. Sin embargo, cuando un controlador que se está comprobando genera irQL, el comprobador de controladores recorta las páginas que pueden usar los controladores que no se están comprobando. Por lo tanto, los errores confirmados por los controladores que no se comprueban pueden detectarse ocasionalmente cuando esta opción está activa.

Supervisión de bloqueos de número y elevación de IRQL

Se puede supervisar el número de bloqueos de número de IRQL, bloqueos de número y llamadas a KeSynchronizeExecution realizados por los controladores que se comprueban. El número de veces que el Comprobador de controladores ha recortado la memoria paginable del espacio de trabajo también se puede supervisar. Estas estadísticas se pueden mostrar mediante el Administrador de comprobadores de controladores, la línea de comandos Verifier.exe o en un archivo de registro. Consulte Supervisión de contadores globales para obtener más información.

La extensión del depurador de kernel !comprobador también se puede usar para supervisar estas estadísticas. Presenta información similar a la del Administrador de comprobadores de controladores. En Windows XP y versiones posteriores, la extensión !comprobador 0x8 mostrará un registro de los cambios irQL recientes realizados por los controladores que se comprueban. Para obtener información sobre las extensiones del depurador, vea Depuración de Windows.

Llamar a KeEnterCriticalRegion o KeLeaveCriticalRegion en DISPATCH_LEVEL o superior

KeEnterCriticalRegion y KeLeaveCriticalRegion son API que se pueden usar para sincronizar la ejecución de una secuencia crítica de código de controlador con la entrega de llamadas a procedimientos asincrónicos (APCs) de kernel normales. No se puede llamar a las API KeEnterCriticalRegion y KeLeaveCriticalRegion en IRQL = DISPATCH_LEVEL o superior. Llamar a KeEnterCriticalRegion o KeLeaveCriticalRegion en DISPATCH_LEVEL o superior puede provocar un bloqueo del sistema o daños en la memoria.

A partir de Windows 7, el Comprobador de controladores detecta llamadas a estas API en DISPATCH_LEVEL o superior si la opción Forzar comprobación irQL está habilitada.

Activación de esta opción

Puede activar la característica Forzar comprobación de IRQL para uno o varios controladores mediante el Administrador de comprobadores de controladores o la línea de comandos de Verifier.exe. Para obtener más información, vea Seleccionar opciones del comprobador de controladores.

  • En la línea de comandos

    En la línea de comandos, la opción Forzar comprobación irQL se representa mediante bit 1 (0x2). Para activar forzar la comprobación de IRQL, use un valor de marca de 0x2 o agregue 0x2 al valor de marca. Por ejemplo:

    verifier /flags 0x2 /driver MyDriver.sys
    

    La característica estará activa después del siguiente arranque.

    También puede activar y desactivar forzar la comprobación de IRQL sin reiniciar el equipo agregando el parámetro /volatile al comando. Por ejemplo:

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

    Esta configuración es efectiva inmediatamente, pero se pierde al apagar o reiniciar el equipo. Para obtener más información, consulte Uso de la configuración volátil.

    La característica Forzar comprobación de IRQL también se incluye en la configuración estándar. Por ejemplo:

    verifier /standard /driver MyDriver.sys
    
  • Uso del Administrador de comprobadores de controladores

    1. Inicie el Administrador de comprobadores de controladores. Escriba Comprobador en una ventana del símbolo del sistema.
    2. Seleccione Crear configuración personalizada (para desarrolladores de código) y haga clic en Siguiente.
    3. Seleccione Seleccionar configuración individual en una lista completa.
    4. Seleccione (comprobar) Forzar comprobación irQL.

    La característica Forzar comprobación de IRQL también se incluye en la configuración estándar. Para usar esta característica, en el Administrador de comprobadores de controladores, haga clic en Crear configuración estándar.