From: suresh on
Hi,

We have a usb composite device which has one mass storage interface
and another as a network interface. We are developing a WDF driver
(NDIS-USB) for the network interface.

Immediately after WdfUsbTargetDeviceCreate if I break into the
debugger and examine the newly created device, then I see that the
Control Pipe Handle is NULL!
Here is the actual output:
--------
kd> !WDFUSBDEVICE 0x0000057f`fe5905f8

WDFUSBDEVICE 0000057ffe5905f8
=============================
Config descriptor fffffa80037216b0, device descriptor fffffa8001a6fb58
Control USBD_PIPE_HANDLE 0000000000000000
Num interfaces 1

device attached to a USBPORT serviced core stack
USBDI Version 0x00000600, Supported USB Version 0x00000200

WDFUSBINTERFACE 0000057ffe56e8f8
Interface Number 0x01 Class 0xff, SubClass 0x00, Protocol 0x00
Alt Setting 0, Num Endpoints 2, Interface Desc fffffa80037216b9
--------

We also have another usb based ehternet device (which is not a
composite device) whose driver doesn't have this problem. Actually
this driver (WHQL certified) is only being ported for the composite
device.
The output at the same place using the working driver is:
---------
kd> !WDFUSBDEVICE 0x0000057f`fc466478

WDFUSBDEVICE 0000057ffc466478
=============================
Config descriptor fffffa80036c3790, device descriptor fffffa8003b99cd8
Control USBD_PIPE_HANDLE fffffa8001ae5060
Num interfaces 1

device attached to a USBPORT serviced core stack
USBDI Version 0x00000600, Supported USB Version 0x00000110

WDFUSBINTERFACE 0000057ffd829558
Interface Number 0x00 Class 0xff, SubClass 0x00, Protocol 0xff
Alt Setting 0, Num Endpoints 3, Interface Desc fffffa80036c3799
---------

I am wondering if the composite device architecture has something to
do with it, and if I missed any important step in the initialization.
However this is actually just the start of device initialization.

Some pointers will be of a great help.

Regards,
Suresh

From: Philip Ries [MSFT] on
What version of Windows is this? Do control transfers actually work? I
suspect there is actually nothing wrong here.

suresh wrote:
> Hi,
>
> We have a usb composite device which has one mass storage interface
> and another as a network interface. We are developing a WDF driver
> (NDIS-USB) for the network interface.
>
> Immediately after WdfUsbTargetDeviceCreate if I break into the
> debugger and examine the newly created device, then I see that the
> Control Pipe Handle is NULL!
> Here is the actual output:
> --------
> kd> !WDFUSBDEVICE 0x0000057f`fe5905f8
>
> WDFUSBDEVICE 0000057ffe5905f8
> =============================
> Config descriptor fffffa80037216b0, device descriptor fffffa8001a6fb58
> Control USBD_PIPE_HANDLE 0000000000000000
> Num interfaces 1
>
> device attached to a USBPORT serviced core stack
> USBDI Version 0x00000600, Supported USB Version 0x00000200
>
> WDFUSBINTERFACE 0000057ffe56e8f8
> Interface Number 0x01 Class 0xff, SubClass 0x00, Protocol 0x00
> Alt Setting 0, Num Endpoints 2, Interface Desc fffffa80037216b9
> --------
>
> We also have another usb based ehternet device (which is not a
> composite device) whose driver doesn't have this problem. Actually
> this driver (WHQL certified) is only being ported for the composite
> device.
> The output at the same place using the working driver is:
> ---------
> kd> !WDFUSBDEVICE 0x0000057f`fc466478
>
> WDFUSBDEVICE 0000057ffc466478
> =============================
> Config descriptor fffffa80036c3790, device descriptor fffffa8003b99cd8
> Control USBD_PIPE_HANDLE fffffa8001ae5060
> Num interfaces 1
>
> device attached to a USBPORT serviced core stack
> USBDI Version 0x00000600, Supported USB Version 0x00000110
>
> WDFUSBINTERFACE 0000057ffd829558
> Interface Number 0x00 Class 0xff, SubClass 0x00, Protocol 0xff
> Alt Setting 0, Num Endpoints 3, Interface Desc fffffa80036c3799
> ---------
>
> I am wondering if the composite device architecture has something to
> do with it, and if I missed any important step in the initialization.
> However this is actually just the start of device initialization.
>
> Some pointers will be of a great help.
>
> Regards,
> Suresh
>
From: suresh on
Thanks for the response and sorry for not mentioning the platform
earlier. It is Windows 7 64 bit with Intel 2 GHz 2 processors and 2 GB
of RAM.
Control transfers definately work because the other usb-ethernet
device is working fine in this setup.
We also have Windows XP installed in the same PC and there the WDM
version of the driver works just fine whose WDF counterpart is failing
on Windows 7.
In fact the same WDM driver works on Windows 7 too, but we need a WDF
driver for certification.

