Comprobación SCSI

La característica comprobación SCSI del comprobador de controladores supervisa la interacción entre un controlador de miniporte SCSI y el controlador de puerto. Si el controlador de miniporte usa una rutina, responde incorrectamente a una solicitud del controlador de puerto o tarda un tiempo excesivo en responder a una solicitud, se emite una comprobación de errores.

Esta opción comprobador de controladores solo está disponible en Windows XP y versiones posteriores.

Infracciones detectadas por la comprobación SCSI

La opción Comprobación SCSI puede detectar varios usos indebidos de rutinas SCSI. También es posible deshabilitar individualmente algunas de estas comprobaciones.

Cuando un controlador de miniporte SCSI confirma una de las siguientes infracciones, el comprobador de controladores emitirá la comprobación de errores 0xF1.

  • El controlador de minipuerto pasa un argumento incorrecto a ScsiPortInitialize.

  • El controlador de minipuerto llama a ScsiPortStallExecution y especifica un retraso superior a 0,1 segundos, lo que detiene el procesador durante un período excesivo de tiempo.

  • El controlador de puerto llama a una rutina de controlador de miniporte y el controlador de minipuerto tarda más de 0,5 segundos en ejecutarlo. (La rutina FindAdapter está exenta y la rutina HwInitialize se permite 5 segundos).

  • El controlador de minipuerto completa una solicitud más de una vez.

  • El controlador de minipuerto completa una rutina con un estado de SRB no válido.

  • El controlador de miniport llama a ScsiPortNotification para solicitar NextLuRequest, pero una solicitud sin etiqueta sigue activa.

  • El controlador de minipuerto pasa una dirección virtual no válida a ScsiPortGetPhysicalAddress. (Esto suele significar que la dirección proporcionada no se asigna al área de búfer común).

  • El período de retención de restablecimiento de autobús finaliza, pero el controlador de miniporte todavía tiene solicitudes pendientes.

Consulte Comprobación de errores 0xF1 (SCSI_VERIFIER_DETECTED_VIOLATION) para obtener una lista completa de los parámetros de comprobación de errores.

Además de estas infracciones, la comprobación SCSI también supervisa el acceso a la memoria del controlador de miniporte para un uso incorrecto. Dos infracciones comunes de memoria realizadas por los controladores de miniporte acceden a una extensión SRB una vez completada una solicitud y acceden a DataBuffer de SRB cuando el controlador de miniporte no ha especificado MapBuffers.

Las infracciones de memoria de este tipo suelen dar lugar a que se emita la comprobación de errores 0xD1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL).

Activación de esta opción

El procedimiento para activar la opción comprobación SCSI es diferente de los procedimientos para activar otras opciones del comprobador de controladores.

Para activar la comprobación SCSI

  1. Con el Administrador del comprobador de controladores o la línea de comandos Verifier.exe, inicie una comprobación del controlador de miniporte. Dado que la comprobación SCSI no estará disponible como opción, debe seleccionar al menos una otra opción Comprobador de controladores. Consulte Selecting Driver Verifier Options (Seleccionar opciones del comprobador de controladores ) y Selecting Drivers to be Verified (Seleccionar controladores para comprobarlos ) para obtener más información.

  2. Abra el registro mediante regedit.exe. En la clave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScsiPort , agregue una subclave denominada Comprobador. Dentro de esa clave, agregue una entrada de REG_DWORD denominada VerifyLevel. El valor asignado a esta entrada determinará qué pruebas de comprobación SCSI estarán activas. El valor 0x1 proporcionará la comprobación máxima.

  3. Reinicie el equipo.

Si el valor VerifyLevel no existe o es igual a 0xFFFFFFFF, se deshabilitará la comprobación SCSI.

Los bits individuales del valor VerifyLevel se pueden usar para controlar exactamente qué pruebas se realizarán. Bit cero (0x1) habilita determinadas pruebas; bits 28, 29, 30 y 31 deshabilitan determinadas pruebas. Por lo tanto, se puede obtener la comprobación máxima mediante el valor 0x00000001.

Los efectos de cada bit son los siguientes:

bit Value Efecto

0

0x1

El Comprobador de controladores supervisará el acceso a la memoria del controlador de miniporte y comprobará el uso incorrecto de los búferes de memoria.

28

0x10000000

El comprobador de controladores no emitirá una comprobación de errores cuando la rutina HwAdapterControl tarde más de 0,5 segundos en completarse.

29

0x20000000

El Comprobador de controladores no emitirá una comprobación de errores cuando finalice un período de retención de restablecimiento y todavía haya solicitudes pendientes en una unidad lógica.

30

0x40000000

El comprobador de controladores no emitirá una comprobación de errores cuando el controlador de miniporte llame a ScsiPortNotification con NextLuRequest mientras una solicitud sin etiqueta todavía está activa.

31

0x80000000

El comprobador de controladores no emitirá una comprobación de errores cuando la rutina HwInitialize tarde más de 5 segundos en completarse.

En la mayoría de los casos, la configuración recomendada es 0xD0000001. Esto habilita todas las pruebas del comprobador SCSI , excepto el límite de tiempo en HwAdapterControl, el límite de tiempo en HwInitialize y la prohibición de varias solicitudes a una unidad lógica. Estas tres pruebas suelen ser demasiado estrictas.

Si se adjunta un depurador de kernel, es posible cambiar el nivel de comprobación SCSI después del ciclo de arranque. Para ello, use el comando del depurador:

kd> ed scsiport!SpVrfyLevel Level 

Este comando permite establecer un nuevo valor para Level. Con este método, puede cambiar los bits altos (0x10000000 a través de 0x8000000) en cualquier momento. Sin embargo, si desea cambiar el bit bajo (0x1), debe hacerlo durante el proceso de arranque (en el punto de interrupción inicial del depurador del kernel).

Del mismo modo, si desea desactivar completamente la comprobación SCSI, debe establecer Level en 0xFFFFFFFF en el punto de interrupción inicial.

Nota El valor 0xF0000000 deshabilitará todas las pruebas, pero los módulos de comprobación SCSI se seguirán cargando. Use este valor si desea deshabilitar la comprobación, pero pretende habilitar las pruebas de bits superiores en un momento posterior. Por otro lado, el valor 0xFFFFFFFF impide que los módulos se carguen por completo; si este valor se usa durante el arranque, no será posible habilitar la comprobación SCSI sin reiniciar.

Activación sin reiniciar

En general, no puede activar ni desactivar la comprobación SCSI sin reiniciar ("reiniciar") el equipo en cualquier sistema operativo Windows. El controlador ScsiPort.sys lee la entrada del Registro VerifyLevel solo cuando se carga, que suele estar en tiempo de arranque. Sin embargo, si el controlador ScsiPort.sys no se carga al agregar la entrada del Registro, o si se descarga y se vuelve a cargar, puede habilitar la comprobación SCSI en Windows XP y versiones posteriores de Windows sin reiniciar el equipo.