Uso del comprobador de KMDF

El marco proporciona funcionalidad de comprobación integrada que puede usar para probar un controlador KMDF en ejecución. Esta funcionalidad, denominada Comprobador de KMDF, valida ampliamente el estado del controlador y los argumentos que el controlador pasa a los métodos de objeto de marco. Puede usar el comprobador del marco por sí mismo o junto con la herramienta Comprobador de controladores de uso general (Verifier.exe ).

Si el comprobador de KMDF está habilitado, el marco comprueba la adquisición de bloqueos y las jerarquías, garantiza que las llamadas al marco se produzcan en el IRQL correcto, comprueba el uso correcto de la E/S y la cola, y garantiza que el controlador y el marco sigan los contratos documentados. También puede simular condiciones de memoria insuficientes para que el desarrollador del controlador pueda probar si el controlador responde correctamente sin bloqueo, suspensión o no descarga.

Cuando el comprobador de KMDF está habilitado, el marco se divide en el depurador si un período de tiempo de espera predeterminado de 60 segundos expira antes de que se hayan completado algunos de los eventos descritos anteriormente. En este momento, puede depurar el problema o escribir "g" en el depurador para reiniciar el período de tiempo de espera. Puede cambiar el período de tiempo de espera predeterminado mediante el valor del Registro DbgWaitForSignalTimeoutInSec descrito en Control del comportamiento del comprobador.

Se recomienda ejecutar el Comprobador de controladores (Verifier.exe) durante las pruebas y agregar su propio controlador y wdf01000.sys a la lista de comprobación.

Nota

El comprobador de KMDF se habilita automáticamente al usar la configuración del comprobador de /standard controladores. Si usa /flags en lugar de la /standard configuración del comprobador de controladores, tenga en cuenta que en Windows 10, versión 1803 o compilaciones más recientes, /flags está en desuso en favor de /ruleclasses. La clase de regla para WDF es 34. Para habilitar el comprobador de WDF cuando /standard no se usa, use /ruleclasses 34.

También puede usar la aplicación de control de comprobador de WDF (WdfVerifier.exe) para habilitar y deshabilitar el comprobador de KMDF.

Habilitación y deshabilitación de la comprobación integrada del marco

Puede habilitar manualmente el comprobador de KMDF mediante este procedimiento:

  1. Si el controlador ya está cargado, use Administrador de dispositivos para deshabilitar el dispositivo. Deshabilitar el dispositivo hace que el controlador se descargue.

  2. Use RegEdit para establecer VerifierOn en un valor distinto de cero en la subclave Parameters\Wdf del controlador de la clave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services en el Registro de Windows. Un valor distinto de cero indica que el comprobador de KMDF está habilitado.

    Es posible que tenga que agregar VerifierOn manualmente a la subclave si aún no está presente.

  3. Use Administrador de dispositivos para volver a habilitar el dispositivo, con lo que se carga el controlador.

  4. Cuando el controlador llama a WdfDriverCreate, el marco examina el Registro y habilita el comprobador del marco si VerifierOn es un valor distinto de cero.

Para deshabilitar el comprobador del marco, siga los mismos pasos, pero establezca el valor de VerifierOn en cero.

Para determinar si el comprobador del marco está habilitado, establezca un punto de interrupción en una ubicación después de que el controlador llame a WdfDriverCreate y use el comando de extensión del depurador !wdfdriverinfo :

!wdfkd.wdfdriverinfo<el nombre del controlador> **** 0x1

Para obtener más información sobre los comandos de extensión del depurador, vea Debugger Extensions for Framework-based Drivers.

Controlar el comportamiento del comprobador

Se recomienda usar la aplicación de control de comprobador de WDF para controlar las opciones siguientes. Sin embargo, puede modificar directamente los siguientes valores en el Registro.

Los valores pertinentes se encuentran en la subclave Parameters\Wdf de la clave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services .

VerifyOn (REG_DWORD)
Establezca este valor en un valor distinto de cero para habilitar la macro WDFVERIFY .

DbgBreakOnError (REG_DWORD)
Si este valor se establece en un valor distinto de cero, el marco se dividirá en el depurador (si está disponible) cada vez que un controlador llama a WdfVerifierDbgBreakPoint.

DbgWaitForSignalTimeoutInSec (REG_DWORD)
A partir de Windows 8, cuando VerifierOn y DbgBreakOnError se establecen en valores distintos de cero, el controlador puede cambiar el período de tiempo de espera predeterminado estableciendo DbgWaitForSignalTimeoutInSec.

VerifierAllocateFailCount (REG_DWORD)
Si este valor se establece en un valor n, se produce un error en cada intento de asignar memoria para los objetos del controlador después de la asignación n.

TrackHandles (REG_MULTI_SZ)
Si este valor se establece en una lista de uno o varios nombres de tipo de identificadores de objeto de marco, el marco realiza un seguimiento de las referencias a todos los identificadores de objeto que coinciden con los tipos de identificador especificados.

EnhancedVerifierOptions (REG_DWORD)
Solo KMDF

Contiene un mapa de bits que puede usar para habilitar características opcionales del comprobador del marco.

VerifyDownLevel (REG_DWORD)
Si se establece en un valor distinto de cero y si el controlador se creó con una versión del marco anterior a la versión actual, el comprobador del marco incluye pruebas que se agregaron después de compilar el controlador.

Como regla general, si establece los valores del Registro anteriores, elimínelos cuando ya no sean necesarios.

Para obtener descripciones completas de estos valores del Registro, consulte Valores del Registro para depurar controladores basados en framework.