Sdílet prostřednictvím


Opakované použití objektů transakcí DMA

[Platí jenom pro KMDF]

Jakmile ovladač zpracuje všechny přenosy DMA přidružené k transakci DMA, ovladač může odstranit nebo znovu použít objekt transakce. Funkce zpětného volání EvtInterruptDpc ovladače obvykle odstraní objekt transakce (zavoláním WdfObjectDelete). Následně, když ovladač vytvoří novou DMA transakce, volá WdfDmaTransactionCreate vytvořit nový objekt transakce.

Někdy je však výhodné, aby ovladač opakovaně používal transakční objekty. V takových případech ovladač místo WdfObjectDelete volá WdfDmaTransactionRelease.

Předpokládejme například, že ovladač a zařízení musí fungovat, když jsou prostředky paměti počítače nízké. Pokud chcete tento problém s pamětí vyřešit, může ovladač použít následující postup:

  1. Funkce zpětného volání EvtDriverDeviceAdd ovladače může volat WdfDmaTransactionCreate a vytvořit jeden nebo více transakčních objektů. Ovladač uloží popisovače těchto objektů transakce.

  2. Pokaždé, když je ovladač připraven vytvořit a inicializovat novou transakci, volá WdfDmaTransactionCreate. Pokud tato metoda vrátí STATUS_INSUFFICIENT_RESOURCES, ovladač může použít jeden z uložených transakčních objektů.

  3. Pokud ovladač používá jeden z jeho uložených transakčních objektů, měl by znovu použít objekt transakce místo jeho odstranění, když je transakce dokončena. Ovladač nastaví objekt transakce pro opětovné použití voláním WdfDmaTransactionRelease místo WdfObjectDelete.

Ukázka PLX9x5x znovu používá objekty transakcí DMA.