The developer's resource for computer interfacing, especially USB, serial (COM) ports, mass storage, and embedded networking. (Formerly

Home > USB Central > USB Host Software

USB Host Software

USB classes, host drivers (class, generic, and vendor-specific), Windows tips, Linux, Mac, and other host OSes.

USB classes | Generic drivers | Labview
Writing Windows drivers | INF files | Non-Windows hosts

Also see:

Device firmware and companion host software | Embedded hosts and OTG

USB Classes

Sometimes you don't have to write a driver because Windows or another source provides a class driver.

USB drivers included with each edition of Windows

COM Port (serial emulation)

Device Firmware Upgrade. STMicroelectronics has a Device Firmware Upgrade (DFU) implementation for ST7 USB applications.

Ethernet Emulation

Human Interface Devices (HID)

Mass Storage

Generic drivers

Libusb-win32 is an open-source driver library that enables Windows applications to access USB devices (under development). SharpUSBLib is a wrapper around the libusb project for .NET.

WinUSB is a generic USB driver supported by Windows Vista. The driver enables applications to access devices that don't fit into a defined class.

USB 1.x/2.0 Generic Device Driver from Andrew Pargeter & Associates.

Cypress EZ-USB chips can use the driver included in SuiteUSB.NET.

The Java USB API will allow Java applications to communicate with and manipulate USB devices. The specification is in progress. From the Java Community Process.

MCCI has a generic driver.

Thesycon's USBIO allows access to all USB devices from user mode. Free demo.


Using USB devices with Labview and LabWindows/CVI.

Writing Windows USB device drivers

Microsoft's WDK (Windows Driver Kit) has information on writing drivers, and example drivers. The kit is a free download. Formerly called the Device Driver Kit (DDK).'s WinDriver USB is an enhanced version of Jungo's Driverwizard, which enables developing driver code in user mode and later moving it to kernel mode.

Windows issues

If you get a broken link: Microsoft frequently changes the URLs of its content but at least has improved its "page not found" page to show some possibilities for the missing content. If all else fails, search for the name of the page (such as "USB Architecture").

Microsoft's USB Technologies page for developers has links to various Windows-related documentation, including a couple of FAQs.

Setup Classes Versus Interface Classes. All about GUIDS.

Windows Logo Program for Hardware. This is different from the Implementers Forum's Certified USB Logo.

How to turn off selective Suspend. Can fix a problem where a USB port stops responding after quickly and repeatedly inserting and removing a USB device. MS Article ID 817900.

Microsoft OS Descriptor

A request for a string descriptor with index EEh is requesting the Microsoft OS descriptor.

INF files

Every USB device on a Windows system must have an INF file that tells the Device Manager what driver to assign to the device.

The WDK documentation has more about INF files. See "Creating an INF File" and "Supplying an INF File."

How Windows Determines the Most Suitable Device Driver to Install During Setup (Knowledge Base article 279112). Explains how Windows searches INF files for vendor and product IDs and uses its findings to decide which drivers to load.

Creating Windows INF Files.

Non-Windows hosts

The libusb project aims to create a library to enable applications to access USB devices regardless of OS. Includes Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X.

Also see Embedded hosts and OTG.


USB on the Macintosh.


The Linux USB Project.

How to get USB devices working under Linux. From Brad Hards.

Linux Remote NDIS USB device function driver. From Belcarra Technologies.

Jungo's WinDriver USB includes support for Linux.

Java USB for Linux.


DosUSB allows DOS applications and drivers to communicate with USB devices. From Georg Potthast.