Regards,
Suresh

On Jul 20, 11:37 pm, "Philip Ries [MSFT]" <phr...(a)microsoft.com>
wrote:
> What version of Windows is this?  Do control transfers actually work?  I
> suspect there is actually nothing wrong here.
>
>
>
> suresh wrote:
> > Hi,
>
> > We have a usb composite device which has one mass storage interface
> > and another as a network interface. We are developing a WDF driver
> > (NDIS-USB) for the network interface.
>
> > Immediately after WdfUsbTargetDeviceCreate if I break into the
> > debugger and examine the newly created device, then I see that the
> > Control Pipe Handle is NULL!
> > Here is the actual output:
> > --------
> > kd> !WDFUSBDEVICE 0x0000057f`fe5905f8
>
> > WDFUSBDEVICE 0000057ffe5905f8
> > =============================
> > Config descriptor fffffa80037216b0, device descriptor fffffa8001a6fb58
> > Control USBD_PIPE_HANDLE 0000000000000000
> > Num interfaces 1
>
> > device attached to a USBPORT serviced core stack
> > USBDI Version 0x00000600, Supported USB Version 0x00000200
>
> > WDFUSBINTERFACE 0000057ffe56e8f8
> >    Interface Number 0x01 Class 0xff, SubClass 0x00, Protocol 0x00
> >    Alt Setting 0, Num Endpoints 2, Interface Desc fffffa80037216b9
> > --------
>
> > We also have another usb based ehternet device (which is not a
> > composite device) whose driver doesn't have this problem. Actually
> > this driver (WHQL certified) is only being ported for the composite
> > device.
> > The output at the same place using the working driver is:
> > ---------
> > kd> !WDFUSBDEVICE 0x0000057f`fc466478
>
> > WDFUSBDEVICE 0000057ffc466478
> > =============================
> > Config descriptor fffffa80036c3790, device descriptor fffffa8003b99cd8
> > Control USBD_PIPE_HANDLE fffffa8001ae5060
> > Num interfaces 1
>
> > device attached to a USBPORT serviced core stack
> > USBDI Version 0x00000600, Supported USB Version 0x00000110
>
> > WDFUSBINTERFACE 0000057ffd829558
> >    Interface Number 0x00 Class 0xff, SubClass 0x00, Protocol 0xff
> >    Alt Setting 0, Num Endpoints 3, Interface Desc fffffa80036c3799
> > ---------
>
> > I am wondering if the composite device architecture has something to
> > do with it, and if I missed any important step in the initialization.
> > However this is actually just the start of device initialization.
>
> > Some pointers will be of a great help.
>
> > Regards,
> > Suresh- Hide quoted text -
>
> - Show quoted text -

From: Tim Roberts on
suresh <patil_suresh420(a)yahoo.com> wrote:
>
>We have a usb composite device which has one mass storage interface
>and another as a network interface. We are developing a WDF driver
>(NDIS-USB) for the network interface.
>
>Immediately after WdfUsbTargetDeviceCreate if I break into the
>debugger and examine the newly created device, then I see that the
>Control Pipe Handle is NULL!

I suspect Philip is right. URBs that are destined for the default control
endpoint do not need a pipe handle, so the fact that the structure doesn't
contain one is irrelevant.
--
Tim Roberts, timr(a)probo.com
Providenza & Boekelheide, Inc.