Função WdfDmaTransactionSetDeviceAddressOffset (wdfdmatransaction.h)
[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 AMD deve ser executado.
Retornar valor
Nenhum
Comentários
WdfDmaTransactionSetDeviceAddressOffset deve ser usado com um habilitador de DMA que especifica um perfil de DMA no modo de sistema.
Os drivers baseados em estrutura chamam WdfDmaTransactionSetDeviceAddressOffset depois de inicializar uma transação de DMA e antes de executá-la.
Um driver pode usar esse método para acessar vários registros dentro do arquivo de registro de um dispositivo.
Por exemplo, um driver pode usar o AMD 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 a Windows 8, o verificador da estrutura relatará um erro.
Exemplos
O exemplo de código a seguir inicializa uma transação de DMA. Em seguida, ele define o deslocamento do registro que o controlador de DMA do sistema acessará, fornece uma rotina de retorno de chamada de conclusão de transferência e executa a transação de 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 | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 |
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.11 |
Cabeçalho | wdfdmatransaction.h (include Wdf.h) |
Biblioteca | Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.) |
IRQL | <=DISPATCH_LEVEL |
Regras de conformidade da DDI | DriverCreate(kmdf) |