Windows 2000 USB 1.1 Support Architecture
Microsoft Windows 2000 provides native support for Universal Serial Bus (USB) 1.1 hardware peripherals through a layered, modular Windows Driver Model (WDM) architecture. This system relies on a dedicated USB driver stack that coordinates between host controller hardware, hub drivers, and peripheral-specific class drivers. By integrating with the operating system's Plug and Play (PnP) and Power Management subsystems, Windows 2000 enables automatic device enumeration, configuration, and dynamic hot-swapping for low-speed (1.5 Mbps) and full-speed (12 Mbps) USB devices.
The USB 1.1 Driver Stack Structure
The Windows 2000 USB mechanism operates as a tiered hierarchy of kernel-mode drivers that process data requests and interface with physical buses:
USB Host Controller Drivers: At the lowest layer of the stack, Windows 2000 interacts directly with the system's motherboard or expansion card chipset using miniport drivers. Because USB 1.1 hardware relies on two distinct host controller standards, Windows 2000 provides tailored drivers for each:
usbohci.sysmanages Open Host Controller Interface (OHCI) implementations, commonly found in chipsets from Compaq, NEC, and SiS.usbuhci.sysmanages Universal Host Controller Interface (UHCI) implementations, predominantly developed by Intel and VIA.- These miniport drivers interface with the primary USB port driver
(
usbport.sysor the core controller layer), abstracting hardware register operations from the upper operating system layers.
Core USB Bus Class and Hub Drivers: Above the host controller drivers sits the hub layer, managed by
usbhub.sys. This driver manages root hubs embedded within the host controller as well as external downstream USB hubs. It continuously monitors the status of individual ports, detects bus state changes (such as device insertions or removals), and initiates the hardware configuration cycle.USB Driver Interface (USBD): The
usbd.syslibrary provides a standardized interface between device class drivers and the underlying host controller drivers. It interprets device descriptors, assigns dynamic bus addresses, and configures communication pipes (endpoints).
Peripheral Communication via URBs and IRPs
When an application or service requests data from a USB peripheral,
standard Windows I/O Request Packets (IRPs) are generated. The specific
client or class driver (such as hidclass.sys for human
interface devices or usbprint.sys for printers) translates
these I/Os into USB Request Blocks (URBs).
The USB stack converts URBs into formatted USB transactions—control, interrupt, bulk, or isochronous transfers—and schedules them across the shared bus according to USB 1.1 bandwidth allocation limits.
Plug and Play Integration and Enumeration
When a USB 1.1 peripheral is attached, the mechanism completes an automatic enumeration sequence:
- The hub driver detects a voltage change on the D+ or D- data lines, identifying the device's operating speed (low-speed or full-speed).
- The hub driver reports the event to the Plug and Play manager, which
resets the port and issues standard control transfers via address 0 to
read the device's
Device Descriptor. - The host assigns a unique bus address (from 1 to 127) to the peripheral.
- The PnP manager reads vendor and product identifiers (VID and PID) to match the peripheral with an existing INF file and load the appropriate class or vendor-specific function driver.