Udostępnij za pośrednictwem


Ponowne wykorzystanie IRPs

W pewnych okolicznościach kierowcy mogą ponownie używać IRPs. Sterownik może przydzielić pulę pamięci buforów, które są używane do przechowywania IRP podczas ich tworzenia.

Sterowniki nie mogą próbować ponownie używać pakietów IRP wystawionych przez menedżera I/O. W szczególności sterowniki nie powinny próbować ponownie używać IRPs utworzonych przez IoMakeAssociatedIrp, IoBuildSynchronousFsdRequest, IoBuildAsynchronousFsdRequest lub IoBuildDeviceIoControlRequest.

Sterowniki mogą bezpiecznie ponownie używać utworzonych przez nie pakietów IRP.

  1. Jeśli sterownik przydziela IRP jako surową pamięć (na przykład przez wywołanie funkcji ExAllocatePoolWithTag), a następnie inicjuje go z użyciem IoInitializeIrp, można bezpiecznie wywołać IoInitializeIrp lub IoReuseIrp w celu ponownego zainicjowania buforu pamięci.

  2. W systemach operacyjnych Microsoft Windows 2000 i nowszych sterowniki tworzące protokół IRP z funkcją IoAllocateIrp mogą ponownie używać protokołu IRP przez wywołanie IoReuseIrp.

  3. Jeśli sterownik przydziela IRP przez wywołanie IoAllocateIrp z parametrem ChargeQuota ustawionym na FALSE, można bezpiecznie użyć IoInitializeIrp w celu ponownego zainicjowania IRP. Sterowniki, które muszą działać w systemie Windows 98/Me, mogą używać tej metody jako obejścia. Sterowniki przeznaczone wyłącznie dla systemów operacyjnych Windows 2000 i nowszych powinny używać poprzedniej metody.