IRP の再利用

特定の状況では、ドライバーは IRP を再利用できます。 ドライバーは、作成する必要がある IRP を保持するために使用するメモリ バッファーのプールを割り当てることができます。

ドライバーで、I/O マネージャーによって発行された IRP を再利用することはできません。 特に、ドライバーは、IoMakeAssociatedIrp ルーチン、IoBuildSynchronousFsdRequest ルーチン、IoBuildAsynchronousFsdRequest ルーチンまたは IoBuildDeviceIoControlRequest ルーチンによって作成された IRP は再利用できないので注意してください。

ドライバーは、ドライバーで作成した IRP は次のように安全に再利用できます。

  1. ドライバーが、(たとえば ExAllocatePoolWithTag を呼び出して) 生メモリとして IRP を割り当て、IoInitializeIrp で初期化すると、ドライバーは、IoInitializeIrp または IoReuseIrp を安全に呼び出してメモリ バッファーを再初期化できます。

  2. Microsoft Windows 2000 以降のオペレーティング システムでは、IoAllocateIrp で IRP を作成するドライバーは、IoReuseIrp を呼び出して IRP を再利用できます。

  3. ドライバーが IoAllocateIrp を呼び出して IRP を割り当てた場合( ChargeQuota パラメーターを FALSE に設定)、IoInitializeIrp を使用して IRP を安全に再初期化できます。 Windows 98/Me で動作する必要があるドライバーは、この方法を回避策として使用できます。 Windows 2000 以降のオペレーティング システム用に厳密に設計されたドライバーでは、前の方法を使用する必要があります。