Compartilhar via


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)

Confira também

DEVICE_DESCRIPTION

DMA_ADAPTER

GUID_BUS_INTERFACE_STANDARD

GetBusData

GetDmaAdapter

INTERFACE

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG

IRP_MN_WRITE_CONFIG

InterfaceDereference

InterfaceReference

IoGetDmaAdapter

SetBusData

TranslateBusAddress