IRP_MN_QUERY_BUS_INFORMATION

O gerenciador PnP usa esse IRP para solicitar o tipo e o número da instância do barramento pai de um dispositivo.

Os motoristas de ônibus devem lidar com essa solicitação para seus PDOs (dispositivos filho). Os drivers de função e filtro não lidam com esse IRP.

Valor

0x15

Código principal

IRP_MJ_PNP

Quando enviado

O gerenciador PnP envia esse IRP quando um dispositivo é enumerado.

O gerenciador PnP envia esse IRP no IRQL PASSIVE_LEVEL em um contexto de thread arbitrário.

Parâmetros de Entrada

Nenhum

Parâmetros de saída

Retornado no bloco status de E/S.

Bloco de Status de E/S

Um motorista de ônibus define Irp-IoStatus.Status> como STATUS_SUCCESS ou para um erro apropriado status.

Com êxito, um motorista de ônibus define Irp-IoStatus.Information> como um ponteiro para uma estrutura de PNP_BUS_INFORMATION concluída. (Consulte a seção "Operação" para obter mais informações.) Em um erro, o motorista do ônibus define Irp-IoStatus.Information> como zero.

Os drivers de função e filtro não lidam com esse IRP.

Operação

As informações retornadas em resposta a esse IRP estão disponíveis para a função e filtram drivers para dispositivos no barramento. Drivers de função e filtro podem chamar IoGetDeviceProperty para solicitar um DevicePropertyBusTypeGuid, DevicePropertyLegacyBusType ou DevicePropertyBusNumber. Drivers de função e filtro que dão suporte a dispositivos em mais de um barramento podem usar essas informações para determinar em qual barramento um determinado dispositivo reside.

Se um driver de barramento retornar informações em resposta a esse IRP, ele alocará uma estrutura PNP_BUS_INFORMATION da memória paginada. O gerenciador PnP libera a estrutura quando ela não é mais necessária.

Uma estrutura de PNP_BUS_INFORMATION tem o seguinte formato:

typedef struct _PNP_BUS_INFORMATION {
    GUID BusTypeGuid;
    INTERFACE_TYPE LegacyBusType;
    ULONG BusNumber;
} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;

Os membros da estrutura são definidos da seguinte maneira:

BusTypeGuid
Um motorista de ônibus define BusTypeGuid como o GUID para o tipo do ônibus no qual o dispositivo reside. GUIDs para tipos de barramento padrão são listados em Wdmguid.h. Os gravadores de driver devem gerar GUIDs para outros tipos de barramento usando Uuidgen.

LegacyBusType
Um driver de barramento PnP define LegacyBusType como o INTERFACE_TYPE do barramento pai. Os tipos de interface são definidos em Wdm.h. Alguns ônibus têm um valor INTERFACE_TYPE específico, como PCMCIABus, PCIBus ou PNPISABus. Para outros ônibus, especialmente ônibus mais recentes, como USB, o motorista do ônibus define esse membro como PNPBus.

O LegacyBusType especifica a interface usada para se comunicar com o dispositivo. Isso pode ou não corresponder ao tipo do barramento pai. Por exemplo, a interface de um cardbus cartão que está conectado a um controlador PCI CardBus é PCIBus. No entanto, a interface de um pcmcia cartão em um controlador de CardBus PCI é PCMCIABus.

Número de Barramento
Um motorista de ônibus define BusNumber como um número que distingue o ônibus de outros ônibus do mesmo tipo no computador. O esquema de numeração de ônibus é específico do ônibus. Os números do barramento podem ser virtuais, mas devem corresponder a qualquer numeração usada por interfaces herdadas, como IoReportResourceUsage.

Consulte Plug and Play para obter as regras gerais para lidar com Plug and Play IRPs menores.

Enviando este IRP

Reservado para uso do sistema. Os drivers não devem enviar esse IRP.

Chame IoGetDeviceProperty para obter informações sobre o barramento ao qual um dispositivo está anexado.

Requisitos

parâmetro

Wdm.h (inclua Wdm.h, Ntddk.h ou Ntifs.h)

Confira também

IoGetDeviceProperty