Windows 98 PnP Hardware Identification Strings
In Microsoft Windows 98, the Plug and Play (PnP) subsystem automated
driver installation by querying physical devices for standardized
identification strings, matching those strings against Setup Information
(.inf) files, and creating corresponding device nodes in
the system registry. By organizing these strings into a strict hierarchy
of hardware-specific identifiers and broader fallback identifiers,
Windows 98 minimized user intervention while configuring system
resources and loading appropriate device drivers.
The Role of Bus Enumerators
Hardware identification in Windows 98 began at the bus level. The operating system utilized bus enumerators—specialized drivers responsible for scanning specific communication buses, such as PCI, ISAPNP, USB, and PCMCIA.
When a bus enumerator detected a device, it read the hardware's embedded identifiers directly from its firmware or configuration registers. The enumerator then formatted these values into standardized string representations recognized by the Windows 98 Configuration Manager.
Format of Identification Strings
Windows 98 generated distinct classes of identification strings for each detected peripheral:
- Hardware IDs: These strings uniquely identified the
specific make, model, and revision of a component. The formatting
depended heavily on the bus architecture:
- PCI: Formatted typically as
PCI\VEN_xxxx&DEV_xxxx&SUBSYS_xxxxxxxx&REV_xx, representing the Vendor ID, Device ID, Subsystem ID, and Revision number. - ISA PnP: Formatted using standardized three-letter
EISA vendor codes followed by a hexadecimal product ID, such as
*PNP0501(representing a standard 16550 UART serial port). - USB: Formatted as
USB\VID_xxxx&PID_xxxx, detailing the Vendor ID and Product ID.
- PCI: Formatted typically as
- Compatible IDs: If an exact driver match could not be found, the bus enumerator provided one or more Compatible IDs. These were generic strings representing functional classes or industry-standard fallback specifications (for instance, a PCI mass storage controller might provide a generic IDE/ATAPI compatible ID).
The Matching Process and INF Files
Once the enumerator constructed the ID strings, the Windows 98
Configuration Manager compared them against entries located in the
system's INF directory (typically C:\WINDOWS\INF).
Each INF file contained an identification section defining supported hardware strings alongside the corresponding driver files:
- Rank Evaluation: Windows 98 ranked drivers based on how closely an INF entry matched the hardware. An exact match against a full Hardware ID took highest priority. If an exact match was absent, the system searched for matches against less-specific hardware sub-strings, followed by Compatible IDs.
- User Prompts: If a valid match was found in
pre-installed INF files or Windows driver cabinets (
.cab), the driver loaded automatically. If no match existed, Windows 98 launched the Add New Hardware Wizard, prompting the user for installation media containing an INF matching one of the device's strings.
Registry Storage and Devnodes
Upon successfully resolving a device's identification strings,
Windows 98 created an entry in the system registry under the
HKEY_LOCAL_MACHINE\Enum branch. This branch was organized
by bus type, device ID, and unique instance ID (for example,
HKEY_LOCAL_MACHINE\Enum\PCI\...).
Inside this registry node, the operating system stored:
- The assigned Device IDs and Compatible IDs.
- A user-friendly device description.
- Pointers to the installed driver service in
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class. - Hardware resource allocations (IRQs, I/O ports, DMA channels, and memory ranges) determined by the resource arbiters.
Through this structured pipeline of bus enumeration, string formatting, INF scoring, and registry mapping, Windows 98 established a reliable, programmatic method for resolving hardware identities.