Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Gilt nur für KMDF]
Die WdfDmaTransactionDmaCompletedWithLength Methode benachrichtigt das Framework, dass der DMA-Übertragungsvorgang eines Geräts abgeschlossen ist und die Länge der abgeschlossenen Übertragung bereitstellt.
Syntax
BOOLEAN WdfDmaTransactionDmaCompletedWithLength(
[in] WDFDMATRANSACTION DmaTransaction,
[in] size_t TransferredLength,
[out] NTSTATUS *Status
);
Die Parameter
[in] DmaTransaction
Ein Handle für ein DMA-Transaktionsobjekt, das der Treiber aus einem vorherigen Aufruf von WdfDmaTransactionCreateabgerufen hat.
[in] TransferredLength
Die Anzahl der Bytes, die das Gerät in der aktuellen DMA-Übertragung übertragen hat.
[out] Status
Ein Zeiger auf eine Position, die den Status der DMA-Übertragung empfängt. Weitere Informationen finden Sie im Abschnitt "Hinweise" für WdfDmaTransactionDmaCompleted.
Rückgabewert
WdfDmaTransactionDmaCompletedWithLength gibt FALSE- zurück und Status erhält STATUS_MORE_PROCESSING_REQUIRED, wenn zusätzliche Übertragungen erforderlich sind, um die DMA-Transaktion abzuschließen. Die Methode gibt TRUE- zurück, wenn keine zusätzlichen Übertragungen erforderlich sind.
Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.
Bemerkungen
Wenn Ihr Treiber die WdfDmaTransactionDmaCompletedWithLength--Methode aufruft, beendet das Framework die aktuelle Übertragung und startet ggf. eine neue.
Die WdfDmaTransactionDmaCompletedWithLength--Methode verhält sich genauso wie WdfDmaTransactionDmaCompleted, außer dass Treiber WdfDmaTransactionDmaCompletedWithLength für Geräte aufrufen, die die Anzahl der übertragenen Bytes melden. Das Framework verwendet die gemeldete Byteanzahl, um den Anfang der nächsten DMA-Übertragung für die angegebene DMA-Transaktion zu bestimmen, wenn mehrere Übertragungen erforderlich sind, um die Transaktion abzuschließen.
Weitere Informationen zum Abschließen von DMA-Übertragungen finden Sie unter Abschließen einer DMA-Übertragung.
Beispiele
Das folgende Codebeispiel stammt aus dem PLX9x5x Beispieltreiber. In diesem Beispiel wird WdfDmaTransactionGetCurrentDmaTransferLength- aufgerufen, um die ursprüngliche Länge der aktuellen Übertragung zu ermitteln und dann die tatsächliche Übertragungslänge zu berechnen. Anschließend ruft das Beispiel WdfDmaTransactionDmaCompletedWithLength- auf, um die tatsächliche Übertragungslänge an das Framework zu melden. Wenn die aktuelle Übertragung die letzte für die Transaktion ist, ruft das Beispiel eine private Routine auf, die die E/A-Anforderung abschließt.
BOOLEAN hasTransitioned;
PDMA_TRANSFER_ELEMENT dteVA;
ULONG length;
//
// Use "DMA Clear-Count Mode" to get the complementary
// transferred byte count.
//
length = WdfDmaTransactionGetCurrentDmaTransferLength(dmaTransaction);
dteVA = (PDMA_TRANSFER_ELEMENT) devExt->ReadCommonBufferBase;
while(dteVA->DescPtr.LastElement == FALSE) {
length -= dteVA->TransferSize;
dteVA++;
}
length -= dteVA->TransferSize;
//
// Indicate that this DMA operation has completed.
//
hasTransitioned =
WdfDmaTransactionDmaCompletedWithLength(
dmaTransaction,
length,
&status
);
if (hasTransitioned) {
//
// Complete this DMA transaction.
//
devExt->CurrentReadDmaTransaction = NULL;
PLxReadRequestComplete(
dmaTransaction,
status
);
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | universell |
Minimale KMDF-Version | 1.0 |
Kopfzeile | wdfdmatransaction.h (include Wdf.h) |
Bibliothek | Wdf01000.sys (siehe Framework-Bibliotheksversionsverwaltung.) |
IRQL | <=DISPATCH_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |