다음을 통해 공유


I/O 요청 패킷

디바이스 드라이버로 전송되는 대부분의 요청은 IRP(I/O 요청 패킷)로 패키지됩니다. 운영 체제 구성 요소 또는 드라이버는 IoCallDriver를 호출하여 IRP를 드라이버에 보냅니다. 이 매개 변수에는 DEVICE_OBJECT 대한 포인터와 IRP에 대한 포인터라는 두 가지 매개 변수가 있습니다. DEVICE_OBJECT 연결된 DRIVER_OBJECT 대한 포인터가 있습니다. 구성 요소가 IoCallDriver를 호출할 때 구성 요소가 IRP를 디바이스 개체로 보내거나 IRP를 디바이스 개체와 연결된 드라이버로 보냅니다. 경우에 따라 IRP를 전달하는 대신 IRP를 전달하거나 IRP를 전달하는 구를 사용합니다.

일반적으로 IRP는 스택에 정렬된 여러 드라이버에서 처리됩니다. 스택의 각 드라이버는 디바이스 개체와 연결됩니다. 자세한 내용은 디바이스 노드 및 디바이스 스택을 참조하세요. IRP가 디바이스 스택에서 처리되는 경우 IRP는 일반적으로 디바이스 스택의 상위 디바이스 개체로 먼저 전송됩니다. 예를 들어 이 다이어그램에 표시된 디바이스 스택에서 IRP 를 처리하는 경우 IRP는 먼저 디바이스 스택의 맨 위에 있는 필터 디바이스 개체(Filter DO)로 전송됩니다.

디바이스 노드 및 해당 디바이스 스택의 다이어그램

디바이스 스택 아래로 IRP 전달

I/O 관리자가 다이어그램의 필터 DO에 IRP를 보낸다고 가정합니다. AfterThought.sys Filter DO와 연결된 드라이버는 IRP를 처리한 다음 디바이스 스택의 다음 하위 디바이스 개체인 FDO(기능 디바이스 개체)에 전달합니다. 드라이버가 IRP를 디바이스 스택의 다음 하위 디바이스 개체로 전달하면 드라이버가 IRP를 디바이스 스택 아래로 전달한다고 합니다.

일부 IRP는 디바이스 스택 아래로 PDO(물리적 디바이스 개체)로 전달됩니다. 다른 IRP는 PDO 위의 드라이버 중 하나에 의해 완료되기 때문에 PDO에 도달하지 않습니다.

IRP는 자체 포함

IRP 구조는 드라이버가 I/O 요청을 처리하는 데 필요한 모든 정보를 보유한다는 점에서 자체 포함됩니다. IRP 구조의 일부 부분에는 스택에 참여하는 모든 드라이버에 공통적인 정보가 있습니다. IRP의 다른 부분에는 스택의 특정 드라이버와 관련된 정보가 있습니다.