!irp
その !irp 拡張子は、I/O 要求パケット (IRP) に関する情報を表示します。
!irp Address [Detail]
パラメーター
Address
IRPの16進数のアドレスが指定されます。
Detail
このパラメーターに 1 などの値が含まれている場合、出力には IRP のステータス、そのメモリー記述子リスト (MDL) のアドレス、その所有スレッド、そのすべての I/O スタックのスタック情報が含まれます。 メジャー機能コードとマイナー機能コードの 16 進バージョンを含む、IRP の各スタック位置に関する情報。 このパラメータを省略した場合、出力には情報の概要のみが含まれます。
DLL
Kdexts.dll
追加情報
見る プラグアンドプレイのデバッグ そして 中断ストームのデバッグ この拡張コマンドのアプリケーション用。 IRP の詳細については、Windows Driver Kit (WDK) のドキュメントと、Mark Russinovich および David Solomon による Microsoft Windows Internals を参照してください。 メジャーおよびマイナー機能コードの詳細については、Windows Driver Kit (WDK) のドキュメントを参照してください。
このトピックでは、構造である IRP について説明します IRP。
返された Args を含む IRP 構造のデコードの詳細については、次のリソースを参照してください。
- Windows Internals by Mark E. Russinovich、David A. Solomon、Alex Ionescu
- Windows Driver Foundation によるドライバーの開発 Guy Smith および Penny Orwick
解説
この出力には、IRP が完了してスタック位置が処理されたときに、各スタック位置の完了ルーチンがどのような条件で呼び出されるのかも示されます。 次の 3 つの可能性があります:
Success
IRP が成功コードで完了したときに完了ルーチンが呼び出されることを示します。
Error
IRP がエラー コードで完了したときに完了ルーチンが呼び出されることを示します。
Cancel
IRP をキャンセルしようとした場合に完了ルーチンが呼び出されることを示します。
これら 3 つの任意の組み合わせが出現し、示された条件のいずれかが満たされると、完了ルーチンが呼び出されます。 適切な値は、各スタックの場所に関する情報の最初の行の最後、 補完コンテキスト エントリの直後にリストされます。
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」)。コード値は 16 進数でも表示されます (この例では「(d)」)。
出力に表示される 3 番目の引数は、IOCTL コードです。 IOCTL に関する情報を表示するには、 !ioctldecode コマンドを使用します。
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, 847eeed0-829e2ba8, 完了ルーチンのアドレスと、完了ルーチンに渡されるコンテキストを示します Ntfs!NtfsMasterIrpSyncCompletionRoutine. このことから、アドレスが次のとおりであることがわかります Ntfs!NtfsMasterIrpSyncCompletionRoutine is 847eeed0, このルーチンが呼び出されたときにこのルーチンに渡されるコンテキストは、 829e2ba8.
IRP の主要機能コード
この拡張コマンドの出力を解釈するのに役立つ次の情報が含まれています。
IRP の主要な機能コードは次のとおりです。
主要機能コード | 16進コード |
---|---|
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 |
プラグ アンド プレイのマイナー機能コードは次のとおりです。
マイナー機能コード | 16進コード |
---|---|
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 マイナー関数コードは次のとおりです。
マイナー機能コード | 16進コード |
---|---|
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 |
電源管理のマイナー機能コードは次のとおりです。
マイナー機能コード | 16進コード |
---|---|
IRP_MN_WAIT_WAKE |
0x00 |
IRP_MN_POWER_SEQUENCE |
0x01 |
IRP_MN_SET_POWER |
0x02 |
IRP_MN_QUERY_POWER |
0x03 |
SCSI マイナー機能コードは次のとおりです。
マイナー機能コード | 16進コード |
---|---|
IRP_MN_SCSI_CLASS |
0x01 |