MS OS Descriptors

From SEGGER Wiki
Jump to: navigation, search

With Windows XP SP3 on Microsoft introduced a new technique to identify a device by a special descriptor without creating a dedicated inf file for driver install. This is the so call the MS OS descriptor. An important information which is always misinterpreted is that the identification ID or string are on an interface base. This means that a composite device can also have multiple "OS descriptor information" Currently the following "Ids" are supported:

Id Description
RNDIS Microsoft's own USB to ethernet specification
WINUSB WinUSB compatible, can be used for virtually any USB interface
MTP Microsoft's extended PTP so that it can be used for any storage device/interface
PTP Picture Transfer Protocol

How it works

MS descriptor Log

The first step is to ask the device whether the string descriptor index 0xee is supported. Devices that does not have such an index normally stall this request. more to follow


The initial step is only done once. Once the device was asked whether it can support MS OS descriptor it will never be asked once again in case the device has stalled or a wrong answer was received. When experimenting with these MS OS descriptors it would be helpful to reset the behavior. Either by doing this manually and using the Registry Editor or using a simple batch file:

reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\vvvvppppbbbb" /f
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\VUSB3HUB\Parameters\vusbflags\vvvvppppbbbb" /f


Id Description
vvvv Vendor Id of the device
pppp Product Id of the device
bbbb BCD Version of the device (mentioned in the device descriptor: V 1.00 = [0x]0100)