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) |