SYSTEM_PLUGPLAY_BUS_INFORMATION

The SYSTEM_PLUGPLAY_BUS_INFORMATION structure may be what a successful call to ZwQuerySystemInformation or NtQuerySystemInformation would produce in its output buffer when given the information class SystemPlugPlayBusInformation (0x28) in versions 3.51 and 4.0. Earlier and later versions reject this information class as invalid. In all builds yet inspected of these versions, it is instead rejected as not implemented. Presumably, it was some sort of placeholder, at best an experiment that never got far. Version 5.0 reworked Plug and Play substantially. Version 5.1 repurposes the information class’s numerical value as SystemVerifierAddDriverInformation and only then to set system information.

Documentation Status

The SYSTEM_PLUGPLAY_BUS_INFORMATION structure is not documented. It is known only from type information in early import libraries: GDISRVL.LIB from the Device Driver Kit (DDK) for Windows NT 3.51 and SHELL32.LIB from the DDK for Windows NT 4.0.

Layout

The SYSTEM_PLUGPLAY_BUS_INFORMATION is 0x40 bytes.

Offset Definition
0x00
ULONG BusCount;
0x04
PLUGPLAY_BUS_INSTANCE BusInstance [ANYSIZE_ARRAY];

The 0x3C-byte PLUGPLAY_BUS_INSTANCE is also known only from this type information and appears to have no other purpose:

Offset Definition
0x00
PLUGPLAY_BUS_TYPE BusType;
0x08
ULONG BusNumber;
0x0C
USHORT BusName [0x18];

Again for the 8-byte PLUGPLAY_BUS_TYPE:

Offset Definition
0x00
PLUGPLAY_BUS_CLASS BusClass;
0x04
union {
    INTERFACE_TYPE SystemBusType;
    PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;
};

The PLUGPLAY_BUS_CLASS enumeration selects from the union at offset 0x04. It takes values:

The PLUGPLAY_VIRTUAL_BUS_TYPE enumeration takes values: