Reutilización de objetos de transacción DMA

[Solo se aplica a KMDF]

Después de que un controlador procese todas las transferencias de DMA asociadas a una transacción DMA, el controlador puede eliminar o reutilizar el objeto de transacción. Normalmente, la función de devolución de llamada EvtInterruptDpc del controlador elimina el objeto de transacción (llamando a WdfObjectDelete). Posteriormente, cuando el controlador crea una nueva transacción DMA, llama a WdfDmaTransactionCreate para crear un nuevo objeto de transacción.

Sin embargo, a veces resulta beneficioso que el controlador reutilice los objetos de transacción. En tales casos, el controlador llama a WdfDmaTransactionRelease en lugar de WdfObjectDelete.

Por ejemplo, supongamos que el controlador y el dispositivo deben funcionar cuando los recursos de memoria del equipo son bajos. Para controlar este problema de memoria, el controlador puede usar el procedimiento siguiente:

  1. La función de devolución de llamada EvtDriverDeviceAdd del controlador puede llamar a WdfDmaTransactionCreate para crear uno o varios objetos de transacción. El controlador guarda los identificadores en estos objetos de transacción.

  2. Cada vez que el controlador está listo para crear e inicializar una nueva transacción, llama a WdfDmaTransactionCreate. Si este método devuelve STATUS_INSUFFICIENT_RESOURCES, el controlador puede usar uno de los objetos de transacción almacenados.

  3. Si el controlador usa uno de sus objetos de transacción almacenados, debe reutilizar el objeto de transacción, en lugar de eliminarlo, cuando se complete la transacción. El controlador configura el objeto de transacción para volver a usar mediante una llamada a WdfDmaTransactionRelease en lugar de WdfObjectDelete.

El ejemplo PLX9x5x reutiliza objetos de transacción DMA.