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.
A rotina IoGetDmaAdapter retorna um ponteiro para a estrutura do adaptador 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.
Valor de retorno
IoGetDmaAdapter retorna um ponteiro para uma estrutura de 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.
Observações
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.
Com o sucesso, o valor retornado da rotina aponta para uma estrutura DMA_ADAPTER. Essa estrutura contém um ponteiro para uma estrutura de 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 versão da estrutura DEVICE_DESCRIPTION como DEVICE_DESCRIPTION_VERSION ou DEVICE_DESCRIPTION_VERSION1, a estrutura DMA_ADAPTER retornada aponta para a versão 1 da estrutura DMA_OPERATIONS.
Se o driver definir Versão = DEVICE_DESCRIPTION_VERSION2, a estrutura de 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 verificar se há suporte para a versão 2 antes de tentar usar qualquer função versão 2.
Se o driver definir Versão = DEVICE_DESCRIPTION_VERSION3, a estrutura de 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 verificar se há suporte para a versão 3 antes de tentar usar qualquer função versão 3. A versão 3 tem suporte a partir do Windows 8.
Um driver PnP chama IoGetDmaAdapter quando sua rotina de 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 de 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 gerente 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 verificar o valor retornado; não há nenhuma 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 pelo 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 contar com esse 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 versão 3 da estrutura de DMA_ADAPTER, o membro da versão dessa estrutura é sempre definido como 1. Portanto, o chamador não pode usar a versão membro da estrutura de DMA_ADAPTER retornada para distinguir entre as versões 1, 2 e 3 dessa estrutura.
Requisitos
| Requisito | Valor |
|---|---|
| da Plataforma de Destino | Universal |
| cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
| biblioteca | NtosKrnl.lib |
| de DLL | NtosKrnl.exe |
| IRQL | PASSIVE_LEVEL |
| regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), IrqlIoPassive5(wdm), PowerIrpDDis(wdm) |