2017-12-14 41 views

답변

1

IRP 그 자체로는 어떤 기능과도 관련이 없습니다. 모든 IRP는 적어도 하나의 I/O Stack Locations을 - 그리고 IO_STACK_LOCATION 구조의 시작에서 당신은

UCHAR                  MajorFunction; 
UCHAR                  MinorFunction; 

MajorFunction

I/O 작업의 형태를 나타내는 IRP 주요 기능 코드가 수행 할 볼 수 있습니다.

여기서 정확히 IRP_MJ_XXX입니다. 그러나 복잡한 IRP는 스택 위치가 여러 개이고 다른 위치는 MajorFunction이 다를 수 있습니다. 파일 시스템이나 디스크 드라이버를 처음에 (상단 스택에) 설정 한 IRP가 IRP_MJ_WRITE (또는 읽음)이라고합시다. 그러나 디스크 드라이버가이 irp를 포트 드라이버에 전송할 때 - 이미 IRP_MJ_SCSI이 스택에 설정되어 있습니다.

+0

Ok 그렇다면 하나의 IRP 만 사용하면 어떤 기능이 사용되었는지 정확히 알 수 없습니까? 또는 IRP가 마지막으로 어느 드라이버에서 왔는지 결정한 다음 IO 스택을 검사하여 파악할 수 있습니까? –

+0

@the_endian - "주어진 IRP"에서 무엇을 의미합니까? IPR에는이 IRP를 처리하는 소유자 드라이버가있을 때마다 그는 그 IRP를 조작하고 액세스 할 수 있습니다. 드라이버는 현재 스택 위치를 사용합니다 ('IoGetCurrentIrpStackLocation'을 찾으십시오). IRP가있는 곳에서? 어쨌든 현재 스택 위치를 찾을 필요가 있습니다 -'Irp-> Tail.Overlay.CurrentStackLocation' – RbMm

+0

지금 받으십시오. 고맙습니다! –