USB Devices Driver

Posted on  by admin

Controlling USB devices with Python and libusb @siliconlabs-Subscribe to Adafruit on YouTube: This will totally fix the bug in Vista 64 bit that locks the USB drives. LibusbK is a complete driver/library solution for vendor class usb device interfaces. If you are a usb developers or usb device manufacturer seeking a driver solution for a new USB widget then libusbK could be for you. LibusbK encompasses a 100% WinUSB compatible api/funtion set. To see if your USBASP is running on libusb-win32 driver, open windows device manager and look for libusb-win32 and expand to see if usbasp is there. Now you can test to flash AVR chips/devices (atmega8/328/16/attiny etc.) using USB asp.

Versions supported

  • Windows 10
  • Windows 8.1

Applies to

  • Device manufacturers of CDC Control devices

Microsoft-provided in-box driver (Usbser.sys) for your Communications and CDC Control device.

In Windows 10, the driver has been rewritten by using the Kernel-Mode Driver Framework that improves the overall stability of the driver.

  • Improved PnP and power management by the driver (such as, handling surprise removal).
  • Added power management features such as USB Selective Suspend.

In addition, UWP applications can now use the APIs provided by the new Windows.Devices.SerialCommunication namespace that allow apps to talk to these devices.

Usbser.sys installation

Load the Microsoft-provided in-box driver (Usbser.sys) for your Communications and CDC Control device.


If you trying to install a USB device class driver included in Windows, you do not need to download the driver. They are installed automatically. If they are not installed automatically, contact the device manufacturer. For the list of USB device class driver included in Windows, see USB device class drivers included in Windows.

Windows 10

In Windows 10, a new INF, Usbser.inf, has been added to %Systemroot%Inf that loads Usbser.sys as the function device object (FDO) in the device stack. If your device belongs to the Communications and CDC Control device class, Usbser.sys is loaded automatically.You do not need to write your own INF to reference the driver. The driver is loaded based on a compatible ID match similar to other USB device class drivers included in Windows.



  • If you want to load Usbser.sys automatically, set the class code to 02 and subclass code to 02 in the Device Descriptor. For more information, see USB communications device class. With this approach, you are not required to distribute INF files for your device because the system uses Usbser.inf.
  • If your device specifies class code 02 but a subclass code value other than 02, Usbser.sys does not load automatically. Pnp Manager tries to find a driver. If a suitable driver is not found, the device might not have a driver loaded. In this case, you might have to load your own driver or write an INF that references another in-box driver.
  • If your device specifies class and subclass codes to 02, and you want to load another driver instead of Usbser.sys, you have to write an INF that specifies the hardware ID of the device and the driver to install. For examples, look through the INF files included with sample drivers and find devices similar to your device. For information about INF sections, see Overview of INF Files. USB Devices Driver


Microsoft encourages you to use in-box drivers whenever possible. On mobile editions of Windows, such as Windows 10 Mobile, only drivers that are part of the operating system are loaded. Unlike desktop editions, it is not possible to load a driver through an external driver package. With the new in-box INF, Usbser.sys is automatically loaded if a USB-to-serial device is detected on the mobile device.

Windows 8.1 and earlier versions

In Windows 8.1 and earlier versions of the operating system, Usbser.sys is not automatically loaded when a USB-to-serial device is attached to a computer. To load the driver, you need to write an INF that references the modem INF (mdmcpq.inf) by using the Include directive. The directive is required for instantiating the service, copying inbox binaries, and registering a device interface GUID that applications require to find the device and talk to it. That INF specifies 'Usbser' as a lower filter driver in a device stack.

The INF also needs to specify the device setup class as Modem to use mdmcpq.inf. Under the [Version] section of the INF, specify the Modem and the device class GUID. for details, see System-Supplied Device Setup Classes.

For more information, see this KB article.

Configure selective suspend for Usbser.sys

Starting in Windows 10, Usbser.sys supports USB Selective Suspend. It allows the attached USB-to-serial device to enter a low power state when not in use, while the system remains in the S0 state. When communication with the device resumes, the device can leave the Suspend state and resume Working state. The feature is disabled by default and can be enabled and configured by setting the IdleUsbSelectiveSuspendPolicy entry under this registry key:

To configure power management features of Usbser.sys, you can set IdleUsbSelectiveSuspendPolicy to:

  • '0x00000001': Enters selective suspend when idle, that is, when there are no active data transfers to or from the device.

  • '0x00000000': Enters selective suspend only when there are no open handles to the device.

That entry can be added in one of two ways:

  • Write an INF that references the install INF and add the registry entry in the HW.AddReg section.

  • Describe the registry entry in an extended properties OS feature descriptor. Add a custom property section that sets the bPropertyName field to a Unicode string, 'IdleUsbSelectiveSuspendPolicy' and wPropertyNameLength to 62 bytes. Set the bPropertyData field to '0x00000001' or '0x00000000'. The property values are stored as little-endian 32-bit integers.

    For more information, see Microsoft OS Descriptors.

