IRP の再利用
特定の状況では、ドライバーは IRP を再利用できます。 ドライバーは、作成する必要がある IRP を保持するために使用するメモリ バッファーのプールを割り当てることができます。
ドライバーで、I/O マネージャーによって発行された IRP を再利用することはできません。 特に、ドライバーは、IoMakeAssociatedIrp ルーチン、IoBuildSynchronousFsdRequest ルーチン、IoBuildAsynchronousFsdRequest ルーチンまたは IoBuildDeviceIoControlRequest ルーチンによって作成された IRP は再利用できないので注意してください。
ドライバーは、ドライバーで作成した IRP は次のように安全に再利用できます。
ドライバーが、(たとえば ExAllocatePoolWithTag を呼び出して) 生メモリとして IRP を割り当て、IoInitializeIrp で初期化すると、ドライバーは、IoInitializeIrp または IoReuseIrp を安全に呼び出してメモリ バッファーを再初期化できます。
Microsoft Windows 2000 以降のオペレーティング システムでは、IoAllocateIrp で IRP を作成するドライバーは、IoReuseIrp を呼び出して IRP を再利用できます。
ドライバーが IoAllocateIrp を呼び出して IRP を割り当てた場合( ChargeQuota パラメーターを FALSE に設定)、IoInitializeIrp を使用して IRP を安全に再初期化できます。 Windows 98/Me で動作する必要があるドライバーは、この方法を回避策として使用できます。 Windows 2000 以降のオペレーティング システム用に厳密に設計されたドライバーでは、前の方法を使用する必要があります。