Wiederverwendung von IRPs

Unter bestimmten Umständen können Treiber IRPs wiederverwenden . Der Treiber kann einen Pool von Speicherpuffern zuordnen, den er zum Speichern von IRPs verwendet, wenn diese erstellt werden müssen.

Treiber dürfen nicht versuchen, vom E/A-Manager ausgestellte IRPs wiederzuverwenden. Insbesondere sollten Treiber nicht versuchen, IRPs wiederzuverwenden, die von den Routinen IoMakeAssociatedIrp, IoBuildSynchronousFsdRequest, IoBuildAsynchronousFsdRequest oder IoBuildDeviceIoControlRequest erstellt wurden.

Treiber können von ihnen erstellte IRPs wie folgt sicher wiederverwenden:

  1. Wenn ein Treiber einen IRP als Rohspeicher zuordnet (z. B. durch Aufrufen von ExAllocatePoolWithTag) und dann mit IoInitializeIrp initialisiert, kann er sicher IoInitializeIrp oder IoReuseIrp aufrufen, um den Speicherpuffer neu zu initialisieren.

  2. Unter Microsoft Windows 2000 und höheren Betriebssystemen können Treiber, die eine IRP mit IoAllocateIrp erstellen, das IRP wiederverwenden, indem Sie IoReuseIrp aufrufen.

  3. Wenn ein Treiber einen IRP durch Aufruf von IoAllocateIrp zuordnet und der ChargeQuota-Parameter auf FALSE festgelegt ist, kann er ioInitializeIrp sicher verwenden, um die IRP neu zu initialisieren. Treiber, die unter Windows 98/Me funktionieren müssen, können diese Methode als Umgehung verwenden. Treiber, die streng für Windows 2000 und höhere Betriebssysteme entwickelt wurden, sollten die vorherige Methode verwenden.