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