!irp
La extensión !irp muestra información sobre un paquete de solicitud de E/S (IRP).
!irp Address [Detail]
Parámetros
Dirección
Especifica la dirección hexadecimal del IRP.
Detalle
Si este parámetro se incluye con algún valor, como 1, la salida incluye el estado del IRP, la dirección de su lista de descriptores de memoria (MDL), su subproceso propietario e información de pila para todas sus pilas de E/S, e información sobre cada ubicación de pila para el IRP, incluidas las versiones hexadecimales del código de función principal y del código de función secundaria. Si se omite este parámetro, la salida solo incluye un resumen de la información.
Archivo DLL
Kdexts.dll
Información adicional
Consulte Depuración de Plug and Play y Depuración de Interrupt Storms para conocer las aplicaciones de este comando de extensión. Para obtener información sobre los IRP, consulte la documentación del Kit de controladores de Windows (WDK) y Microsoft Windows Internals de Mark Russinovich y David Solomon. Para obtener más información sobre los códigos de función principal y secundaria, consulte la documentación del Kit de controladores de Windows (WDK).
Este tema describe la estructura de IRP, IRP.
Para obtener información detallada sobre la decodificación de la estructura IRP, incluidos los Args devueltos, consulte los siguientes recursos.
- Windows Internals de Mark E. Russinovich, David A. Solomon y Alex Ionescu
- Developing Drivers with the Windows Driver Foundation Guy Smith and Penny Orwick
Comentarios
La salida también indica bajo qué condiciones se llamará a la rutina de finalización de cada posición de pila una vez que el IRP haya finalizado y la posición de pila se haya procesado. Hay tres posibilidades:
Éxito
Indica que se llamará a la rutina de finalización cuando el IRP se complete con un código correcto.
Error
Indica que se llamará a la rutina de finalización cuando el IRP se complete con un código de error.
Cancelar
Indica que se llamará a la rutina de finalización si se intentó cancelar el IRP.
Puede aparecer cualquier combinación de estas tres, y si se cumple alguna de las condiciones que se han mostrado, se llamará a la rutina de finalización. Los valores apropiados se enumeran al final de la primera fila de información sobre cada ubicación de la pila, inmediatamente después de la entrada Completion-Context.
Este es un ejemplo de la salida de esta extensión para Windows 10:
0: kd> !irp ac598dc8
Irp is active with 2 stacks 1 is current (= 0xac598e38)
No Mdl: No System Buffer: Thread 8d1c7bc0: Irp stack trace.
cmd flg cl Device File Completion-Context
>[IRP_MJ_FILE_SYSTEM_CONTROL(d), N/A(0)]
1 e1 8a6434d8 ac598d40 853220cb-a89682d8 Success Error Cancel pending
\FileSystem\Npfs fltmgr!FltpPassThroughCompletion
Args: 00000000 00000000 00110008 00000000
[IRP_MJ_FILE_SYSTEM_CONTROL(d), N/A(0)]
1 0 8a799710 ac598d40 00000000-00000000
\FileSystem\FltMgr
Args: 00000000 00000000 0x00110008 00000000
A partir de Windows 10 se muestra el texto del código principal y secundario del IRP, por ejemplo, "IRP_MJ_FILE_SYSTEM_CONTROL". El valor del código también se muestra en hexadecimal en este ejemplo "(d)".
El tercer argumento mostrado en la salida es el código IOCTL. Utilice el comando !ioctldecode para mostrar información sobre el IOCTL.
Este es un ejemplo de la salida de esta extensión para Windows Vista.
0: kd> !irp 0x831f4a00
Irp is active with 8 stacks 5 is current (= 0x831f4b00)
Mdl = 82b020d8 Thread 8c622118: Irp stack trace.
cmd flg cl Device File Completion-Context
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
>[ 3,34] 40 e1 828517a8 00000000 842511e0-00000000 Success Error Cancel pending
\Driver\disk partmgr!PmReadWriteCompletion
Args: 00007000 00000000 fe084e00 00000004
[ 3, 0] 40 e0 82851450 00000000 842414d4-82956350 Success Error Cancel
\Driver\PartMgr volmgr!VmpReadWriteCompletionRoutine
Args: 129131bb 000000de fe084e00 00000004
[ 3, 0] 0 e0 82956298 00000000 847eeed0-829e2ba8 Success Error Cancel
\Driver\volmgr Ntfs!NtfsMasterIrpSyncCompletionRoutine
Args: 00007000 00000000 1bdae400 00000000
[ 3, 0] 0 0 82ac2020 8e879410 00000000-00000000
\FileSystem\Ntfs
Args: 00007000 00000000 00018400 00000000
Observe que la rutina de finalización junto al nombre del controlador se establece en esa ubicación de pila y que el controlador la estableció en la línea inferior. En el ejemplo anterior, Ntfs!NtfsMasterIrpSyncCompletionRoutine fue establecido por \FileSystem\Ntfs. La entrada Completion-Context situada sobre Ntfs!NtfsMasterIrpSyncCompletionRoutine, 847eeed0-829e2ba8, indica la dirección de la rutina de finalización, así como el contexto que se pasará a Ntfs!NtfsMasterIrpSyncCompletionRoutine. De esto podemos ver que la dirección de Ntfs!NtfsMasterIrpSyncCompletionRoutine es 847eeed0, y el contexto que se pasará a esta rutina cuando se llame es 829e2ba8.
Códigos de función principal de IRP
La siguiente información se incluye para ayudarle a interpretar la salida de este comando de extensión.
Los códigos de función principal de IRP son los siguientes:
Código de función principal | Código hexadecimal |
---|---|
IRP_MJ_CREATE |
0x00 |
IRP_MJ_CREATE_NAMED_PIPE |
0x01 |
IRP_MJ_CLOSE |
0x02 |
IRP_MJ_READ |
0x03 |
IRP_MJ_WRITE |
0x04 |
IRP_MJ_QUERY_INFORMATION |
0x05 |
IRP_MJ_SET_INFORMATION |
0x06 |
IRP_MJ_QUERY_EA |
0x07 |
IRP_MJ_SET_EA |
0x08 |
IRP_MJ_FLUSH_BUFFERS |
0x09 |
IRP_MJ_QUERY_VOLUME_INFORMATION |
0x0A |
IRP_MJ_SET_VOLUME_INFORMATION |
0x0B |
IRP_MJ_DIRECTORY_CONTROL |
0x0C |
IRP_MJ_FILE_SYSTEM_CONTROL |
0x0D |
IRP_MJ_DEVICE_CONTROL |
0x0E |
IRP_MJ_INTERNAL_DEVICE_CONTROL IRP_MJ_SCSI | 0x0F |
IRP_MJ_SHUTDOWN |
0x10 |
IRP_MJ_LOCK_CONTROL |
0x11 |
IRP_MJ_CLEANUP |
0x12 |
IRP_MJ_CREATE_MAILSLOT |
0x13 |
IRP_MJ_QUERY_SECURITY |
0x14 |
IRP_MJ_SET_SECURITY |
0x15 |
IRP_MJ_POWER |
0x16 |
IRP_MJ_SYSTEM_CONTROL |
0 x 17 |
IRP_MJ_DEVICE_CHANGE |
0x18 |
IRP_MJ_QUERY_QUOTA |
0x19 |
IRP_MJ_SET_QUOTA |
0x1A |
IRP_MJ_PNP IRP_MJ_MAXIMUM_FUNCTION | 0x1B |
Los códigos de función secundaria de Plug and Play son los siguientes:
Código de función secundaria | Código hexadecimal |
---|---|
IRP_MN_START_DEVICE |
0x00 |
IRP_MN_QUERY_REMOVE_DEVICE |
0x01 |
IRP_MN_REMOVE_DEVICE |
0x02 |
IRP_MN_CANCEL_REMOVE_DEVICE |
0x03 |
IRP_MN_STOP_DEVICE |
0x04 |
IRP_MN_QUERY_STOP_DEVICE |
0x05 |
IRP_MN_CANCEL_STOP_DEVICE |
0x06 |
IRP_MN_QUERY_DEVICE_RELATIONS |
0x07 |
IRP_MN_QUERY_INTERFACE |
0x08 |
IRP_MN_QUERY_CAPABILITIES |
0x09 |
IRP_MN_QUERY_RESOURCES |
0x0A |
IRP_MN_QUERY_RESOURCE_REQUIREMENTS |
0x0B |
IRP_MN_QUERY_DEVICE_TEXT |
0x0C |
IRP_MN_FILTER_RESOURCE_REQUIREMENTS |
0x0D |
IRP_MN_READ_CONFIG |
0x0F |
IRP_MN_WRITE_CONFIG |
0x10 |
IRP_MN_EJECT |
0x11 |
IRP_MN_SET_LOCK |
0x12 |
IRP_MN_QUERY_ID |
0x13 |
IRP_MN_QUERY_PNP_DEVICE_STATE |
0x14 |
IRP_MN_QUERY_BUS_INFORMATION |
0x15 |
IRP_MN_DEVICE_USAGE_NOTIFICATION |
0x16 |
IRP_MN_SURPRISE_REMOVAL |
0 x 17 |
IRP_MN_QUERY_LEGACY_BUS_INFORMATION |
0x18 |
Los códigos de función principal de WMI son los siguientes:
Código de función secundaria | Código hexadecimal |
---|---|
IRP_MN_QUERY_ALL_DATA |
0x00 |
IRP_MN_QUERY_SINGLE_INSTANCE |
0x01 |
IRP_MN_CHANGE_SINGLE_INSTANCE |
0x02 |
IRP_MN_CHANGE_SINGLE_ITEM |
0x03 |
IRP_MN_ENABLE_EVENTS |
0x04 |
IRP_MN_DISABLE_EVENTS |
0x05 |
IRP_MN_ENABLE_COLLECTION |
0x06 |
IRP_MN_DISABLE_COLLECTION |
0x07 |
IRP_MN_REGINFO |
0x08 |
IRP_MN_EXECUTE_METHOD |
0x09 |
Los códigos de función secundaria de gestión de potencia son los siguientes:
Código de función secundaria | Código hexadecimal |
---|---|
IRP_MN_WAIT_WAKE |
0x00 |
IRP_MN_POWER_SEQUENCE |
0x01 |
IRP_MN_SET_POWER |
0x02 |
IRP_MN_QUERY_POWER |
0x03 |
Los códigos de función principal de SCSI son los siguientes:
Código de función secundaria | Código hexadecimal |
---|---|
IRP_MN_SCSI_CLASS |
0x01 |