Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
[Aplica-se somente ao KMDF]
O método WdfDmaTransactionSetDeviceAddressOffset especifica o deslocamento do registro que o controlador DMA do sistema acessará ao executar a operação DMA.
Sintaxe
VOID WdfDmaTransactionSetDeviceAddressOffset(
[in] WDFDMATRANSACTION DmaTransaction,
[in] ULONG Offset
);
Parâmetros
[in] DmaTransaction
Um identificador para um objeto de transação DMA que especifica a transação a ser modificada.
[in] Offset
O deslocamento do registro, do DeviceAddress especificado em WDF_DMA_SYSTEM_PROFILE_CONFIG, para ou do qual o DMA deve ser executado.
Valor de retorno
Nenhum
Observações
WdfDmaTransactionSetDeviceAddressOffset deve ser usada com um habilitador de DMA que especifica um perfil DMA no modo sistema.
Os drivers baseados em estrutura chamam WdfDmaTransactionSetDeviceAddressOffset depois de inicializar uma transação DMA e antes de executá-la.
Um driver pode usar esse método para acessar vários registros no arquivo de registro de um dispositivo.
Por exemplo, um driver pode usar o DMA para acessar registros de leitura e gravação separados no arquivo de registro de um dispositivo.
Para fazer isso, o driver especifica o endereço base do arquivo de registro do dispositivo ao configurar o habilitador e define o deslocamento do registro de leitura ou gravação conforme necessário antes de executar a transação.
Se o driver chamar esse método em um sistema operacional anterior ao Windows 8, o verificador da estrutura relatará um erro.
Exemplos
O exemplo de código a seguir inicializa uma transação DMA. Em seguida, ele define o deslocamento do registro que o controlador DMA do sistema acessará, fornece uma rotina de retorno de chamada de conclusão de transferência e executa a transação 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
);