Geoff Chappell, Software Analyst
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.
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.
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: