Devnode Tree

The devnode tree is a hierarchical tree of device nodes. Any device node that has an enumerator can create new child device nodes. Any of these child device nodes can have an enumerator that creates further children of that device node. Normally, drivers do not know or care about their exact location within the tree. Drivers typically are only concerned with their own hardware device or device node, and are oblivious to the layers above or below them in the tree.

The devnode tree has two purposes:

  1. Describe all hardware that is present in the system.
  2. Provide a mechanism for enumerators to configure their children's hardware, allowing bus-independent drivers.

The distinction between the devnode tree and the registry is important. In a fully Plug and Play system, the devnode tree will be an accurate hierarchical representation of the currently installed devices. By contrast, the registry contains information for all devices ever installed (even if they are not currently present) and the location of a device in the registry does not fully reflect the hierarchical structure described in the devnode tree. (In the registry, devices are located beneath their enumerator but all enumerators are kept in a flat list.) The devnode tree exists in memory only, whereas the registry is saved on disk.

Sample Devnode Tree

The following sample devnode tree shows the device IDs of some typical devices and where in the hierarchy one might expect to find them. The actual contents of each device node other than the device ID are not shown.

Htree\Root\0 - Root node of devnode tree
     \Root\*PNP0801\0 - Old-style Sound Blaster compatible sound device
     \Root\*PNP0C00\0 - Plug and Play BIOS
         \BIOS\*PNP0901\0 - Super VGA compatible display adapter
         \BIOS\*PNP0000\0 - AT Interrupt Controller
         \BIOS\*PNP0100\0 - AT Timer
         \BIOS\*PNP0200\0 - AT DMA Controller
         \BIOS\*PNP0301\0 - PS/2 Style Keyboard Contoller
         \BIOS\*PNP0400\0 - Standard LPT printer port
         \BIOS\*PNP0400\1 - Standard LPT printer port
         \BIOS\*PNP0501\0 - 16550 COM port
         \BIOS\*PNP0501\1 - 16550 COM port
         \BIOS\*PNP0700\0 - PC standard floppy disk controller
         \BIOS\*PNP0800\0 - AT style speaker sound
         \BIOS\*PNP0901\0 - SVGA compatible display adapter
         \BIOS\*PNP0B00\0 - AT Real Time Clock
         \BIOS\*PNP0C01\0 - System memory
         \BIOS\*PNP0E00\0 - PCMCIA Controller
             \PCMCIA\3C08AF\0 - Network adapter