Condividi tramite


Riutilizzo degli IRP

In determinate circostanze, i driver possono riutilizzare gli IRP. Il driver può allocare un pool di buffer di memoria che utilizza per contenere i pacchetti di richieste I/O quando necessario.

I driver non devono tentare di riutilizzare i pacchetti di richiesta I/O emessi dal gestore di I/O. In particolare, i driver non devono tentare di riutilizzare gli IRP creati dalle routine IoMakeAssociatedIrp, IoBuildSynchronousFsdRequest, IoBuildAsynchronousFsdRequest o IoBuildDeviceIoControlRequest.

I driver possono riutilizzare in modo sicuro i pacchetti di richieste I/O che hanno creato, come indicato di seguito:

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

  2. Nei sistemi operativi 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 alternativa. I driver progettati rigorosamente per i sistemi operativi Windows 2000 e versioni successive devono usare il metodo precedente.