Compartilhar via


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)

Confira também

WDF_DMA_SYSTEM_PROFILE_CONFIG