重複使用 IRP
在某些情況下,驅動程式可以 重複使用 IRP。 驅動程式可以配置用來保存 IRP 的記憶體緩衝區集區,因為它們需要建立。
驅動程式不得嘗試重複使用 I/O 管理員所發出的 IRP。 特別是,驅動程式不應該嘗試重複使用 IoMakeAssociatedIrp、 IoBuildSynchronousFsdRequest、 IoBuildAsynchronousFsdRequest或 IoBuildDeviceIoControlRequest 常式所建立的 IRP。
驅動程式可以安全地重複使用已建立的 IRP,如下所示:
例如,如果驅動程式將 IRP 配置為原始記憶體 (,方法是呼叫 ExAllocatePoolWithTag) ,然後使用 IoInitializeIrp初始化它,然後安全地呼叫 IoInitializeIrp 或 IoReuseIrp 以重新初始化記憶體緩衝區。
在 Microsoft Windows 2000 和更新版本的作業系統上,使用 IoAllocateIrp 建立 IRP 的驅動程式可以呼叫 IoReuseIrp來重複使用 IRP。
如果驅動程式呼叫 IoAllocateIrp 並將 ChargeQuota 參數設定為 FALSE來配置 IRP,則可以安全地使用 IoInitializeIrp 來重新初始化 IRP。 必須在 Windows 98/Me 上運作的驅動程式可以使用此方法作為因應措施。 專為 Windows 2000 和更新版本作業系統設計的驅動程式應該使用先前的方法。