Click to Rate and Give Feedback
MSDN
MSDN Library
Windows Driver Kit
Buses and Ports
Buses
Buses
USB
Design Guide
USB Descriptors
 Microsoft-Defined USB Descriptors

  Switch on low bandwidth view
Windows Driver Kit: Buses
Microsoft-Defined USB Descriptors

Due to the rapid emergence of devices that contain multiple hardware functions, many manufacturers find that their devices do not fit comfortably into any of the current universal serial bus (USB) device classes. This deprives such manufacturers of one of the most attractive features of USB technology: the standardization of driver software (according to the class of the device). Microsoft Windows provides native class drivers for most of the devices that belong to standard USB device classes, and these drivers allow end users to easily attach such devices to the computer without needing to install special software.

To accommodate manufacturers whose devices do not fit into the current set of USB device classes, Microsoft Corporation has developed a set of proprietary device classes and USB descriptors, which are called Microsoft OS Descriptors (MODs). Both applications and system software can identify the devices that belong to the Microsoft-defined device classes by querying the devices to determine whether they support MODs.

Microsoft OS Descriptors have important uses other than supporting the proprietary device classes. In particular, they provide a mechanism for deriving the maximum benefit from the device firmware. With the help of Microsoft OS Descriptors, you can use the firmware to deliver help files, special icons, Uniform Resource Locators (URLs), registry settings, and other data that is required to ease installation and enhance customer satisfaction. In some cases, you can forgo storage media such as floppy disks and CDs—which simplifies the delivery and support of upgrades.

Microsoft OS Descriptors will be fully documented in future releases of the Windows Driver Development Kit.

Operating-System Support

Microsoft OS Descriptors are supported by Windows XP Service Pack 1 and the Windows Server 2003 family of operating systems.

Why Does Windows Issue a String Descriptor Request to Index 0xEE?

Devices that support Microsoft OS Descriptors must store a special USB string descriptor in firmware at the fixed string index of 0xEE. This string descriptor is called a Microsoft OS String Descriptor.

When a new device is attached to a computer for the first time, an operating system that supports Microsoft OS Descriptors will request the string descriptor that is at index 0xEE. The Microsoft OS String Descriptor contains an embedded signature field that the operating system uses to differentiate it from other strings that might be at index 0xEE. The presence of a string descriptor that contains the proper signature field at index 0xEE indicates to the operating system that the device supports Microsoft OS Descriptors. The Microsoft OS String Descriptor also provides the operating system with version information.

The operating system queries for the string descriptor at index 0xEE during device enumeration—before the driver for the device has loaded—which might cause some devices to malfunction. Such devices are not supported by versions of the Windows operating system that support Microsoft OS Descriptors.

If a device does not contain a valid string descriptor at index 0xEE, it must respond with a stall packet (in other words, a packet that contains a packet identifier of type STALL), which is described in the "Request Errors" section of the Universal Serial Bus Specification. If the device does not respond with a stall packet, the system will issue a single-ended zero reset packet to the device, to help it recover from its stalled state.

After the operating system requests a Microsoft OS String Descriptor from a device, it creates the following registry key:

HLKM\SYSTEM\CurrentControlSet\Control\UsbFlags\vvvvpppprrrrr

where vvvv is a 4-digit hexadecimal number that identifies the vendor, pppp is a 4-digit hexadecimal number that identifies the product, and rrrr is a 4-digit hexadecimal number that contains the revision number of the device.

The operating system creates a registry value, named osvc, under this registry key that indicates whether the device supports Microsoft OS Descriptors. The following table specifies the contents of this registry value:

Contents of osvcMeaning
0x0000The device did not provide a valid response to the Microsoft OS string descriptor request.
0x01xxThe device provided a valid response to the Microsoft OS string descriptor request, where xx is the bVendorCode contained in the response.

If the device does not provide a valid response the first time that the operating system queries it for a Microsoft OS String Descriptor, the operating system will make no further requests for that descriptor.

For additional information about Microsoft OS Descriptors, see http://www.microsoft.com/whdc.


Send feedback on this topic
Built on May 20, 2009
Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Page view tracker