• Question

  • I am working on a USB device driver having audio end points,using a KMDF driver.  I am getting a request called URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR. What is the method to handle this URB? I understand that this is related to MS OS descriptors. But my device doesn't seem to have OS descriptor support.Is there any special structure for this descriptor? I see that my device has a couple of Feature Unit Descriptors related to audio. Are these considered OS descriptors? Couldsomeone throw some light on this URB/processing?
    Thursday, April 11, 2019 7:27 PM

All replies

  • Your description is a bit confusing.  A USB device driver does not receive URBs, it creates URBs.  URBs are received by the hub, port, and host controller drivers.  Further a USB device driver does not have endpoints, it consumes endpoints.

    If you were creating a USB device sitting on the USB wire, then you would be receiving control pipe requests for a custom string descriptor, not URBs.  The device will automatically handle that request by stalling it, if it doesn't have the descriptors.

    So, what are you creating here?  Are you creating a filter driver sitting below some function driver?  Are you creating a fake device?

    Tim Roberts | Driver MVP Emeritus | Providenza & Boekelheide, Inc.

    Thursday, April 11, 2019 10:57 PM
  • For what it's worth, the MS OS descriptors are stored as a USB string descriptor with index 0xEE.  Typically, your vendor name is string descriptor #0, your device name is #1, and your serial number is #2.  The USB stack will try to read string descriptor #0xEE during enumeration.  On the USB wire, it looks exactly like any other string descriptor request.

    Tim Roberts | Driver MVP Emeritus | Providenza & Boekelheide, Inc.

    Thursday, April 11, 2019 11:08 PM