!Irp

!irp 延伸模組會顯示 I/O 要求封包的相關信息(IRP)。

!irp Address [Detail] 

參數

地址
指定 IRP 的十六進位位址。

詳細資料
如果此參數包含任何值,例如 1,則輸出會包含 IRP 的狀態、其記憶體描述元清單的位址(MDL)、其擁有線程及其所有 I/O 堆疊的堆棧資訊,以及 IRP 每個堆疊位置的相關信息,包括主要函式程式代碼和次要函式程式代碼的十六進位版本。 如果省略此參數,輸出只會包含資訊的摘要。

DLL

Kdexts.dll

其他資訊

如需此擴充功能命令的應用程式,請參閱 隨插即用偵錯和偵錯中斷 Storms。 如需 IRP 的相關信息,請參閱 Windows 驅動程式套件 (WDK) 檔和 Microsoft Windows Internals by Mark Russinovich 和 David 所羅門。 如需主要和次要函式程式代碼的詳細資訊,請參閱 Windows 驅動程式套件 (WDK) 檔。

本主題描述 IRP 結構 IRP

如需譯碼 IRP 結構的詳細資訊,包括傳回的 Args,請參閱下列資源。

  • Windows 內部由馬克·魯西諾維奇、大衛·所羅門和亞歷克斯·伊內斯庫
  • 使用 Windows Driver Foundation Guy Smith 和 Penny Orwick 開發驅動程式

備註

輸出也會指出在哪些情況下,每個堆疊位置的完成例程會在 IRP 完成且處理堆疊位置之後呼叫。 有三種可能性:

「成功」
指出當 IRP 以成功程式代碼完成時,將會呼叫完成例程。

錯誤
指出當 IRP 完成時,將會呼叫完成例程,並出現錯誤碼。

取消
指出如果嘗試取消 IRP,則會呼叫完成例程。

這三個組合可能會出現,如果符合任何顯示的條件,則會呼叫完成例程。 適當的值會列在完成內容項目之後,每個堆疊位置相關信息的第一個數據列結尾。

以下是此 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

從 Windows 10 開始,會顯示 IRP 主要和次要程式代碼文字,例如 「IRP_MJ_FILE_SYSTEM_CONTROL」 程式代碼值也會顯示在十六進位中,在此範例 “(d)”。

輸出中顯示的第三個自變數是IOCTL程式代碼。 使用 !ioctldecode 命令來顯示 IOCTL 的相關信息。

以下是此延伸模組從 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

請注意,驅動程式名稱旁的完成例程是在該堆棧位置上設定的,而且是由以下這一行的驅動程式所設定。 在上述範例中, Ntfs!NtfsMasterIrpSyncCompletionRoutine 是由 \FileSystem\Ntfs 所設定。 Ntfs!NtfsMasterIrpSyncCompletionRoutine 上方的 Completion-Context 專案,847eeed0-829e2ba8,表示完成例程的位址,以及將傳遞至 Ntfs!NtfsMasterIrpSyncCompletionRoutine 的內容。 在此中,我們可以看到 Ntfs!NtfsMasterIrpSyncCompletionRoutine 的位址是 847eeed0,而且呼叫 829e2ba8會傳遞至此例程的內容。

IRP 主要函式程序代碼

包含下列資訊,可協助您解譯此延伸模組命令的輸出。

IRP 主要函式程式代碼如下所示:

主要函式程序代碼 十六進位程序代碼

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

隨插即用 次要函式程式代碼如下所示:

次要函式程序代碼 十六進位程序代碼

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

WMI 次要函式程式代碼如下所示:

次要函式程序代碼 十六進位程序代碼

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

電源管理次要函式程式代碼如下所示:

次要函式程序代碼 十六進位程序代碼

IRP_MN_WAIT_WAKE

0x00

IRP_MN_POWER_SEQUENCE

0x01

IRP_MN_SET_POWER

0x02

IRP_MN_QUERY_POWER

0x03

SCSI 次要函式程序代碼如下所示:

次要函式程序代碼 十六進位程序代碼

IRP_MN_SCSI_CLASS

0x01

另請參閱

IRP

!irpfind

!ioctldecode