I/O 요청 패킷
I/O Request Packets(원본 Microsoft Learn 링크)
아래는 위 문서의 번역이다.
대부분의 요청은 I/O 요청 패킷(IRP)에 포장되어 디바이스 드라이버로 전송된다. 운영체제 구성 요소 또는 드라이버는 IoCallDriver를 호출하여 IRP를 드라이버에 전송하며, 이 함수는 두 개의 매개변수를 가진다: DEVICE_OBJECT에 대한 포인터와 IRP에 대한 포인터이다. DEVICE_OBJECT는 연관된 DRIVER_OBJECT에 대한 포인터를 가지고 있다. 어떤 구성 요소가 IoCallDriver를 호출하면, 우리는 그 구성 요소가 IRP를 디바이스 객체로 전송했다고 하거나, 해당 디바이스 객체와 연관된 드라이버로 IRP를 전송했다고 말한다. 때때로 sends the IRP 대신 passes the IRP 또는 forwards the IRP라는 표현을 사용하기도 한다.
일반적으로 IRP는 스택 형태로 배열된 여러 드라이버에 의해 처리된다. 스택의 각 드라이버는 자신에게 연관된 디바이스 객체를 가진다. 자세한 내용은 ‘Device nodes and device stacks’를 참조하십시오. 디바이스 스택에서 IRP가 처리될 때, IRP는 보통 디바이스 스택의 가장 위에 있는 디바이스 객체로 먼저 전송된다. 예를 들어, 만약 IRP가 아래 그림과 같은 디바이스 스택에서 처리되는 경우, IRP는 디바이스 스택의 맨 위에 있는 필터 디바이스 객체(Filter DO)에 먼저 전송된다.

디바이스 스택 아래로 IRP 전달하기
I/O 매니저가 그림에서 Filter DO로 IRP를 전송한다고 가정하자. Filter DO와 연관된 드라이버 AfterThought.sys는 IRP를 처리한 다음, 디바이스 스택에서 바로 아래에 있는 Functional Device Object(FDO)로 IRP를 전달한다. 드라이버가 IRP를 디바이스 스택의 다음 하위 디바이스 객체로 전달하는 것을 IRP를 디바이스 스택 아래로 전달한다(pass down the device stack)라고 한다.
일부 IRP는 디바이스 스택의 최하단에 있는 물리 디바이스 객체(PDO)까지 모두 전달된다. 다른 IRP는 PDO까지 도달하지 않으며, PDO 위에 있는 드라이버 중 하나에서 완료된다.
IRP는 자체적으로 완결된 구조이다
IRP 구조는 드라이버가 I/O 요청을 처리하는 데 필요한 모든 정보를 담고 있다는 점에서 자체적으로 완결(self-contained)되어 있다. IRP 구조의 일부는 스택에 참여하는 모든 드라이버가 공통으로 사용하는 정보를 담고 있다. IRP의 다른 부분은 스택 내 특정 드라이버에 특화된 정보를 담고 있다.
댓글남기기