Função IoGetDmaAdapter (wdm.h)

A rotina IoGetDmaAdapter retorna um ponteiro para a estrutura do adaptador de DMA para um objeto de dispositivo físico.

Sintaxe

_DMA_ADAPTER * IoGetDmaAdapter(
  [in, optional] PDEVICE_OBJECT      PhysicalDeviceObject,
  [in]           _DEVICE_DESCRIPTION *DeviceDescription,
  [out]          PULONG              NumberOfMapRegisters
);

Parâmetros

[in, optional] PhysicalDeviceObject

Ponteiro para o objeto de dispositivo físico para o dispositivo que solicita a estrutura do adaptador DMA.

[in] DeviceDescription

Ponteiro para uma estrutura DEVICE_DESCRIPTION , que descreve os atributos do dispositivo físico. Independentemente da versão definida na estrutura DEVICE_DESCRIPTION, essa função sempre retorna DMA_ADAPTER->Version == 1.

[out] NumberOfMapRegisters

Um ponteiro para, na saída, o número máximo de registros de mapa que o driver pode alocar para qualquer operação de transferência de DMA.

Retornar valor

IoGetDmaAdapter retorna um ponteiro para uma estrutura DMA_ADAPTER , que contém ponteiros para funções que dão suporte a operações de DMA definidas pelo sistema. Se a estrutura não puder ser alocada, a rotina retornará NULL. Consulte o comentário da versão acima na descrição do parâmetro DeviceDescription .

Comentários

Antes de chamar essa rotina, um driver deve inicializar zero a estrutura de DEVICE_DESCRIPTION apontada por DeviceDescription e, em seguida, adicionar as informações relevantes para seu dispositivo a essa estrutura.

Em caso de êxito, o valor retornado da rotina aponta para uma estrutura DMA_ADAPTER . Essa estrutura contém um ponteiro para uma estrutura DMA_OPERATIONS , que é uma tabela de ponteiros para funções que o driver pode usar posteriormente para executar operações de DMA. A versão dessa estrutura retornada pela rotina é determinada da seguinte maneira:

  • Se o driver definir o membro Version da estrutura DEVICE_DESCRIPTION como DEVICE_DESCRIPTION_VERSION ou DEVICE_DESCRIPTION_VERSION1, a estrutura DMA_ADAPTER retornada apontará para a versão 1 da estrutura DMA_OPERATIONS .

  • Se o driver definir Version = DEVICE_DESCRIPTION_VERSION2, a estrutura DMA_ADAPTER retornada apontará para a versão 2 da estrutura DMA_OPERATIONS se houver suporte para a versão 2; caso contrário, a rotina retornará NULL. Os drivers devem marcar para ver se a versão 2 tem suporte antes de tentar usar qualquer função da versão 2.

  • Se o driver definir Version = DEVICE_DESCRIPTION_VERSION3, a estrutura DMA_ADAPTER retornada apontará para a versão 3 da estrutura DMA_OPERATIONS se houver suporte para a versão 3; caso contrário, a rotina retornará NULL. Os drivers devem marcar para ver se a versão 3 tem suporte antes de tentar usar qualquer função da versão 3. A versão 3 tem suporte a partir do Windows 8.

Um driver PnP chama IoGetDmaAdapter quando sua rotina AddDevice é chamada ou quando lida com uma solicitação de IRP_MN_START_DEVICE PnP para um dispositivo. Esse IRP inclui informações sobre os recursos de hardware do dispositivo que o driver deve fornecer na estrutura DeviceDescription .

O chamador usa o membro MaximumLength na estrutura DeviceDescription para indicar o número ideal de registros de mapa que ele pode usar. O gerenciador de E/S tentará alocar registros de mapa suficientes para acomodar uma operação de transferência de DMA desse tamanho máximo. Na saída, o gerenciador de E/S retorna, no parâmetro NumberOfMapRegisters , o número de registros de mapa que ele aloca. Os drivers devem marcar o valor retornado; não há garantia de que um driver receberá o mesmo número de registros de mapa solicitados.

Para liberar o objeto do adaptador, o driver deve chamar PutDmaAdapter por meio do ponteiro retornado na estrutura DMA_ADAPTER .

Conforme descrito anteriormente, IoGetDmaAdapter retornará NULL se não der suporte à versão da estrutura DMA_ADAPTER especificada por DeviceDescription-Version>. Os chamadores devem confiar nesse comportamento para determinar se a rotina retorna um ponteiro para a versão solicitada da estrutura DMA_ADAPTER . Quando IoGetDmaAdapter retorna um ponteiro para a versão 1 ou versão 2 ou 3 da estrutura DMA_ADAPTER , o membro Version dessa estrutura é sempre definido como 1. Portanto, o chamador não pode usar o membro Version da estrutura DMA_ADAPTER retornada para distinguir entre as versões 1, 2 e 3 dessa estrutura.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade da DDI HwStorPortProhibitedDIs(storport), IrqlIoPassive5(wdm), PowerIrpDDis(wdm)

Confira também

AddDevice

DEVICE_DESCRIPTION

DMA_ADAPTER

DMA_OPERATIONS

IRP_MN_START_DEVICE

PutDmaAdapter