Windows 95/98

Windows Support Menu



Human Interface Devices


The Universal Serial Bus Organization developed the specification for Human Interface Devices. It provides a uniform way for programs to access input devices while providing extensible, adaptable interfaces to new devices. This allows a hardware manufacturer to write only an application that addresses the specific capabilities of the device. It would be possible for a hardware vendor can design a HID compliant device without having to write a driver for it.

Note: While the HID specification does not demand that the device also conform to the Universal Serial Bus specification, initial support in Windows 98 for HID will be based solely on USB-compliant devices.


Although not directly supported in Windows 98, HID controls are also defined for the following:

  • Vehicle simulation devices (autos, planes, tanks, spaceships, and submarines)
  • Virtual reality devices (belts, body suits, gloves, head trackers, head mounted displays, etc).
  • Sports equipment devices (golf clubs, baseball bats, rowing machines, treadmills, and etc).
  • About 250 consumer appliance controls.
  • 2D and 3D game control devices.

Windows 98 does not automatically support HID-compliant devices other than keyboards, keypads, mouse devices, pointing devices, and game controllers. The devices above will be enumerated and recognized as HID-compliant device by the operating system. They are not automatically supported because such devices require additional, device-specific software (such as drivers, Control Panel applications, or special applications) to be installed on the system. The device-specific software for these types of devices needs to be developed and supplied by device vendors or OEMs.

HID Architecture - General

This diagram demonstrates how the pieces of the HID stack provide support for HID aware applications, while maintaining backward compatibility for legacy applications.

HID-aware and DirectInput 5.0 applications (discussed in the next module) communicate directly with the class driver. Data that is specific to the application is passed through a User Mode component that packages the data for transport to the HID Class driver.

HID devices and HID aware applications package the data into HID reports. HID reports are data structures that allow specific device and application information to be stored in generic data structures. The data stored in HID reports must be placed and extracted through HID parsing files. These functions are implemented in Hid.dll in the User mode and Hidparse.sys in the Kernel mode.

Legacy applications send the data to the VxDs that existed in Windows 95. Those calls that are for legacy hardware are sent directly to the hardware layer. Those calls that are going to a HID device must be translated. A legacy mapping layer exists to capture the data and pass it through a Kernel Mode HID parser so that the HID Class driver can interpret the data.

The data is then packaged and sent to the bus that the physical device lies on. The layer that provides this service is specific to the device's bus type.


Since HID is a specification rather than a hardware type, troubleshooting HID devices should follow the steps listed for the specific bus type, namely USB.

Hidclass.sys HID class driver. It sends and receives HID reports to and from its minidrivers. Hidclass.sys also provides input queues so several processes can have handles open on the same device.
Hidusb.sys Sends and receives HID reports over the USB bus.
Hid.dll and Hidparse.sys Provides parsing services. Hid.dll is a User-mode parsing service. Hidparse.sys is a Kernel-mode parsing service. These modules aid User-mode applications and Kernel-mode drivers in parsing HID reports.
Kbdhid.vxd Maps keyboard HID reports into the existing legacy data format expected by Vkd.vxd.
Mouhid.vxd Maps mouse HID reports into the existing legacy data format expected by Msmouse.vxd.
Joyhid.vxd Maps joystick HID reports into the existing legacy data format expect by Vjoyd.vxd.

Points to Remember:

  • HID is not a type of hardware, but a specification that any input device can be designed around.
  • Windows 98's support for HID is restricted to USB devices
  • IHVs may not need to write a kernel mode minidriver for their device to be supported under Memphis.
  • Remember, HID is a specification, not an abstraction layer. The specification provides a uniform method for programs to access input devices.
  • If you need to troubleshoot, follow steps listed in the previous USB module. This includes checking the revision number, trying another port or device, bypassing hubs and using Msinfo32 to verify that the correct files are installed for the device that is failing.