Поделиться через


!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

См. также

IRP

!irpfind

!ioctldecode