!irp
Расширение !irp отображает сведения о пакете запросов ввода-вывода (IRP ).
!irp Address [Detail]
Параметры
Адрес
Указывает шестнадцатеричный адрес IRP.
Подробность
Если этот параметр включен с любым значением, например 1, выходные данные включают состояние IRP, адрес списка дескрипторов памяти (MDL), собственный поток и сведения о стеке для всех стеков ввода-вывода и сведения о каждом расположении стека для IRP, включая шестнадцатеричные версии основного кода функции и дополнительный код функции. Если этот параметр опущен, выходные данные содержат только сводку сведений.
DLL-библиотеки
Kdexts.dll
Дополнительная информация
Сведения о самонастраивающийся отладке и отладке штормов прерываний для приложений этой команды расширения. Дополнительные сведения об IRP см. в документации по комплекту драйверов Windows (WDK) и внутренних элементах Microsoft Windows Марком Руссиновичем и Дэвидом Соломоном. Дополнительные сведения о основных и дополнительных кодах функций см. в документации по комплекту драйверов Windows (WDK).
В этом разделе описывается структура IRP, IRP.
Подробные сведения о декодировании структуры IRP, включая возвращенные Args, см. в следующих ресурсах.
- Windows Internals марк Э. Руссинович, Дэвид А. Соломон и Алекс Ионеску
- Разработка драйверов с помощью Windows Driver Foundation Гай Смит и Пенни Орвик
Замечания
Выходные данные также указывают, в каких условиях подпрограмма завершения для каждого расположения стека будет вызываться после завершения 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, 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 |