!irp
!irp 延伸模組會顯示 I/O 要求封包的相關信息(IRP)。
!irp Address [Detail]
參數
位址
指定 IRP 的十六進位位址。
細節
如果此參數包含任何值,例如 1,則輸出會包含 IRP 的狀態、其記憶體描述元清單的位址(MDL)、其擁有線程及其所有 I/O 堆疊的堆棧資訊,以及 IRP 每個堆疊位置的相關信息,包括主要函式程式代碼和次要函式程式代碼的十六進位版本。 如果省略此參數,輸出只會包含資訊的摘要。
DLL
Kdexts.dll
其他資訊
如需此擴充功能命令的應用程式,請參閱 隨插即用 偵錯和偵錯中斷 Storms。 如需 IRP 的相關信息,請參閱 Windows 驅動程式套件 (WDK) 檔和 Microsoft Mark Russinovich 和 David 所羅門的 Windows 內部 。 如需主要和次要函式程式代碼的詳細資訊,請參閱 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 |