Riutilizzo di IRP

In determinate circostanze, i driver possono riutilizzare i provider di servizi di integrazione. Il driver può allocare un pool di buffer di memoria che usa per contenere i provider di servizi di integrazione in quanto devono essere creati.

I driver non devono tentare di riutilizzare i provider di servizi di rete rilasciati dal gestore di I/O. In particolare, i driver non devono tentare di riutilizzare IoMakeAssociatedIrp, IoBuildSynchronousFsdRequest, IoBuildAsyncHronousFsdRequest o IoBuildDeviceIoControlRequest.

I driver possono riutilizzare in modo sicuro i provider di servizi di integrazione creati, come indicato di seguito:

  1. Se un driver alloca un'istanza di IRP come memoria non elaborata (ad esempio chiamando ExAllocatePoolWithTag) e quindi la inizializza con IoInitializeIrp, può chiamare in modo sicuro IoInitializeIrp o IoReuseIrp per reinizializzare il buffer di memoria.

  2. In Microsoft Windows 2000 e versioni successive, i driver che creano un'IRP con IoAllocateIrp possono riutilizzare l'IRP chiamando IoReuseIrp.

  3. Se un driver alloca un'IRP chiamando IoAllocateIrp con il parametro ChargeQuota impostato su FALSE, può usare in modo sicuro IoInitializeIrp per reinizializzare l'IRP. I driver che devono funzionare in Windows 98/Me possono usare questo metodo come soluzione di lavoro. I driver progettati rigorosamente per i sistemi operativi Windows 2000 e versioni successive devono usare il metodo precedente.