Compartir a través de


Función WdfDmaTransactionCancel (wdfdmatransaction.h)

[Solo se aplica a KMDF]

El método WdfDmaTransactionCancel intenta cancelar una transacción DMA que está esperando la asignación de registros de mapa.

Sintaxis

BOOLEAN WdfDmaTransactionCancel(
  [in] WDFDMATRANSACTION DmaTransaction
);

Parámetros

[in] DmaTransaction

Identificador del objeto de transacción DMA que representa la transacción que se está cancelando. El controlador debe haber inicializado esta transacción.

Valor devuelto

WdfDmaTransactionCancel devuelve TRUE si el marco cancela correctamente la asignación del registro de asignación. En este caso, no se completan las transferencias y el marco no realiza devoluciones de llamada de DMA adicionales en la transacción hasta que se vuelve a iniciar.

El método devuelve FALSE si otro subproceso ya está procesando esta transacción o si el controlador aún no ha llamado a WdfDmaTransactionExecute. En el primer caso, el marco está llamando actualmente o llamará a EvtProgramDma o EvtReserveDma. En este momento, un controlador que especificó un perfil DMA en modo del sistema podría llamar a WdfDmaTransactionStopSystemTransfer.

El método también devuelve FALSE si se llama con una transacción asignada desde un habilitador de DMA versión 2.

Comentarios

El controlador puede llamar a WdfDmaTransactionCancel desde una función de devolución de llamada de evento EvtRequestCancel que proporciona en una llamada a WdfRequestMarkCancelableEx. Para obtener un ejemplo de código que muestra cómo hacerlo, vea WdfDmaTransactionStopSystemTransfer.

El controlador también puede llamar a WdfDmaTransactionCancel desde una función de devolución de llamada de evento EvtIoCanceledOnQueue .

La cancelación solo puede realizarse correctamente si la llamada a WdfDmaTransactionCancel se produce después de la llamada a WdfDmaTransactionExecute, pero antes de que el método WdfDmaTransactionExecute haya iniciado la asignación DMA. Para obtener más información, consulte Cancelación de transacciones de DMA.

El controlador debe llamar a WdfDmaTransactionCancel después de llamar a WdfDmaTransactionInitialize, pero antes de llamar a WdfDmaTransactionRelease o WdfObjectDelete para eliminar el objeto de transacción.

No llame a WdfDmaTransactionCancel después de que el marco haya llamado a EvtProgramDma o EvtReserveDma.

Un controlador debe solicitar el uso de DMA versión 3 antes de llamar a WdfDmaTransactionCancel. Para seleccionar DMA versión 3, establezca el miembro WdmDmaVersionOverride de WDF_DMA_ENABLER_CONFIG en 3.

Si un controlador llama a WdfDmaTransactionCancel en una transacción asignada desde un habilitador de DMA versión 2, el marco genera un error de comprobador y WdfDmaTransactionCancel devuelve FALSE. En este caso, no se realiza ningún intento de cancelar la transacción.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8
Plataforma de destino Universal
Versión mínima de KMDF 1.11
Encabezado wdfdmatransaction.h (incluya Wdf.h)
Library Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos).
IRQL <=DISPATCH_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf)

Consulte también

EvtProgramDma

EvtReserveDma

WdfDmaTransactionStopSystemTransfer