Wiederverwendung von DMA-Transaktionsobjekten

[Gilt nur für KMDF]

Nachdem ein Treiber alle DMA-Übertragungen verarbeitet hat, die einer DMA-Transaktion zugeordnet sind, kann der Treiber das Transaktionsobjekt löschen oder wiederverwenden. In der Regel löscht die EvtInterruptDpc-Rückruffunktion des Treibers das Transaktionsobjekt (durch Aufrufen von WdfObjectDelete). Wenn der Treiber anschließend eine neue DMA-Transaktion erstellt, ruft er WdfDmaTransactionCreate auf , um ein neues Transaktionsobjekt zu erstellen.

Manchmal ist es jedoch vorteilhaft für den Treiber, Transaktionsobjekte wiederzuverwenden. In solchen Fällen ruft der Treiber WdfDmaTransactionRelease anstelle von WdfObjectDelete auf.

Angenommen, Ihr Treiber und Ihr Gerät müssen funktionieren, wenn die Arbeitsspeicherressourcen des Computers niedrig sind. Um dieses Speicherproblem zu behandeln, kann Ihr Treiber das folgende Verfahren verwenden:

  1. Die Rückruffunktion EvtDriverDeviceAdd des Treibers kann WdfDmaTransactionCreate aufrufen, um ein oder mehrere Transaktionsobjekte zu erstellen. Der Treiber speichert die Handles in diesen Transaktionsobjekten.

  2. Jedes Mal, wenn der Treiber bereit ist, eine neue Transaktion zu erstellen und zu initialisieren, ruft er WdfDmaTransactionCreate auf. Wenn diese Methode STATUS_INSUFFICIENT_RESOURCES zurückgibt, kann der Treiber eines der gespeicherten Transaktionsobjekte verwenden.

  3. Wenn der Treiber eines seiner gespeicherten Transaktionsobjekte verwendet, sollte er das Transaktionsobjekt wiederverwenden, anstatt es zu löschen, wenn die Transaktion abgeschlossen ist. Der Treiber richtet das Transaktionsobjekt für die Wiederverwendung ein, indem er WdfDmaTransactionRelease anstelle von WdfObjectDelete aufruft.

Im PLX9x5x-Beispiel werden DMA-Transaktionsobjekte wiederverwendet.