IRP_MN_QUERY_BUS_INFORMATION

El administrador de PnP usa este IRP para solicitar el tipo y el número de instancia de un bus primario de un dispositivo.

Los controladores de autobús deben controlar esta solicitud para sus dispositivos secundarios (PPO). Los controladores de función y filtro no controlan este IRP.

Valor

0x15

Código principal

IRP_MJ_PNP

Cuándo se envió

El administrador de PnP envía este IRP cuando se enumera un dispositivo.

El administrador de PnP envía este IRP a IRQL PASSIVE_LEVEL en un contexto de subproceso arbitrario.

Parámetros de entrada

Ninguno

Parámetros de salida

Se devuelve en el bloque de estado de E/S.

Bloque de estado de entrada/salida

Un controlador de bus establece Irp-IoStatus.Status> en STATUS_SUCCESS o en un estado de error adecuado.

Si se ejecuta correctamente, un controlador de autobús establece Irp-IoStatus.Information> en un puntero a una estructura de PNP_BUS_INFORMATION completada. (Consulte la sección "Operación" para obtener más información). En un error, el controlador de bus establece Irp-IoStatus.Information> en cero.

Los controladores de función y filtro no controlan este IRP.

Operación

La información devuelta en respuesta a este IRP está disponible para la función y filtrar los controladores de los dispositivos del bus. Los controladores de función y filtro pueden llamar a IoGetDeviceProperty para solicitar un DevicePropertyBusTypeGuid, DevicePropertyLegacyBusType o DevicePropertyBusNumber. Los controladores de función y filtro que admiten dispositivos en más de un bus pueden usar esta información para determinar en qué bus reside un dispositivo determinado.

Si un controlador de bus devuelve información en respuesta a este IRP, asigna una estructura de PNP_BUS_INFORMATION de la memoria paginada. El administrador de PnP libera la estructura cuando ya no es necesaria.

Una estructura de PNP_BUS_INFORMATION tiene el formato siguiente:

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

Los miembros de la estructura se definen de la siguiente manera:

BusTypeGuid
Un controlador de bus establece BusTypeGuid en el GUID para el tipo del bus en el que reside el dispositivo. Los GUID para los tipos de bus estándar se enumeran en Wdmguid.h. Los escritores de controladores deben generar GUID para otros tipos de bus mediante Uuidgen.

LegacyBusType
Un controlador de bus PnP establece LegacyBusType en el INTERFACE_TYPE del bus primario. Los tipos de interfaz se definen en Wdm.h. Algunos autobuses tienen un valor de INTERFACE_TYPE específico, como PCMCIABus, PCIBus o PNPISABus. Para otros autobuses, especialmente autobuses más recientes como USB, el controlador de autobús establece este miembro en PNPBus.

LegacyBusType especifica la interfaz utilizada para comunicarse con el dispositivo. Esto puede o no corresponder al tipo del bus primario. Por ejemplo, la interfaz de una tarjeta CardBus conectada a un controlador CardBus PCI es PCIBus. Sin embargo, la interfaz de una tarjeta PCMCIA en un controlador CardBus PCI es PCMCIABus.

BusNumber
Un controlador de autobús establece BusNumber en un número que distingue el bus de otros autobuses del mismo tipo en el equipo. El esquema de numeración de bus es específico del bus. Los números de bus pueden ser virtuales, pero deben coincidir con cualquier numeración usada por interfaces heredadas, como IoReportResourceUsage.

Consulte Plug and Play para conocer las reglas generales para controlar Plug and Play IRP menores.

Envío de este IRP

Reservado para uso del sistema. Los controladores no deben enviar este IRP.

Llame a IoGetDeviceProperty para obtener información sobre el bus al que está conectado un dispositivo.

Requisitos

Encabezado

Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h)

Consulte también

IoGetDeviceProperty