How Windows 95 OSR2.1 Added USB Support
When Windows 95 debuted in August 1995, Universal Serial Bus (USB) technology was not yet available for consumer PCs. To address the rapidly evolving hardware landscape before the release of Windows 98, Microsoft introduced rudimentary USB functionality through Windows 95 OEM Service Release 2.1 (OSR2.1) in late 1997. This article explains how Microsoft patched the existing operating system to interface with USB hardware, the underlying driver architecture it introduced, and the practical limitations of this early implementation.
The USB Supplement (USBSUPP.EXE)
USB support was not built directly into the original retail release
of Windows 95. Instead, Microsoft made it available exclusively to
original equipment manufacturers (OEMs) through an add-on package called
the "USB Supplement to OSR2" (distributed as
USBSUPP.EXE).
To install this supplement, a system had to already be running Windows 95 OSR2 (version 4.00.950 B). When applied, the patch upgraded the operating system's kernel files and components, identifying the system build as 4.00.950 B or 4.00.950 C (OSR 2.5) while registering support for USB host controllers.
Laying the Groundwork for the Windows Driver Model (WDM)
Windows 95 originally relied on Virtual Device Drivers (VxD) to interact with system hardware. Because VxDs were complex to write and incompatible with Windows NT, Microsoft used OSR2.1 as a testbed for the nascent Windows Driver Model (WDM).
The USB Supplement introduced a transitional, hybrid layer that allowed WDM-compliant drivers to run alongside standard VxDs. This framework consisted of several core components:
- NTKERN.VXD: A virtual device driver that acted as a compatibility wrapper, emulating the Windows NT kernel execution environment so newer WDM drivers could function inside the Windows 95 kernel.
- USBD.SYS: The universal bus class driver responsible for managing USB bus transactions, device topologies, and standard communication requests.
- Host Controller Drivers: Microsoft included support
for the two competing hardware standards of the era by providing
UHCD.SYSfor Intel’s Universal Host Controller Interface (UHCI) andOPENHCI.SYSfor Compaq, NEC, and others' Open Host Controller Interface (OHCI).
Detection and Device Enumeration
Once the host controller drivers were loaded, Windows 95 could detect the presence of root hubs and child devices. When a user plugged in a USB device:
- The host controller driver detected the electrical voltage shift on the data lines.
USBD.SYSqueried the device for its standard USB descriptors to determine vendor and product IDs.- The operating system's Plug and Play subsystem cross-referenced
these hardware identifiers against
.INFsetup files. - If a matching driver was found, Windows mounted the device dynamically without requiring a system reboot—a significant leap forward for PC peripherals at the time.
Limitations of OSR2.1 USB Support
While functional, USB support in Windows 95 OSR2.1 was limited and often unstable.
Because the WDM subsystem was incomplete compared to its full implementation in Windows 98, peripheral manufacturers were reluctant to write drivers specifically for OSR2.1. The implementation supported basic devices such as USB mice, keyboards, and simple hubs, but lacked native class drivers for more complex hardware like USB audio, composite devices, or mass storage drives. Consequently, widespread USB adoption on the platform remained minimal until Windows 98 arrived with mature, out-of-the-box driver stacks.