estrutura BUS_INTERFACE_STANDARD (wdm.h)
A estrutura de interface BUS_INTERFACE_STANDARD permite que os drivers de dispositivo façam chamadas diretas para rotinas de motorista de ônibus pai. Essa estrutura define a interface GUID_BUS_INTERFACE_STANDARD .
Sintaxe
typedef struct _BUS_INTERFACE_STANDARD {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
PGET_DMA_ADAPTER GetDmaAdapter;
PGET_SET_DEVICE_DATA SetBusData;
PGET_SET_DEVICE_DATA GetBusData;
} BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD;
Membros
Size
O tamanho, em bytes, dessa estrutura.
Version
A versão da interface definida pelo driver.
Context
Um ponteiro para informações de contexto específicas da interface.
InterfaceReference
Um ponteiro para uma rotina InterfaceReference que incrementa a contagem de referência da interface.
InterfaceDereference
Um ponteiro para uma rotina InterfaceDereference que diminui a contagem de referência da interface.
TranslateBusAddress
Um ponteiro para uma rotina TranslateBusAddress que converte endereços no barramento pai para endereços lógicos.
GetDmaAdapter
Um ponteiro para uma rotina GetDmaAdapter que retorna uma estrutura do adaptador DMA (DMA_ADAPTER) para o dispositivo de destino.
SetBusData
Um ponteiro para uma rotina SetBusData que grava dados no espaço de configuração do dispositivo.
GetBusData
Um ponteiro para uma rotina GetBusData que lê dados do espaço de configuração do dispositivo.
Comentários
A estrutura BUS_INTERFACE_STANDARD é uma extensão da estrutura interface .
Algumas operações em um dispositivo são reservadas para o driver de ônibus pai do dispositivo. Essas operações podem incluir o acesso ao espaço de configuração específico do dispositivo de um barramento ou a programação de um controlador de DMA.
Para ler ou gravar no espaço de configuração de um dispositivo, um driver de dispositivo deve contar com a agência do motorista do ônibus de duas maneiras:
Enviando os pacotes de solicitação de E/S (IRPs) IRP_MN_READ_CONFIG e IRP_MN_WRITE_CONFIG para o motorista do ônibus.
Obtendo uma interface do motorista do ônibus. Em seguida, o driver de dispositivo pode acessar o espaço de configuração do dispositivo fazendo chamadas diretas para as rotinas do driver de barramento fornecidas pela estrutura de interface BUS_INTERFACE_STANDARD . Suas rotinas de membro, GetBusData e SetBusData, podem ser usadas para ler e gravar no espaço de configuração de um dispositivo, respectivamente.
Para obter mais informações sobre as maneiras de acessar o espaço de configuração, consulte Acessando o espaço de configuração do dispositivo.
Alguns tipos de dispositivos, como um dispositivo de armazenamento de domínio de barramento, têm controladores de DMA a bordo. No entanto, os drivers de dispositivo para esses dispositivos não podem programar esses controladores de DMA diretamente. Em vez disso, eles devem contar com rotinas fornecidas pelo motorista do ônibus pai. Para que um driver de dispositivo programe o controlador de DMA para seu dispositivo, ele deve primeiro solicitar um objeto de adaptador do driver de barramento pai. O objeto do adaptador contém as rotinas fornecidas pelo driver de barramento que podem ser usadas para programar o controlador de DMA do dispositivo. Os drivers de dispositivo devem contar com o BUS_INTERFACE_STANDARD, direta ou indiretamente, para obter o objeto do adaptador.
Se o driver estiver sendo executado em IRQL = PASSIVE_LEVEL, ele deverá obter o objeto do adaptador DMA de um dispositivo chamando IoGetDmaAdapter. IoGetDmaAdapter detecta se o motorista do barramento dá suporte à interface BUS_INTERFACE_STANDARD . Se isso acontecer, IoGetDmaAdapter chamará a rotina apontada pelo membro GetDmaAdapter dessa interface para obter o objeto do adaptador. Caso contrário, IoGetDmaAdapter chamará uma rotina herdada equivalente.
No entanto, se um driver precisar obter um objeto adaptador durante a execução em IRQL >= DISPATCH_LEVEL, ele não poderá fazê-lo com IoGetDmaAdapter. Nesse caso, o driver deve consultar a interface BUS_INTERFACE_STANDARD enquanto ainda estiver em IRQL = PASSIVE_LEVEL usando IRP_MN_QUERY_INTERFACE.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |