Simulación de recursos bajos

Cuando la opción Simulación de recursos bajos (denominada simulación aleatoria de recursos bajos en Windows 8.1) está activa, el Comprobador de controladores produce un error en las instancias aleatorias de las asignaciones de memoria del controlador, como puede ocurrir si el controlador se estaba ejecutando en un equipo con memoria insuficiente. Esto prueba la capacidad del controlador de responder correctamente a una memoria baja y a otras condiciones de bajo recurso.

La prueba de simulación de recursos bajos produce un error en las asignaciones solicitadas por llamadas a varias funciones diferentes, como ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache y MmMapIoSpace.

A partir de Windows Vista, la prueba de simulación de recursos bajos también inserta errores en IoAllocateIrp, IoAllocateMdl, IoAllocateWorkItem, IoAllocateErrorLogEntry, MmAllocateContiguousMemory, MmAllocateContiguousMemorySpecifyCache, MmAllocatePagesForMdl y MmAllocatePagesForMdlEx. Además, a partir de Windows Vista, cuando se habilita la simulación de recursos bajos, las llamadas a KeWaitForMultipleObjects o KeWaitForSingleObject con el parámetro Alertable establecido en TRUE pueden devolver STATUS_ALERTED cuando se ejecuta en el contexto de procesos sin privilegios. Esto simula una posible alerta de subproceso procedente de otro subproceso en la misma aplicación sin privilegios.

La prueba de simulación de recursos bajos también inserta errores en las siguientes funciones GDI: EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrush y CLIPOBJ_ppoGetPath.

En Windows 7 y versiones posteriores del sistema operativo Windows, la opción Simulación de recursos bajos admite memoria asignada mediante las siguientes API de kernel:

A partir de Windows 8.1, la opción Simulación de recursos bajos también produce un error en las asignaciones solicitadas por llamadas a MmAllocateNodePagesForMdlEx. Además, para algunas funciones, el Comprobador de controladores ahora rellena la memoria asignada con un patrón aleatorio. Pero solo en situaciones en las que la función devuelve memoria no inicializada. Entre estas funciones se incluyen las siguientes:

Configuración personalizada para la simulación de recursos bajos

En Windows Vista y versiones posteriores de Windows, puede especificar la siguiente configuración personalizada.

  • Probabilidad de que se produzca un error en una asignación determinada. El valor predeterminado es 6 %.

  • Aplicaciones afectadas. Esta configuración limita las asignaciones erróneas insertadas a las aplicaciones especificadas. De forma predeterminada, todas las asignaciones se ven afectadas.

  • Etiquetas de grupo afectadas. Esta configuración limita los errores insertados a las asignaciones con las etiquetas de grupo especificadas. De forma predeterminada, todas las asignaciones se ven afectadas.

  • Retraso (en minutos) antes de que se produzcan errores en las asignaciones. Este retraso permite que el sistema se inicie y se estabilice antes de que se inserte errores. El valor predeterminado es de ocho minutos.

En los sistemas operativos anteriores a Windows Vista, no puede personalizar esta configuración. El sistema operativo usa los valores predeterminados.

Simulación de recursos bajos sin reiniciar

Puedes activar la simulación de recursos bajos en Windows 2000 y versiones posteriores de Windows sin reiniciar el equipo mediante el parámetro /volatile . La configuración es efectiva inmediatamente, pero se pierde si apaga o reinicia el equipo.

También puede almacenar la configuración de simulación de recursos bajos en el Registro omitiendo el parámetro /volatile . Esta configuración solo es efectiva cuando se reinicia el equipo, pero permanecen vigentes hasta que se cambian.

Activación de esta opción

Puede activar la opción Simulación de recursos bajos para uno o varios controladores mediante el Administrador de comprobadores de controladores o la línea de comandos 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 Simulación de recursos bajos se representa mediante bit 2 (0x4). Para activar la simulación de recursos bajos, use un valor de marcas de 0x4 o agregue 0x4 al valor de las marcas. Por ejemplo:

    verifier /flags 0x4 /driver MyDriver.sys
    

    La opción estará activa después del siguiente arranque.

    En Windows Vista y versiones posteriores de Windows, puede usar el parámetro /faults o un valor de marca de 0x4 para activar la simulación de recursos bajos. Para modificar la configuración de simulación de recursos bajos, debe usar /faults. Por ejemplo:

    verifier /faults /driver MyDriver.sys
    

    En Windows 2000 y versiones posteriores de Windows, también puedes activar y desactivar simulación de recursos bajos sin reiniciar el equipo agregando el parámetro /volatile al comando. Por ejemplo:

    verifier /volatile /flags 0x4 /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.

    En Windows Vista, puedes usar el parámetro /faults para representar simulación de recursos bajos con el parámetro /volatile para representar una configuración que sea efectiva sin reiniciar. Se mostrará el cambio de configuración. Por ejemplo:

    0>  verifier /volatile /faults /adddriver MyDriver.sys
    New Low Resources Simulation options:
    
    - Use default fault injection probability.
    - Allocations using any pool tag can be failed.
    - Simulate low resources conditions in any application.
    
    The new settings are in effect until you restart this computer
    or change them again.
    
  • 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, a continuación, haga clic en Siguiente.
    3. Seleccione Seleccionar configuración individual en una lista completa.
    4. Seleccione Simulación de recursos bajos.

