Items

An item is a collection of tags that together describe a hardware component; each item describes a single hardware component.

hwi_item tag

The first tag in each item always begins with the hw_item structure (which, like other tags, must start with the hwi_prefix structure):

struct hwi_item {
    struct hwi_prefix   prefix;
    uint16_t            itemsize;
    uint16_t            itemname;
    uint16_t            owner;
    uint16_t            kids;
};
itemsize
The distance, in 4-byte quantities, to the start of the next item tag.
itemname
An offset into the strings section of the system page for the name of the item being described.
This field differs from the prefix.name field, which specifies the type of structure that contains the hwi_item tag.
owner
The offset, in bytes, from the start of the hwinfo section to the item that owns this item.
This field can be used to organize groups of items into a tree structure, similar to a filesystem directory hierarchy (see Device trees). If the item is at the root of an ownership tree, the owner field is set to HWI_NULL_OFF.
kids
The number of other items that are children of the current item.

Group item

The Group item is used to groups several items together. It serves the same purpose as a directory in a filesystem. For example, the devclass level of the /hw tree would use a Group item.

#define HWI_TAG_NAME_group  "Group"
#define HWI_TAG_ALIGN_group (sizeof(uint32_t))
struct hwi_group {
    struct hwi_item     item;
};
item
The item.

Bus item

The Bus item tells the system about a hardware bus.

#define HWI_TAG_NAME_bus    "Bus"
#define HWI_TAG_ALIGN_bus   (sizeof(uint32))
struct hwi_bus {
    struct hwi_item     item;
};
Item names can be (but are not limited to):
#define HWI_ITEM_BUS_PCI        "pci"
#define HWI_ITEM_BUS_ISA        "isa"
#define HWI_ITEM_BUS_EISA       "eisa"
#define HWI_ITEM_BUS_MCA        "mca"
#define HWI_ITEM_BUS_PCMCIA     "pcmcia"
#define HWI_ITEM_BUS_CAN		"can"
#define HWI_ITEM_BUS_SDIO		"sdio"
#define HWI_ITEM_BUS_I394		"I394"
#define HWI_ITEM_BUS_MOST		"most"
#define HWI_ITEM_BUS_UNKNOWN    "unknown"
item
The item.

Device item

#define HWI_TAG_NAME_device     "Device"
#define HWI_TAG_ALIGN_device    (sizeof(uint32))
struct hwi_device {
    struct hwi_item     item;
    uint32_t            pnpid;
};

The Device item tells the system about an individual device (the device level from the hwinfo “trees” section); “Group” tags are used for the devclass level (see Device trees).

item
The item.
pnpid
The Plug and Play device identifier assigned by Microsoft. Only relevant for devices that play media. Deprecated.
Note:

Device items include hypervisor devices:

#define HWI_ITEM_DEVCLASS_QVM	"qvm"