Reutilizando IRPs

Em determinadas circunstâncias, os drivers podem reutilizar IRPs. O driver pode alocar um pool de buffers de memória que ele usa para armazenar IRPs, pois eles precisam ser criados.

Os drivers não devem tentar reutilizar IRPs emitidos pelo gerente de E/S. Em particular, os drivers não devem tentar reutilizar IRPs criados pelas rotinas IoMakeAssociatedIrp, IoBuildSynchronousFsdRequest, IoBuildAsynchronousFsdRequest ou IoBuildDeviceIoControlRequest .

Os drivers podem reutilizar com segurança os IRPs que eles criaram, da seguinte maneira:

  1. Se um driver alocar um IRP como memória bruta (por exemplo, chamando ExAllocatePoolWithTag) e, em seguida, inicializá-lo com IoInitializeIrp, ele poderá chamar IoInitializeIrp ou IoReuseIrp com segurança para reinicializar o buffer de memória.

  2. No Microsoft Windows 2000 e em sistemas operacionais posteriores, os drivers que criam um IRP com IoAllocateIrp podem reutilizar o IRP chamando IoReuseIrp.

  3. Se um driver alocar um IRP chamando IoAllocateIrp com o parâmetro ChargeQuota definido como FALSE, ele poderá usar IoInitializeIrp com segurança para reinicializar o IRP. Os drivers que devem funcionar no Windows 98/Me podem usar esse método como uma solução alternativa. Os drivers projetados estritamente para sistemas operacionais Windows 2000 e posteriores devem usar o método anterior.