Personalizar la configuración (Windows Vista y versiones posteriores)

A partir de Windows Vista, puede cambiar la configuración predeterminada de las propiedades de etiquetas de retraso, probabilidad, aplicaciones y grupo de la opción Simulación de recursos bajos. Puede cambiar esta configuración mediante el Administrador de comprobadores de controladores o la línea de comandos Verifier.exe. Para obtener más información, vea Seleccionar opciones del comprobador de controladores.

En la línea de comandos, la sintaxis de esta configuración es la siguiente:

comprobador [/volatile] /faults[Probability|PoolTagsApplications|DelayMins|][/driver|DriverList]

Nota Los parámetros de configuración personalizados deben aparecer en el orden mostrado. Si omite un valor, escriba comillas para contener su lugar.

Subparámetros

  • /faults

    Habilita la opción Simulación de recursos bajos en el Comprobador de controladores. (No puede usar /flags 0x4 con los subparámetros de configuración personalizados).

  • Probabilidad

    Especifica la probabilidad de que el Comprobador de controladores produzca un error en una asignación determinada. Escriba un número (en formato decimal o hexadecimal) para representar el número de posibilidades en 10 000 que el Comprobador de controladores producirá un error en la asignación. El valor predeterminado, 600, significa 600/10000 o 6 %.

  • PoolTags

    Limita las asignaciones que el comprobador de controladores puede producir errores en las asignaciones con las etiquetas de grupo especificadas. Puede usar un carácter comodín (*) para representar varias etiquetas de grupo. Para enumerar varias etiquetas de bloque, sepárelas con espacios. De forma predeterminada, se pueden producir errores en todas las asignaciones.

  • Aplicaciones

    Limita las asignaciones que puede producir un error en las asignaciones del comprobador de controladores para el programa especificado. Escriba el nombre de un archivo ejecutable. Para enumerar programas, separe sus nombres con espacios. De forma predeterminada, se pueden producir errores en todas las asignaciones.

  • DelayMins

    Especifica el número de minutos después del arranque durante el cual el Comprobador de controladores no produce un error intencional en ninguna asignación. Este retraso permite que los controladores se carguen y el sistema se estabilice antes de que comience la prueba. Escriba un número (en formato decimal o hexadecimal). El valor predeterminado es 8 (minutos).

Por ejemplo, el siguiente comando habilita la simulación de recursos bajos con una probabilidad del 10 % (1000/10000) y un retraso de cinco minutos para las etiquetas del grupo, Tag1 y Fred, y la aplicación, Notepad.exe.

verifier /faults 1000 "Tag1 Fred" Notepad.exe 5

El siguiente comando habilita la simulación de recursos bajos con los valores predeterminados, salvo que extiende el retraso a 10 minutos.

verifier /faults "" "" "" 0xa

Uso del Administrador del comprobador de controladores

  1. Inicie el Administrador del comprobador de controladores. Escriba Comprobador en una ventana del símbolo del sistema.

  2. Seleccione Crear configuración personalizada (para desarrolladores de código) y, a continuación, haga clic en Siguiente.

  3. Seleccione Seleccionar configuración individual en una lista completa.

  4. Seleccione Simulación de recursos bajos y, a continuación, haga clic en Siguiente.

  5. Cambie la configuración de las propiedades retraso, probabilidad, aplicaciones y etiquetas de grupo según sea necesario.

Visualización de los resultados

Puede supervisar el número de veces que el Comprobador de controladores produce un error intencionadamente en las asignaciones de recursos mostrando el contador global de errores del comprobador de controladores insertado. Este contador muestra el número total de asignaciones de recursos que el comprobador de controladores produjo un error deliberadamente desde el último arranque.

