Funzione WdfDmaTransactionCancel (wdfdmatransaction.h)

[Si applica solo a KMDF]

Il metodo WdfDmaTransactionCancel tenta di annullare una transazione DMA in attesa dell'allocazione dei registri mappa.

Sintassi

BOOLEAN WdfDmaTransactionCancel(
  [in] WDFDMATRANSACTION DmaTransaction
);

Parametri

[in] DmaTransaction

Handle per l'oggetto transazione DMA che rappresenta la transazione annullata. Questa transazione deve essere già stata inizializzata dal driver.

Valore restituito

WdfDmaTransactionCancel restituisce TRUE se il framework annulla correttamente l'allocazione del registro mappa. In questo caso, nessun trasferimento viene completato e il framework non effettua callback DMA aggiuntivi nella transazione finché non viene reinizializzazione.

Il metodo restituisce FALSE se un altro thread sta già elaborando questa transazione o se il driver non ha ancora chiamato WdfDmaTransactionExecute. Nel primo caso, il framework sta attualmente chiamando o chiamerà EvtProgramDma o EvtReserveDma. A questo punto, un driver che ha specificato un profilo DMA in modalità sistema potrebbe chiamare WdfDmaTransactionStopSystemTransfer.

Il metodo restituisce anche FALSE se chiamato con una transazione allocata da un abilitatore DMA versione 2.

Commenti

Il driver potrebbe chiamare WdfDmaTransactionCancel da una funzione di callback evento EvtRequestCancel fornita in una chiamata a WdfRequestMarkCancelableEx. Per un esempio di codice che illustra come eseguire questa operazione, vedere WdfDmaTransactionStopSystemTransfer.

Il driver potrebbe anche chiamare WdfDmaTransactionCancel da una funzione di callback degli eventi EvtIoCanceledOnQueue .

L'annullamento può avere esito positivo solo se la chiamata a WdfDmaTransactionCancel si verifica dopo la chiamata a WdfDmaTransactionExecute, ma prima che il metodo WdfDmaTransactionExecute abbia avviato l'allocazione DMA. Per altre informazioni, vedere Annullamento delle transazioni DMA.

Il driver deve chiamare WdfDmaTransactionCancel dopo aver chiamato WdfDmaTransactionInitialize, ma prima di chiamare WdfDmaTransactionRelease o WdfObjectDelete per eliminare l'oggetto transazione.

Non chiamare WdfDmaTransactionCancel dopo che il framework ha chiamato EvtProgramDma o EvtReserveDma.

Un driver deve richiedere l'uso di DMA versione 3 prima di chiamare WdfDmaTransactionCancel. Per selezionare DMA versione 3, impostare il membro WdmDmaVersionOverride di WDF_DMA_ENABLER_CONFIG su 3.

Se un driver chiama WdfDmaTransactionCancel in una transazione allocata da un abilitatore DMA versione 2, il framework genera un errore di verifica e WdfDmaTransactionCancel restituisce FALSE. In questo caso, non viene eseguito alcun tentativo di annullare la transazione.

Requisiti

Requisito Valore
Client minimo supportato Windows 8
Piattaforma di destinazione Universale
Versione KMDF minima 1.11
Intestazione wdfdmatransaction.h (include Wdf.h)
Libreria Wdf01000.sys (vedere Framework Library Versioning).
IRQL <=DISPATCH_LEVEL
Regole di conformità DDI DriverCreate(kmdf)

Vedi anche

EvtProgramDma

EvtReserveDma

WdfDmaTransactionStopSystemTransfer