Develop Windows applications for a USB CDC device

If you install Usbser.sys for the USB CDC device, here are the application programming model options:

  • Starting in Windows 10, a Windows app can send requests to Usbser.sys by using the Windows.Devices.SerialCommunication namespace. It defines Windows Runtime classes that can use to communicate with a USB CDC device through a serial port or some abstraction of a serial port. The classes provide functionality to discover such serial device, read and write data, and control serial-specific properties for flow control, such as setting baud rate, signal states.

  • In Windows 8.1 and earlier versions, you can write a Windows desktop application that opens a virtual COM port and communicates with the device. For more information, see:

    Win32 programming model:

    • .NET framework programming model:

Related topics

  • 1Using flashrom on Windows
  • 2Building flashrom on Windows using MinGW/MSYS.
    • 2.1Requirements


In order to use flashrom on Windows you must either build it from source as explained below or just download a snapshot from here.If your programmer is COM or LPT-based, there is nothing more to do, because Windows has all drivers needed.

It isn't so easy for USB-based devices, because they needed a special libusb-win32 driver, that must be generated and installed to make it available to the flashrom executable.Because the nature of the generation process, the driver has no digital signature and can't be installed on 64-bit Windows versions without some preparations.

Obtaining libusb-win32

The required installation file can be found on the libusb-win32 project site.Please use the same version that was used for flashrom compilation as indicated by the download path.

Download the file named and unpack /libusb-win32-bin-x.y.z.t/bin directory from it.

Making libusb-based driver for your device

  • Attach your USB device and click on Cancel or Close on the Driver Installation Wizard window.
  • Run inf-wizard.exe from the unpacked bin directory. Click on Next.
  • Select your device from the list, click on Next.
  • Do not alter Vendor ID, Product ID and MI. You can alter Manufacturer and Device names, if you want. Click on Next.
  • Select the destination for the newly created driver and click on Save.
  • If you are using 32bit Windows version or 64bit Windows version with unsigned driver installation option enabled, click on Install Now... to install the driver.
  • If you receive an error message instead of a successful driver installation, disable the enforced driver signing (your favorite search engine will give you details about that) and install the driver after that.
  • Detach your device and attach it once again to finish the installation.

Using flashrom

After installing the drivers successfully you can use flashrom without Administrator privileges.Consult the man page about how to use it in general and the options available for your programmer.

Before you set up a MinGW/MSYS build environment, note that you may find usable Windows binaries in our buildbot archive. However, they are usually untested and not recommended to be trusted blindly.


MinGW/MSYS USB Devices Driver

In order to build flashrom and various of its dependencies, we need a UNIX-like environment on Windows, which is provided by MinGW/MSYS.

  • Download the latest version (20110530 currently) of the automated MinGW installer named mingw-get-inst (double-click the installer *.exe, which will download and install all components).
    • Make sure you enable 'MinGW Compiler Suite', 'C++ compiler', 'MSYS Basic System', and 'MinGW Developer Toolkit' in the installer.
    • For simplicity it's recommended to leave the default install location of c:MinGW unchanged. Usb Devices Driver Vga

Now open a MinGW shell via Start/Programs/MinGW/MinGW Shell and do the following:

  • Additionally, pkg-config is needed. There are a few ways to do this. The MinGW FAQ has some suggestions: Extract the binary from GTK or use an alternative implementation. A flashrom user describes the steps for extracting pkg-config from GTK in this issue on Github.

If you are using MSYS2, pacman can also be used:


  • Download and execute libusb-win32-devel-filter-
  • Download and extract
    • Copy lusb0_usb.h to (the equivalent of) /usr/local/include.


  • Install libftdi. The easiest method is probably to use the binaries from here.
    • Extract the ZIP file into a temporary directory.
    • Copy dll/libftdi.dll to /usr/local/bin.
    • Copy lib/libftdi.a and lib/libftdi.dll.a to /usr/local/lib.
    • Copy include/ftdi.h to /usr/local/include.

Building flashrom

Checkout the flashrom source code (see the download page for instructions), then:

First you need to install MinGW (on Ubuntu it is enough to install the package mingw32).Of course all the normal build utilities are needed like make etc. (usually contained in a package named build-essential or similar).If you want to use libusb or libftdi you need to get the headers and static library files (*.a).The latter can either be downloaded pre-built or need to be (cross-)compiled.For libusb-win32 this even requires a Windows SDK which makes the whole point of cross-compiling a bit moot.See the respective source packages for documentation on how to cross-compile them.

The headers and libraries should be organized in a Unix-like directory layout, i.e. a (sub) directory named 'lib' containing the static libraries (*.a), 'bin' with non-static libraries (*.dll) if need be, and 'include' with the headers (*.h).

You can then compile flashrom.exe with

A relative path (originating in the flashrom directory) is allowed as LIBS_BASE's value.The compiler to be used (given by the CC value) depends on the MinGW edition you are using. usb devices driver vga
Retrieved from ''