다음을 통해 공유


!irp

!irp 확장은 IRP(I/O 요청 패킷)에 대한 정보를 표시합니다.

!irp Address [Detail] 

매개 변수

주소
IRP의 16진수 주소를 지정합니다.

세부
이 매개 변수가 1과 같은 값에 포함된 경우 출력에는 IRP의 상태, MDL(메모리 설명자 목록) 주소, 해당 소유 스레드 및 모든 I/O 스택에 대한 스택 정보 및 주요 함수 코드의 16진수 버전 및 부 함수 코드를 포함하여 IRP의 각 스택 위치에 대한 정보가 포함됩니다. 이 매개 변수를 생략하면 출력에 정보의 요약만 포함됩니다.

DLL

Kdexts.dll

추가 정보

이 확장 명령의 애플리케이션에 대한 플러그 앤 플레이 디버깅 및 디버깅 인터럽트 폭풍을 참조하세요. IRP에 대한 자세한 내용은 WDK(Windows 드라이버 키트) 설명서 및 Mark Russinovich 및 David Solomon의 Microsoft Windows 내부 문서를 참조하세요. 주 및 부 함수 코드에 대한 자세한 내용은 WDK(Windows 드라이버 키트) 설명서를 참조하세요.

이 항목에서는 IRP 구조인 IRP에 대해 설명합니다.

반환된 Args를 포함하여 IRP 구조를 디코딩하는 방법에 대한 자세한 내용은 다음 리소스를 참조하세요.

  • Windows Internals by Mark E. Russinovich, David A. Solomon, Alex Ionescu
  • Windows 드라이버 파운데이션 가이 스미스와 페니 오윅을 사용하여 드라이버 개발

설명

또한 출력은 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"). 이 예제에서는 코드 값도 16진수로 표시됩니다.

출력에 표시되는 세 번째 인수는 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 주요 함수 코드는 다음과 같습니다.

주 함수 코드 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

참고 항목

IRP

!irpfind

!ioctldecode