Puede ver este contador en un archivo de registro del comprobador de controladores (/log), en la línea de comandos (/query) o en el Administrador del comprobador de controladores. En Windows 2000, para ver contadores globales, seleccione la pestaña Contadores globales . En versiones posteriores de Windows, seleccione Mostrar información sobre la tarea controladores comprobados actualmente y, a continuación, presione Siguiente dos veces. Para obtener más información, consulte Supervisión de contadores globales.

También puede mostrar el número de asignaciones erróneas intencionadamente y el número de asignaciones totales (para calcular la probabilidad) mediante la extensión del depurador !verifier . En el ejemplo siguiente se muestra un ejemplo de la salida del comprobador ! .

En este ejemplo, insertar errores aleatorios de API de recursos bajos indica que la simulación de recursos bajos está habilitada. Las asignaciones de recursos erróneas representan deliberadamente el número de asignaciones erróneas intencionadamente y Las asignaciones de grupo intentadas representan el número total de asignaciones.

!verifier

Verify Level 5 ... enabled options are:
        Special pool
        Inject random low-resource API failures

Summary of All Verifier Statistics

RaiseIrqls                             0x2c671f
AcquireSpinLocks                       0xca1a02
Synch Executions                       0x10a623
Trims                                  0x0

Pool Allocations Attempted             0x862e0e
Pool Allocations Succeeded             0x8626e3
Pool Allocations Succeeded SpecialPool 0x768060
Pool Allocations With NO TAG           0x0
Pool Allocations Failed                0x34f
Resource Allocations Failed Deliberately   0x3f5

Para mostrar los seguimientos de la pila de las asignaciones con errores más recientes de Driver Verifier, use !verifier 4 en el depurador de kernel.

En el ejemplo siguiente se muestra un ejemplo de la salida de !comprobador 4. De forma predeterminada, !comprobador 4 muestra seguimientos de pila de las cuatro asignaciones con errores más recientes, pero puede usar su parámetro Quantity para aumentar el número de seguimientos de pila mostrados. Por ejemplo, !comprobador 0x80 muestra las 128 asignaciones con errores más recientes.

En este ejemplo, tenga en cuenta que Comprobador ha interceptado y reemplazado la llamada del controlador a ExAllocatePoolWithTag. Una de las causas más comunes de bloqueos del controlador se produce cuando un controlador intenta asignar memoria y, a continuación, usa el puntero que devuelve la función de asignación antes de comprobar que no es NULL.

kd> !verifier 4
Resource fault injection history:
Tracker @ 8354A000 (# entries: 80, size: 80, depth: 8)

Entry @ 8354B258 (index 75)

    Thread: C2638220

    816760CB nt!VerifierExAllocatePoolWithTag+0x49
    A4720443 win32k!bDeleteAllFlEntry+0x15d
    A4720AB0 win32k!GreEnableEUDC+0x70
    A47218FA win32k!CleanUpEUDC+0x37
    A473998E win32k!GdiMultiUserFontCleanup+0x5
    815AEACC nt!MiDereferenceSession+0x74
    8146D3B4 nt!MmCleanProcessAddressSpace+0x112
    815DF739 nt!PspExitThread+0x603

Entry @ 8354B230 (index 74)

    Thread: 8436D770

    816760CB nt!VerifierExAllocatePoolWithTag+0x49
    A462141C win32k!Win32AllocPool+0x13
    A4725F94 win32k!StubGdiAlloc+0x10

La experiencia con la prueba de simulación de recursos bajos revela que la mayoría de los bloqueos de controladores se deben a la asignación con errores más reciente. En el ejemplo anterior, el bloqueo estaba en la ruta de acceso de win32k! GreEnableEUDC. Examine el código en la ruta de acceso de la asignación para encontrar la causa del bloqueo.

Para obtener información sobre !comprobador, consulte la documentación herramientas de depuración para Windows .

Para ver la configuración del Registro en la línea de comandos, use la opción /querysettings . Por ejemplo:

C:\>verifier /querysettings
Special pool: Disabled
Pool tracking: Disabled
Force IRQL checking: Disabled
I/O verification: Disabled
Enhanced I/O verification: Disabled
Deadlock detection: Disabled
DMA checking: Disabled
Security checks: Disabled
Force pending I/O requests: Disabled
Low resources simulation: Enabled
IRP Logging: Disabled
Miscellaneous checks: Disabled

Low Resources Simulation options:

- Fault injection probability: 1/10000.
- Fail only allocations using pool tags: Tag1 Tag2.
- Simulate low resources conditions only in applications: test1.exe test2.exe.
- Boot time delay: 2 minutes.

Verified drivers:

blah.sys