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 va a cancelar. 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 completa ninguna transferencia y el marco no realiza devoluciones de llamada 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 a con una transacción asignada desde un habilitador de DMA versión 2.

Observaciones

El controlador puede llamar a WdfDmaTransactionCancel desde un EvtRequestCancel función de devolución de llamada de evento que proporciona en una llamada a WdfRequestMarkCancelableEx. Para obtener un ejemplo de código que muestre 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 que la llamada a WdfDmaTransactionExecute, pero antes de que el método WdfDmaTransactionExecuteExecute haya iniciado la asignación DMA. Para obtener más información, vea Cancelar transacciones 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 llamar al marco 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 WdmDmaVersionOverride miembro 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 intenta cancelar la transacción.

Requisitos

Requisito Valor
cliente mínimo admitido Windows 8
de la plataforma de destino de Universal
versión mínima de KMDF 1.11
encabezado wdfdmatransaction.h (incluya Wdf.h)
Biblioteca 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