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.
void WdfDmaTransactionSetDeviceAddressOffset(
[in] WDFDMATRANSACTION DmaTransaction,
[in] ULONG Offset
);
[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.
None
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.
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
);
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) |