Freigeben über


WdfDmaTransactionCancel-Funktion (wdfdmatransaction.h)

[Gilt nur für KMDF]

Die WdfDmaTransactionCancel Methode versucht, eine DMA-Transaktion abzubrechen, die auf die Zuordnung von Kartenregistern wartet.

Syntax

BOOLEAN WdfDmaTransactionCancel(
  [in] WDFDMATRANSACTION DmaTransaction
);

Die Parameter

[in] DmaTransaction

Ein Handle für das DMA-Transaktionsobjekt, das die Transaktion darstellt, die abgebrochen wird. Diese Transaktion muss bereits vom Treiber initialisiert worden sein.

Rückgabewert

WdfDmaTransactionCancel TRUE zurück, wenn das Framework die Zuordnung des Kartenregisters erfolgreich abbricht. In diesem Fall werden keine Übertragungen abgeschlossen, und das Framework führt keine zusätzlichen DMA-Rückrufe für die Transaktion aus, bis sie erneut gestartet wird.

Die Methode gibt FALSE zurück, wenn bereits ein anderer Thread diese Transaktion verarbeitet, oder wenn der Treiber noch nicht WdfDmaTransactionExecuteaufgerufen wurde. Im ersten Fall ruft das Framework derzeit EvtProgramDma oder EvtReserveDmaauf oder ruft es auf. An diesem Punkt kann ein Treiber, der ein DMA-Profil im Systemmodus angegeben hat, WdfDmaTransactionStopSystemTransferaufrufen.

Die Methode gibt auch FALSE zurück, wenn eine Transaktion aufgerufen wird, die von einem DMA Version 2-Enabler zugewiesen wurde.

Bemerkungen

Der Treiber ruft möglicherweise WdfDmaTransactionCancel von einer EvtRequestCancel Ereignisrückruffunktion auf, die in einem Aufruf von WdfRequestMarkCancelableExbereitgestellt wird. Ein Codebeispiel zur Vorgehensweise finden Sie unter WdfDmaTransactionStopSystemTransfer.

Der Treiber ruft möglicherweise auch WdfDmaTransactionCancel von einer EvtIoCanceledOnQueue Ereignisrückruffunktion auf.

Der Abbruch kann nur erfolgreich ausgeführt werden, wenn der Aufruf von WdfDmaTransactionCancel erfolgt, nachdem der Aufruf von WdfDmaTransactionExecuteerfolgt, aber bevor die WdfDmaTransactionExecute Methode die DMA-Zuordnung gestartet hat. Weitere Informationen finden Sie unter Abbrechen von DMA-Transaktionen.

Der Treiber muss WdfDmaTransactionCancel- aufrufen, nachdem WdfDmaTransactionInitializeaufgerufen wurde, jedoch vor dem Aufrufen WdfDmaTransactionRelease oder WdfObjectDelete, um das Transaktionsobjekt zu löschen.

Rufen Sie WdfDmaTransactionCancel nicht auf, nachdem das Framework EvtProgramDma oder EvtReserveDmaaufgerufen hat.

Ein Treiber muss die Verwendung von DMA Version 3 vor dem Aufrufen von WdfDmaTransactionCancelanfordern. Um DMA Version 3 auszuwählen, legen Sie den WdmDmaVersionOverride Mitglied von WDF_DMA_ENABLER_CONFIG auf 3 fest.

Wenn ein Treiber WdfDmaTransactionCancel für eine Transaktion aufruft, die von einem DMA Version 2-Enabler zugewiesen wurde, generiert das Framework einen Prüffehler und WdfDmaTransactionCancel FALSE zurückgibt. In diesem Fall wird kein Versuch unternommen, die Transaktion abzubrechen.

Anforderungen

Anforderung Wert
Unterstützter Client (Mindestversion) Windows 8
Zielplattform universell
Minimale KMDF-Version 1.11
Kopfzeile wdfdmatransaction.h (include Wdf.h)
Bibliothek Wdf01000.sys (siehe Framework-Bibliotheksversionsverwaltung.)
IRQL <=DISPATCH_LEVEL
DDI-Complianceregeln DriverCreate(kmdf)

Siehe auch

EvtProgramDma

EvtReserveDma

WdfDmaTransactionStopSystemTransfer