USB Driver Documentation Updates in the MSDN Library

Hello, I am a writer on the Windows Driver Kit team. In this post, I will provide a summary of recent changes that we have made to the USB driver documentation in the MSDN library.

The USB team recently reviewed the entire USB documentation set and recommended changes to improve quality and accuracy. As a result of that review, we have been incrementally updating the USB documentation in the MSDN library during the last few months. The documentation updates contain numerous corrections, enhancements, and new topics.

Here are answers to some questions sent by our readers.

I see definitions for certain client driver interfaces in public header files, but they are not documented.

We have added some new topics:


What happened to the USB Port Driver interfaces?

In Windows XP, vendor-supplied bus drivers could directly access interfaces exposed by the USB Port Driver. Those interfaces and related routines have been removed from the MSDN documentation and the Usbbusif.h header file, because the interfaces were never supported externally. If you search for these interfaces by using a search engine, for example, CreateUsbDevice, you will get a Content Removed page on MSDN.


What about WinUSB? These topics are so incomplete!

Hopefully no more! Check out the improved WinUSB documentation.

We have added the following topics, based on this whitepaper, to the MSDN documentation. The MSDN topics are updated more frequently than the whitepaper, so the information in the MSDN topics is more current.

As part of our updates to the WinUSB documentation, we have improved the WinUSB Functions section. These reference pages now contain error code information, and Remarks sections have been updated.

Please note that the WinUSB functions were designed for C/C++ applications. Microsoft does not provide a managed API for WinUSB.


Can you provide a list of USB device classes for which Microsoft provides drivers?

Yes! The list is right here with Windows version information: Drivers for the Supported USB Device Classes


Some of the reference topics are marked as not supported, reserved, or deprecated. What does this mean?

If a programming element is marked as "not supported" or "reserved," do not use it. This usually indicates that the element is used by an internal component and must not be used by client drivers.

If a programming element is marked as "deprecated" in a particular version of Windows, do not use the element in drivers that must run on that version of Windows. For example, USBD_Debug_LogEntry  is deprecated in Windows XP and later operating systems.

For some deprecated routines, new alternative routines are available. For example, you can use USBD_ParseConfigurationDescriptorEx   instead of the obsolete USBD_ParseConfigurationDescriptor  routine.

For a list of IOCTLs (user-mode and kernel-mode) that you should not use, see Deprecated and Reserved USB IOCTLs.

The portal tables in the following topics indicate the routines that your client driver must not use.


The look and feel of the MSDN documentation is so different. I don't know where I am anymore!

If you use the table of contents to navigate in the MSDN Library, you might have noticed some changes. You can choose from three possible views: Lightweight, ScriptFree, and Classic. You can choose the view you want in the upper right corner of any MSDN topic.  


If you do not see the three views (Classic | Lightweight | ScriptFree) listed, click Preferences, and then select the view you want.



The table of contents for USB has been changed, especially the USB Reference section, which is now categorized by Enumerations & Constants, IOCTLs, Structures, and Routines. The reference topics are alphabetized under each of these parent topics.


If you are searching for a particular topic in your search engine, you might hit certain shadow topics that contain a link to the actual topic in MSDN. This is a result of our content migration. If you care about the details read WDK Documentation Republished on MSDN.


I wish the USB docs covered "How to..."

Your feedback is important to us. Please let us know what kind of information you would like to see in the docs. Use the Send feedback on this topic link at the bottom of the page to send us your comments. For information about how this works, read Send us feedback on any WDK Help topic - 24/7.


- Priyanka Wilkins [MSFT], WDK Writer

Comments (2)

  1. Priyanka Wilkins: Thank you for the all the work you have put in to documenting WinUSB.  I especially like how you have included example code C++ code.  That would have helped me a lot back in Q2 2009 when I was writing a Visual C++ application that uses WinUSB.  In particular, it took me a while to figure out the details of calling the Setup API functions.

    One suggestion though: Does WinUSB_ControlTransfer have a built-in timeout feature?  If not, I recommend expanding this page to talk about the simplest possible way to use WinUSB_ControlTransfer with a timeout:…/ff540174(VS.85).aspx

    I would also mention it in the documentation for the function.

    –David Grayson

  2. USB Blog says:

    Hi David,

    The PIPE_TRANSFER_TIMEOUT pipe policy applies even to control pipes.  Set it to your preferred value to control the behavior of WinUsb_ControlTransfer.  Note that control pipes have a default timeout of 5 seconds.…/ff728833%28VS.85%29.aspx

Skip to main content