Compartir a través de


Reutilización de IRP

En determinadas circunstancias, los controladores pueden reutilizar los IRP. El controlador puede asignar un grupo de búferes de memoria que usa para contener IRP, ya que deben crearse.

Los controladores no deben intentar reutilizar los IRP emitidos por el administrador de E/S. En concreto, los controladores no deben intentar reutilizar irPs creados por las rutinas IoMakeAssociatedIrp, IoBuildSynchronousFsdRequest, IoBuildAsynchronousFsdRequest o IoBuildDeviceIoControlRequest .

Los controladores pueden reutilizar de forma segura los IRP que han creado, como se indica a continuación:

  1. Si un controlador asigna un IRP como memoria sin procesar (por ejemplo, llamando a ExAllocatePoolWithTag) y, a continuación, lo inicializa con IoInitializeIrp, puede llamar de forma segura a IoInitializeIrp o IoReuseIrp para reinicializar el búfer de memoria.

  2. En los sistemas operativos Microsoft Windows 2000 y versiones posteriores, los controladores que crean un IRP con IoAllocateIrp pueden reutilizar el IRP llamando a IoReuseIrp.

  3. Si un controlador asigna un IRP llamando a IoAllocateIrp con el parámetro ChargeQuota establecido en FALSE, puede usar IoInitializeIrp de forma segura para reinicializar el IRP. Los controladores que deben funcionar en Windows 98/Me pueden usar este método como solución alternativa. Los controladores diseñados estrictamente para los sistemas operativos Windows 2000 y versiones posteriores deben usar el método anterior.