What procedure is necessary to utilize superspeed compatibility for a USB 3.0 Device? RRS feed

  • Question

  • I have been trying to get data over a bulk IN endpoint for the past little while but I keep getting timeouts on the Request as if there isn't any data there. I am almost certain that I should be receiving data on that endpoint as I have invested a lot of time making sure to activate the data stream.

    Since nothing was coming across I traced my steps back to setting up the interfaces. I noticed that UsbSamp Example used USBD_QueryUsbCapability to check whether or not Superspeed was a capability of the device. I found that my device succeeds when checking GUID_USB_CAPABILITY_DEVICE_CONNECTION_HIGH_SPEED_COMPATIBLE, but fails when checking 


    Is there something that I need to do to enable superspeed for my device driver?


    This is the connection information from USB Device Tree Viewer, so I know it should be capable of usb3.0 (it is also advertised as such and its proprietary driver operates at superspeed) 

           ---------------- Connection Information ---------------
    Connection Index         : 0x01
    Connection Status        : 0x01 (DeviceConnected)
    Current Config Value     : 0x01
    Device Address           : 0x01
    Is Hub                   : 0x00 (no)
    Number Of Open Pipes     : 0x04 (4)
    Device Bus Speed         : 0x03 (SuperSpeed)
    Pipe0ScheduleOffset      : 0x00 (0)
    Pipe1ScheduleOffset      : 0x00 (0)
    Pipe2ScheduleOffset      : 0x00 (0)
    Pipe3ScheduleOffset      : 0x00 (0)


    UPDATE: I just read this here:

    USB 3.0 driver stack
    The USB 3.0 stack is new in Windows 8. Microsoft created the new drivers by using Kernel Mode Driver Framework (KMDF) interfaces. The KMDF driver model reduces complexity and improves stability.

    Could this whole debocle have something to do with the fact that I am using windows 7 and I'm definitely not using a 3rd party stack?

    • Edited by TopGunMSDN Friday, August 15, 2014 3:46 PM needed to add important information
    Thursday, August 14, 2014 7:19 PM

All replies

  • Just to add a little bit more information to my question, here is some of the code leading up to the USBD_QueryUsbCapability.

    I create my device in the EvtDriverDeviceAdd call back, then create my usbd handle before returning from the callback:

    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&fileAttributes, MY_FILE_OBJECT_CONTEXT); //WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(&deviceAttributes, MY_FILE_OBJECT_CONTEXT); WDF_FILEOBJECT_CONFIG_INIT( &fileConfig, MYDeviceFileCreate, MYDeviceFileClose, WDF_NO_EVENT_CALLBACK // No cleanup callback function ); WdfDeviceInitSetFileObjectConfig( DeviceInit, &fileConfig, &fileAttributes ); //Make it so that every request object will have this context area WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE( &requestAttributes, MY_FILE_OBJECT_CONTEXT ); WdfDeviceInitSetRequestAttributes( DeviceInit, &requestAttributes ); //Set the device context attributes WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&deviceAttributes, DEVICE_CONTEXT); deviceAttributes.SynchronizationScope = WdfSynchronizationScopeNone; //Create the device using the above context space for the attributes. status = WdfDeviceCreate(&DeviceInit, &deviceAttributes, &device);




    status = USBD_CreateHandle(WdfDeviceWdmGetDeviceObject(device),
    		if (!NT_SUCCESS(status)){
    			DoTraceMessage(TRACE_DEVICE, "ERROR: USBD_CreateHandle failed 0x%x", status);
    			return status;

    I then perform the query in evtDevicePrepareHardware.

    status = USBD_QueryUsbCapability(

    The status comes back as 0xc0000002(STATUS_NOT_IMPLEMENTED).

    I could really use some help ! :(

    Friday, August 15, 2014 2:15 PM