Compartilhar via


!irp

A extensão !irp mostra informações sobre um pacote de solicitação de E/S (IRP).

!irp Address [Detail] 

Parâmetros

Endereço
Especifica o endereço hexadecimal do IRP.

Detalhe
Se esse parâmetro for incluído com qualquer valor, como 1, a saída incluirá o status do IRP, o endereço da sua lista de descritores de memória (MDL), seu thread proprietário e informações de pilha para todas as pilhas de E/S e informações sobre cada local de pilha para o IRP, incluindo versões hexadecimais do código de função principal e do código de função secundária. Se esse parâmetro for omitido, a saída incluirá somente um resumo das informações.

DLL

Kdexts.dll

Informações Adicionais

Consulte Depuração Plug and Play e Depuração Interrupt Storms para aplicativos deste comando de extensão. Para obter informações sobre IRPs, confira a documentação do Kit de Driver do Windows (WDK) e o livro Microsoft Windows Internals de Mark Russinovich e David Solomon. Para mais informações sobre os códigos de função principais e secundários, consulte a documentação do Kit de Driver do Windows (WDK).

Este tópico descreve a estrutura IRP, IRP.

Para obter informações detalhadas sobre como decodificar a estrutura IRP, incluindo Args retornados, consulte os recursos a seguir.

  • Windows Internals de Mark E. Russinovich, David A. Solomon e Alex Ionescu
  • Como desenvolver drivers com o Windows Driver Foundation Guy Smith e Penny Orwick

Comentários

A saída também indica em quais condições a rotina de conclusão para cada local de pilha será chamada depois que o IRP for concluído e o local da pilha for processado. Há três possibilidades:

Êxito
Indica que a rotina de conclusão vai ser chamada quando o IRP for concluído com um código de êxito.

Erro
Indica que a rotina de conclusão vai ser chamada quando o IRP for concluído com um código de erro.

Cancelar
Indica que a rotina de conclusão vai ser chamada se uma tentativa tiver sido feita para cancelar o IRP.

Qualquer combinação desses três pode aparecer, e se alguma das condições exibidas for satisfeitas, a rotina de conclusão será chamada. Os valores apropriados são listados no final da primeira linha de informações sobre cada local de pilha, imediatamente após a entrada Completion-Context.

Veja a seguir um exemplo da saída desta extensão do 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 do Windows 10, o texto do código principal e secundário do IRP aparece, por exemplo, "IRP_MJ_FILE_SYSTEM_CONTROL" O valor do código também aparece em hex, neste exemplo, "(d)".

O terceiro argumento mostrado na saída é o código IOCTL. Use o comando !ioctldecode para exibir informações sobre o IOCTL.

Veja a seguir um exemplo da saída dessa extensão do sistema 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

A rotina de conclusão ao lado do nome do driver é definida neste local de pilha e foi definida pelo driver na linha abaixo. No exemplo anterior, Ntfs!NtfsMasterIrpSyncCompletionRoutine foi definido por \FileSystem\Ntfs. A entrada Completion-Context acima de Ntfs!NtfsMasterIrpSyncCompletionRoutine, 847eeed0-829e2ba8 indica o endereço da rotina de conclusão, bem como o contexto que será passado para Ntfs!NtfsMasterIrpSyncCompletionRoutine. A partir disso, podemos ver que o endereço de Ntfs!NtfsMasterIrpSyncCompletionRoutine is 847eeed0 e o contexto que será passado para esta rotina quando ela for chamada é 829e2ba8.

Códigos de função principais do IRP

As informações a seguir estão incluídas para ajudar você a interpretar a saída desse comando de extensão.

Os códigos de função principais do IRP são estes:

Códigos de função principais 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

0x17

IRP_MJ_DEVICE_CHANGE

0x18

IRP_MJ_QUERY_QUOTA

0x19

IRP_MJ_SET_QUOTA

0x1A

IRP_MJ_PNP IRP_MJ_MAXIMUM_FUNCTION

0x1B

Os códigos de função secundária do Plug and Play são estes:

Código de função secundária 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

0x17

IRP_MN_QUERY_LEGACY_BUS_INFORMATION

0x18

Os códigos de função secundários do WMI são estes:

Código de função secundária 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

Os códigos de função secundária de gerenciamento de energia são estes:

Código de função secundária Código hexadecimal

IRP_MN_WAIT_WAKE

0x00

IRP_MN_POWER_SEQUENCE

0x01

IRP_MN_SET_POWER

0x02

IRP_MN_QUERY_POWER

0x03

Os códigos de função secundária do SCSI são estes:

Código de função secundária Código hexadecimal

IRP_MN_SCSI_CLASS

0x01

Confira também

IRP

!irpfind

!ioctldecode