Réutilisation des irPs

Dans certaines circonstances, les conducteurs peuvent réutiliser les IRP. Le pilote peut allouer un pool de mémoires tampons qu’il utilise pour contenir les irps au fur et à mesure qu’ils doivent être créés.

Les pilotes ne doivent pas tenter de réutiliser les IRP émis par le gestionnaire d’E/S. En particulier, les pilotes ne doivent pas tenter de réutiliser les irPs créés par les routines IoMakeAssociatedIrp, IoBuildSynchronousFsdRequest, IoBuildAsynchronousFsdRequest ou IoBuildDeviceIoControlRequest .

Les pilotes peuvent réutiliser en toute sécurité les IRP qu’ils ont créés, comme suit :

  1. Si un pilote alloue un IRP en tant que mémoire brute (par exemple, en appelant ExAllocatePoolWithTag), puis l’initialise avec IoInitializeIrp, il peut appeler en toute sécurité IoInitializeIrp ou IoReuseIrp pour réinitialiser la mémoire tampon.

  2. Sur Microsoft Windows 2000 et les systèmes d’exploitation ultérieurs, les pilotes qui créent un IRP avec IoAllocateIrp peuvent réutiliser l’IRP en appelant IoReuseIrp.

  3. Si un pilote alloue un IRP en appelant IoAllocateIrp avec le paramètre ChargeQuota défini sur FALSE, il peut utiliser IoInitializeIrp en toute sécurité pour réinitialiser l’IRP. Les pilotes qui doivent fonctionner sur Windows 98/Me peuvent utiliser cette méthode comme solution de contournement. Les pilotes conçus strictement pour les systèmes d’exploitation Windows 2000 et ultérieur doivent utiliser la méthode précédente.