IRP 다시 사용

특정 상황에서 드라이버는 IRP를 다시 사용할 수 있습니다. 드라이버는 IRP를 만드는 데 사용하는 메모리 버퍼 풀을 할당할 수 있습니다.

드라이버는 I/O 관리자가 발급한 IR을 다시 사용하려고 시도해서는 안됩니다. 특히 드라이버는 IoMakeAssociatedIrp, IoBuildSynchronousFsdRequest, IoBuildAsynchronousFsdRequest 또는 IoBuildDeviceIoControlRequest 루틴에서 만든 IRP를 다시 사용하려고 시도해서는 안 됩니다.

드라이버는 다음과 같이 만든 IRP를 안전하게 재사용할 수 있습니다.

  1. 드라이버가 IRP를 원시 메모리(예: ExAllocatePoolWithTag 호출)로 할당한 다음 IoInitializeIrp를 사용하여 초기화하는 경우 IoInitializeIrp 또는 IoReuseIrp를 안전하게 호출하여 메모리 버퍼를 다시 초기화할 수 있습니다.

  2. Microsoft Windows 2000 이상 운영 체제에서 IoAllocateIrp 를 사용하여 IRP를 만드는 드라이버는 IoReuseIrp를 호출하여 IRP를 다시 사용할 수 있습니다.

  3. 드라이버가 ChargeQuota 매개 변수를 FALSE로 설정하여 IoAllocateIrp를 호출하여 IRP를 할당하는 경우 IoInitializeIrp를 안전하게 사용하여 IRP를 다시 초기화할 수 있습니다. Windows 98/Me에서 작업해야 하는 드라이버는 이 방법을 해결 방법으로 사용할 수 있습니다. Windows 2000 이상 운영 체제용으로 엄격하게 설계된 드라이버는 이전 방법을 사용해야 합니다.