DMA_COMPLETION_ROUTINE función de devolución de llamada (wdm.h)

La rutina de devolución de llamada DmaCompletionRoutine notifica al controlador que solicitó previamente una transferencia DMA del sistema que esta transferencia se ha completado.

Sintaxis

DMA_COMPLETION_ROUTINE DmaCompletionRoutine;

void DmaCompletionRoutine(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PVOID CompletionContext,
  [in] DMA_COMPLETION_STATUS Status
)
{...}

Parámetros

[in] DmaAdapter

Puntero a una estructura de DMA_ADAPTER . Esta estructura es el objeto de adaptador que representa el canal DMA del sistema del controlador.

[in] DeviceObject

Puntero a una estructura de DEVICE_OBJECT . Esta estructura es el objeto de dispositivo físico (PDO) que representa el dispositivo de destino para la operación DMA solicitada.

[in] CompletionContext

Puntero a un contexto determinado por el controlador para la rutina DmaCompletionRoutine . Este contexto es el valor del parámetro CompletionContext que el controlador pasó anteriormente a la llamada MapTransferEx que inició la transferencia DMA del sistema.

[in] Status

Estado de finalización de la transferencia DMA. Este parámetro es un valor de enumeración DMA_COMPLETION_STATUS que indica si la transferencia DMA se completó correctamente.

Valor devuelto

None

Observaciones

Como opción, un controlador puede implementar una rutina DmaCompletionRoutine . Cuando el controlador solicita una transferencia DMA del sistema, el controlador puede proporcionar un puntero a esta rutina con la solicitud. Una vez completada la transferencia DMA, se llama automáticamente a la rutina DmaCompletionRoutine para notificar al controlador.

Solo se llama a la rutina DmaCompletionRoutine de un controlador si la transferencia DMA solicitada por el controlador usa un controlador DMA del sistema que puede generar una interrupción después de que se complete una transferencia DMA. Un controlador que usa un dispositivo DMA maestro de bus o que usa un controlador DMA del sistema que no genera interrupciones, debe usar otros medios para determinar cuándo se completa una transferencia DMA. Por ejemplo, este controlador podría usar una interrupción del temporizador para sondear periódicamente el estado de la transferencia DMA.

Un controlador puede proporcionar un puntero a una rutina DmaCompletionRoutine como parámetro opcional para la rutina MapTransferEx .

Ejemplos

Para definir una rutina de devolución de llamada DmaCompletionRoutine , primero debe proporcionar una declaración de función que identifique el tipo de rutina de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una rutina de devolución de llamada DmaCompletionRoutine denominada MyDmaCompletionRoutine, use el tipo DMA_COMPLETION_ROUTINE como se muestra en este ejemplo de código:

DMA_COMPLETION_ROUTINE MyDmaCompletionRoutine;

A continuación, implemente la rutina de devolución de llamada de la siguiente manera:


_Use_decl_annotations_
VOID
  MyDmaCompletionRoutine(
    PDMA_ADAPTER DmaAdapter,
    PDEVICE_OBJECT DeviceObject,
    PVOID CompletionContext,
    DMA_COMPLETION_STATUS Status
    )
  {
      // Function body
  }

El tipo de función DMA_COMPLETION_ROUTINE se define en el archivo de encabezado Wdm.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función DMA_COMPLETION_ROUTINE en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declarar funciones mediante tipos de roles de función para controladores WDM. Para obtener información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.

Requisitos

   
Cliente mínimo compatible Disponible a partir de Windows 8.
Plataforma de destino Escritorio
Header wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
IRQL Se llama en DISPATCH_LEVEL.

Consulte también

BuildScatterGatherListEx

DEVICE_OBJECT

DMA_ADAPTER

DMA_COMPLETION_STATUS

DMA_OPERATIONS

GetScatterGatherListEx

MapTransferEx