!verifier
La extensión !verifier muestra el estado del comprobador de controladores y sus acciones.
El comprobador de controladores está incluido en Windows. Funciona en compilaciones comprobadas y libres. Para obtener información sobre el comprobador de controladores, consulte Comprobador de controladores.
Sintaxis
!verifier [Flags [Image]]
!verifier 4 [Quantity]
!verifier 8 [Quantity]
!verifier 0x40 [Quantity]
!verifier 0x80 [Quantity]
!verifier 0x80 Address
!verifier 0x100 [Quantity]
!verifier 0x100 Address
!verifier 0x200 [Address]
!verifier 0x400 [Address]
!verifier -disable
!verifier ?
Parámetros
Banderas
Especifica qué información se muestra en la salida de este comando. Si Flags es igual al valor 4, 8, 0x20, 0x40, 0x80 o 0x100, el resto de argumentos de !verifier se interpretan en función de los argumentos específicos asociados a esos valores. Si Flags es igual a algún otro valor, incluso si se establecen uno o más de estos bits, solo se permiten los argumentos Flags e Image. Flags puede ser cualquier suma de los siguientes bits; el valor predeterminado es 0:
Bit 0 (0x1)
Muestra los nombres de todos los controladores que se están comprobando. También se muestra el número de bytes asignados actualmente a cada controlador del grupo no paginado y del grupo paginado.
Bit 1 (0x2)
Muestra información sobre los grupos (tamaño del grupo, encabezados y etiquetas del grupo) y las asignaciones de memoria pendientes dejadas por los controladores descargados. Esta bandera no tiene efecto a menos que el bit 0 (0x1) también esté establecido.
Bit 2 (0x4)
Muestra información sobre la inyección de errores. Se muestran la dirección de retorno, el nombre del símbolo y el desplazamiento del código que solicita cada asignación. Si Flags es exactamente 0x4 y se incluye el parámetro Quantity, se puede elegir el número de estos registros que se muestran. De lo contrario, se mostrarán cuatro registros.
Bit 3 (0x8)
Muestra los cambios IRQL más recientes realizados por los controladores que se están comprobando. Se muestran el IRQL antiguo, el IRQL nuevo, el procesador y la marca de tiempo. Si Flags es exactamente 0x8 y se incluye el parámetro Quantity, se puede elegir el número de estos registros que se muestran. De lo contrario, se mostrarán cuatro registros.
Advertencia En las versiones de 64 bits de Windows, algunas de las funciones del núcleo que suben o bajan el IRQL se implementan como código en línea en lugar de como funciones exportadas. El comprobador de controladores no informa de los cambios IRQL realizados por código en línea, por lo que es posible que el registro de transición IRQL producido por el comprobador de controladores esté incompleto. Vea en Observaciones un ejemplo de una entrada de transición IRQL que falta.
Bit 6 (0x40)
(Windows Vista y versiones posteriores) Muestra información de la opción Force Pending I/O Requests (Forzar solicitudes de E/S pendientes) del comprobador de controladores, incluidos los seguimientos del registro de IRP pendientes forzados.
El parámetro Quantity especifica el número de seguimientos que se mostrarán. De forma predeterminada, se muestra todo el registro.
Bit 7 (0x80)
(Windows Vista y versiones posteriores) Muestra información del registro de asignar/liberar del grupo del kernel.
El parámetro Quantity especifica el número de seguimientos que se mostrarán. De forma predeterminada, se muestra todo el registro.
Si se especifica Address, solo se mostrarán los seguimientos asociados a la dirección especificada dentro del registro de asignar/liberar del grupo del kernel.
Bit 8 (0x100)
(Windows Vista y versiones posteriores) Muestra información del registro de llamadas IoAllocateIrp, IoCompleteRequest e IoCancelIrp.
El parámetro Quantity especifica el número de seguimientos que se mostrarán. De forma predeterminada, se muestra todo el registro.
Si se especifica Address, solo se mostrarán los seguimientos asociados a la dirección IRP especificada.
Bit 9 (0x200)
(Windows Vista y versiones posteriores) Muestra las entradas del registro de regiones críticas.
Si se especifica Address, solo se mostrarán las entradas asociadas a la dirección del subproceso especificada.
Bit 10 (0x400)
(Windows Vista y versiones posteriores) Muestra los IRP cancelados que el comprobador de controladores está vigilando actualmente.
Si se especifica Address, solo se mostrará el IRP con la dirección especificada.
Bit 11 (0x800)
(Windows 8.1 y versiones posteriores) Muestra las entradas del registro de inyección de errores que se crea al seleccionar la opción Systematic low resource simulationSimulación sistemática de recursos bajos (Simulación sistemática de recursos bajos).
Imagen
Si se utiliza Flags y no es igual a 4, 8 o 0x10, Image especifica el nombre de un controlador. Image se utiliza para filtrar la información mostrada por los valores de Flags 0x1 y 0x2: solo se tiene en cuenta el controlador especificado. Este controlador debe estar comprobado actualmente.
Cantidad
Si Flags es exactamente igual a 0x4, Quantity especifica el número de registros de inyección de errores que se van a mostrar. Si Flags es exactamente igual a 0x8, Quantity especifica el número de entradas de registros de IRQL que se van a mostrar. Si Flags es exactamente igual a 0x40, Quantity especifica el número de seguimientos mostrados del registro de IRP pendientes forzados. Si Flags es exactamente igual a 0x80, Quantity especifica el número de seguimientos mostrados del registro Asignar/Liberar del grupo del kernel. Si Flags es exactamente igual a 0x100, Quantity especifica el número de seguimientos mostrados del registro de llamadas IoAllocateIrp, IoCompleteRequest e IoCancelIrp.
-inutilizar
Borra la configuración actual del comprobador de controladores en el objetivo de depuración. El borrado de estos ajustes no persiste a través de un reinicio. Si necesita deshabilitar la configuración del comprobador de controladores para arrancar correctamente, establezca un punto de interrupción en nt!VerifierInitSystem y utilice el comando !verifier -disable en ese punto.
?
Muestra un breve texto de ayuda para esta extensión en la ventana de comando del depurador.
Archivo DLL
Kdexts.dll
Información adicional
Para obtener información, consulte Comprobador de controladores.
Comentarios
El siguiente ejemplo ilustra que en las versiones de 64 bits de Windows, el registro de transición IRQL no siempre está completo. Las dos entradas que se muestran son entradas consecutivas en el registro de procesador 2. La primera entrada muestra el IRQL pasando de 2 a 0. La segunda entrada muestra el IRQL pasando de 2 a 2. Falta información sobre cómo el IRQL se elevó de 0 a 2.
Thread: fffffa80068c9400
Old irql: 0000000000000002
New irql: 0000000000000000
Processor: 0000000000000002
Time stamp: 0000000000000857
fffff8800140f12a ndis!ndisNsiGetInterfaceInformation+0x20a
fffff88001509478 NETIO!NsiGetParameterEx+0x178
fffff88005f062f2 nsiproxy!NsippGetParameter+0x24a
fffff88005f086db nsiproxy!NsippDispatchDeviceControl+0xa3
fffff88005f087a0 nsiproxy!NsippDispatch+0x48
Thread: fffffa80068c9400
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000002
Time stamp: 0000000000000857
fffff8800140d48d ndis!ndisReferenceTopMiniportByNameForNsi+0x1ce
fffff8800140f072 ndis!ndisNsiGetInterfaceInformation+0x152
fffff88001509478 NETIO!NsiGetParameterEx+0x178
fffff88005f062f2 nsiproxy!NsippGetParameter+0x24a
fffff88005f086db nsiproxy!NsippDispatchDeviceControl+0xa3
Los valores de 4, 8 y 0x20, 0x40, 0x80 y 0x100 son valores especiales para Flags. Si se utilizan estos valores, se pueden utilizar los argumentos especiales enumerados en la sección Parámetros y la visualización incluirá solo la información asociada a ese valor de marca.
Si se usa algún otro valor para Flags, incluso si se establecen uno o más de estos bits, solo se permiten los argumentos Flags e Image. En esta situación, además del resto de la información mostrada, !verifier mostrará las opciones del comprobador de controladores que están activas, junto con estadísticas sobre asignaciones de grupo, subidas de IRQL, bloqueos por subproceso y recortes.
Si Flags es igual a 0x20, los valores especificados para CompletionTime, CancelTime, y ForceCancellation son utilizados por la opción Driver Hang Verification (Comprobación de falta de respuesta de controlador) del comprobador de controladores. Estos nuevos valores entran en vigor inmediatamente y duran hasta el siguiente arranque. Cuando reinicie, recuperarán los valores predeterminados.
Además, si Flags es igual a 0x20 (con o sin parámetros adicionales), se imprime el registro de comprobación de falta de respuesta del controlador. Para obtener información sobre la interpretación del registro, consulte la sección Comprobación de falta de respuesta del controlador de la documentación del comprobador de controladores en la documentación del Kit de controladores de Windows (WDK).
Este es un ejemplo de la extensión !verifier en un equipo de Windows 7.
2: kd> !verifier 0xf
Verify Level 9bb ... enabled options are:
Special pool
Special irql
All pool allocations checked on unload
Io subsystem checking enabled
Deadlock detection enabled
DMA checking enabled
Security checks enabled
Miscellaneous checks enabled
Summary of All Verifier Statistics
RaiseIrqls 0x0
AcquireSpinLocks 0x362
Synch Executions 0x0
Trims 0xa34a
Pool Allocations Attempted 0x7b058
Pool Allocations Succeeded 0x7b058
Pool Allocations Succeeded SpecialPool 0x7b058
Pool Allocations With NO TAG 0x0
Pool Allocations Failed 0x0
Resource Allocations Failed Deliberately 0x0
Current paged pool allocations 0x1a for 00000950 bytes
Peak paged pool allocations 0x1b for 00000AC4 bytes
Current nonpaged pool allocations 0xe3 for 00046110 bytes
Peak nonpaged pool allocations 0x10f for 00048E40 bytes
Driver Verification List
Entry State NonPagedPool PagedPool Module
fffffa8003b6f670 Loaded 000000a0 00000854 videoprt.sys
Current Pool Allocations 00000002 00000013
Current Pool Bytes 000000a0 00000854
Peak Pool Allocations 00000006 00000014
Peak Pool Bytes 000008c0 000009c8
PoolAddress SizeInBytes Tag CallersAddress
fffff9800157efc0 0x0000003c Vprt fffff88002c62963
fffff9800146afc0 0x00000034 Vprt fffff88002c62963
fffff980015bafe0 0x00000018 Vprt fffff88002c628f7
...
fffffa8003b6f620 Loaded 00046070 000000fc usbport.sys
Current Pool Allocations 000000e1 00000007
Current Pool Bytes 00046070 000000fc
Peak Pool Allocations 0000010d 0000000a
Peak Pool Bytes 00048da0 00000254
PoolAddress SizeInBytes Tag CallersAddress
fffff98003a38fc0 0x00000038 usbp fffff88004215e34
fffff98003a2cfc0 0x00000038 usbp fffff88004215e34
fffff9800415efc0 0x00000038 usbp fffff88004215e34
...
-----------------------------------------------
Fault injection trace log
-----------------------------------------------
Driver Verifier didn't inject any faults.
-----------------------------------------------
Track irql trace log
-----------------------------------------------
Displaying most recent 0x0000000000000004 entries from the IRQL transition log.
There are up to 0x100 entries in the log.
Thread: fffff80002bf8c40
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000000
Time stamp: 000000000000495e
fffff8800420f2ca USBPORT!USBPORT_DM_IoTimerDpc+0x9a
fffff80002a5b5bf nt!IopTimerDispatch+0x132
fffff80002a7c29e nt!KiProcessTimerDpcTable+0x66
fffff80002a7bdd6 nt!KiProcessExpiredTimerList+0xc6
fffff80002a7c4be nt!KiTimerExpiration+0x1be
Thread: fffff80002bf8c40
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000000
Time stamp: 000000000000495e
fffff88004205f3a USBPORT!USBPORT_AcquireEpListLock+0x2e
fffff880042172df USBPORT!USBPORT_Core_TimeoutAllTransfers+0x1f
fffff8800420f2ca USBPORT!USBPORT_DM_IoTimerDpc+0x9a
fffff80002a5b5bf nt!IopTimerDispatch+0x132
fffff80002a7c29e nt!KiProcessTimerDpcTable+0x66
Thread: fffff80002bf8c40
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000000
Time stamp: 000000000000495e
fffff88004201694 USBPORT!MPf_CheckController+0x4c
fffff8800420f26a USBPORT!USBPORT_DM_IoTimerDpc+0x3a
fffff80002a5b5bf nt!IopTimerDispatch+0x132
fffff80002a7c29e nt!KiProcessTimerDpcTable+0x66
fffff80002a7bdd6 nt!KiProcessExpiredTimerList+0xc6
Thread: fffff80002bf8c40
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000000
Time stamp: 000000000000495e
fffff8800420167c USBPORT!MPf_CheckController+0x34
fffff8800420f26a USBPORT!USBPORT_DM_IoTimerDpc+0x3a
fffff80002a5b5bf nt!IopTimerDispatch+0x132
fffff80002a7c29e nt!KiProcessTimerDpcTable+0x66
fffff80002a7bdd6 nt!KiProcessExpiredTimerList+0xc6
Este es un ejemplo de la extensión !verifier en un equipo de Windows Vista con el bit 7 activado y la dirección especificada.
0: kd> !verifier 80 a2b1cf20
# Parsing 00004000 array entries, searching for address a2b1cf20.
Pool block a2b1ce98, Size 00000168, Thread a2b1ce98
808f1be6 ndis!ndisFreeToNPagedPool+0x39
808f11c1 ndis!ndisPplFree+0x47
808f100f ndis!NdisFreeNetBufferList+0x3b
8088db41 NETIO!NetioFreeNetBufferAndNetBufferList+0xe
8c588d68 tcpip!UdpEndSendMessages+0xdf
8c588cb5 tcpip!UdpSendMessagesDatagramsComplete+0x22
8088d622 NETIO!NetioDereferenceNetBufferListChain+0xcf
8c5954ea tcpip!FlSendNetBufferListChainComplete+0x1c
809b2370 ndis!ndisMSendCompleteNetBufferListsInternal+0x67
808f1781 ndis!NdisFSendNetBufferListsComplete+0x1a
8c04c68e pacer!PcFilterSendNetBufferListsComplete+0xb2
809b230c ndis!NdisMSendNetBufferListsComplete+0x70
# 8ac4a8ba test1!HandleCompletedTxPacket+0xea
Pool block a2b1ce98, Size 00000164, Thread a2b1ce98
822af87f nt!VerifierExAllocatePoolWithTagPriority+0x5d
808f1c88 ndis!ndisAllocateFromNPagedPool+0x1d
808f11f3 ndis!ndisPplAllocate+0x60
808f1257 ndis!NdisAllocateNetBufferList+0x26
80890933 NETIO!NetioAllocateAndReferenceNetBufferListNetBufferMdlAndData+0x14
8c5889c2 tcpip!UdpSendMessages+0x503
8c05c565 afd!AfdTLSendMessages+0x27
8c07a087 afd!AfdTLFastDgramSend+0x7d
8c079f82 afd!AfdFastDatagramSend+0x5ae
8c06f3ea afd!AfdFastIoDeviceControl+0x3c1
8217474f nt!IopXxxControlFile+0x268
821797a1 nt!NtDeviceIoControlFile+0x2a
8204d16a nt!KiFastCallEntry+0x127