Freigeben über


WdfDmaTransactionDmaCompletedFinal-Funktion (wdfdmatransaction.h)

[Gilt nur für KMDF]

Die WdfDmaTransactionDmaCompletedFinal-Methode benachrichtigt das Framework darüber, dass der DMA-Übertragungsvorgang eines Geräts mit einer Unterlaufbedingung abgeschlossen wurde, und gibt die Länge der abgeschlossenen Übertragung an.

Syntax

BOOLEAN WdfDmaTransactionDmaCompletedFinal(
  [in]  WDFDMATRANSACTION DmaTransaction,
  [in]  size_t            FinalTransferredLength,
  [out] NTSTATUS          *Status
);

Parameter

[in] DmaTransaction

Ein Handle für ein DMA-Transaktionsobjekt, das der Treiber aus einem vorherigen Aufruf von WdfDmaTransactionCreate abgerufen hat.

[in] FinalTransferredLength

Die Anzahl der Bytes, die das Gerät übertragen hat.

[out] Status

Ein Zeiger auf eine Position, die die status der DMA-Übertragung empfängt. Weitere Informationen finden Sie im Abschnitt Hinweise zu WdfDmaTransactionDmaCompleted.

Rückgabewert

WdfDmaTransactionDmaCompletedFinal gibt FALSE zurück, wenn der Treiber einen ungültigen Eingabeparameter bereitstellt. Andernfalls gibt WdfDmaTransactionDmaCompletedFinal immer TRUE zurück, was angibt, dass das Framework nicht versucht, weitere Bytes für die DMA-Transaktion zu übertragen, die der DmaTransaction-Parameter angegeben hat.

Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.

Hinweise

Ein Treiber ruft in der Regel WdfDmaTransactionDmaCompletedFinal innerhalb seines EvtInterruptDpc-Rückrufs auf. Ein Treiber für ein DMA-Gerät im Systemmodus kann WdfDmaTransactionDmaCompletedFinal innerhalb einer EvtDmaTransactionDmaTransferComplete-Ereignisrückruffunktion aufrufen.

Im PLX9x5x-Beispiel ruft der Treiber WdfDmaTransactionDmaCompletedFinal über seine Rückruffunktion EvtProgramDma auf.

Die WdfDmaTransactionDmaCompletedFinal-Methode verhält sich wie WdfDmaTransactionDmaCompleted, mit der Ausnahme, dass Treiber in der Regel WdfDmaTransactionDmaCompletedFinal aufrufen, wenn die Hardware eine Unterlaufbedingung meldet. Eine Unterlaufbedingung bedeutet, dass die Hardware nicht alle Bytes übertragen konnte, die für die letzte DMA-Übertragung angegeben wurden. Ein Aufruf von WdfDmaTransactionDmaCompletedFinal verhindert, dass das Framework weitere DMA-Übertragungen für die angegebene DMA-Transaktion startet.

Wenn Ihr Treiber WdfDmaTransactionDmaCompletedFinal aufruft, gibt der Treiber die Anzahl der übertragenen Bytes an. Der Rückgabewert ist immer TRUE, da das Framework nicht versucht, weitere Bytes für die angegebene Transaktion zu übertragen.

Weitere Informationen zum Abschließen von DMA-Übertragungen finden Sie unter Abschließen einer DMA-Übertragung.

Beispiele

Im folgenden Codebeispiel wird das Framework darüber benachrichtigt, dass der DMA-Übertragungsvorgang eines Geräts mit einer Unterlaufbedingung abgeschlossen wurde.

BOOLEAN  success;
NTSTATUS  status;

success = WdfDmaTransactionDmaCompletedFinal(
                                             DmaTransaction,
                                             transferLength,
                                             &status
                                             );

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
Kopfzeile wdfdmatransaction.h (einschließen von Wdf.h)
Bibliothek Wdf01000.sys (siehe Versionierung der Frameworkbibliothek.)
IRQL <=DISPATCH_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Weitere Informationen

WdfDmaTransactionCreate

WdfDmaTransactionDmaCompleted

WdfDmaTransactionDmaCompletedWithLength