Función WdfDmaTransactionSetDeviceAddressOffset (wdfdmatransaction.h)

[Solo se aplica a KMDF]

El método WdfDmaTransactionSetDeviceAddressOffset especifica el desplazamiento del registro al que accederá el controlador DMA del sistema al realizar la operación DMA.

Sintaxis

void WdfDmaTransactionSetDeviceAddressOffset(
  [in] WDFDMATRANSACTION DmaTransaction,
  [in] ULONG             Offset
);

Parámetros

[in] DmaTransaction

Identificador de un objeto de transacción DMA que especifica la transacción que se va a modificar.

[in] Offset

Desplazamiento del registro, desde deviceAddress especificado en WDF_DMA_SYSTEM_PROFILE_CONFIG, hacia o desde el que se debe realizar DMA.

Valor devuelto

None

Observaciones

WdfDmaTransactionSetDeviceAddressOffset debe usarse con un habilitador DMA que especifique un perfil DMA en modo sistema.

Los controladores basados en marcos llaman a WdfDmaTransactionSetDeviceAddressOffset después de inicializar una transacción DMA y antes de ejecutarla.

Un controlador puede usar este método para acceder a varios registros dentro del archivo de registro de un dispositivo.

Por ejemplo, un controlador podría usar DMA para acceder a registros de lectura y escritura independientes en el archivo de registro de un dispositivo.

Para ello, el controlador especifica la dirección base del archivo de registro del dispositivo al configurar el habilitador y, a continuación, establece el desplazamiento del registro de lectura o escritura según sea necesario antes de ejecutar la transacción.

Si el controlador llama a este método en un sistema operativo anterior a Windows 8, el comprobador del marco notifica un error.

Ejemplos

En el ejemplo de código siguiente se inicializa una transacción DMA. A continuación, establece el desplazamiento del registro al que accederá el controlador DMA del sistema, proporciona una rutina de devolución de llamada de finalización de transferencia y ejecuta la transacción DMA.

status = WdfDmaTransactionInitialize(
                                     RequestContext->DmaTransaction,
                                     EvtProgramDma,
                                     direction,
                                     mdl,
                                     startingVa,
                                     length
                                     );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

WdfDmaTransactionSetDeviceAddressOffset(
                                        RequestContext->DmaTransaction,
                                        READ_DATA_REGISTER_OFFSET
                                        );

WdfDmaTransactionSetTransferCompleteCallback(
                                             RequestContext->DmaTransaction,
                                             EvtDmaTransactionDmaTransferComplete,
                                             RequestContext
                                             );

status = WdfDmaTransactionExecute(
                                  RequestContext->DmaTransaction, 
                                  RequestContext );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

return status;

Complete:

WdfDmaTransactionRelease(
                         RequestContext->DmaTransaction
                         );

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

WDF_DMA_SYSTEM_PROFILE_CONFIG