Query on child drivers of USB Composite Driver?

Hi All,

I have a basic question on when exactly the child drivers (I mean different
class specific drivers) gets started after Microsoft Composite driver has
found that this device is a generic device.

Here in my case after the Microsoft (usbccgp.sys) composite driver has
started and it show the “exclamation” on the class specific drivers and it
displays “code 10”, so does these drivers also get IRP_MN_START_DEVICE for
the child drivers???

Will be great if some one can clarify me on this???

Thanks.


This message, together with any attachment(s), contains confidential and proprietary information of
ServerEngines LLC and is intended only for the designated recipient(s) named above. Any unauthorized
review, printing, retention, copying, disclosure or distribution is strictly prohibited. If you are not the
intended recipient of this message, please immediately advise the sender by reply email message and
delete all copies of this message and any attachment(s). Thank you.

Vishwanath Maram wrote:

Here in my case after the Microsoft (usbccgp.sys) composite
driver has started and it show the “exclamation” on the class
specific drivers and it displays “code 10”, so does these drivers
also get IRP_MN_START=5FDEVICE for the child drivers???

Of course they do. If they’re immediately banged out, that typically means they failed the start path, which is IRP_MN_START_DEVICE.

Why don’t you create a simple function driver for one of your child devices and debug its start path?

Usbccgp is a bus driver and enumerates pdos for each of the composite
device functions. Those pdos then behave just like any other pdo. The
pnp enumeration string from query devices is examined by pnp, an
appropriate driver is identified (or not) and the usual sequence of
events for loading function and filter drivers transpires. The
appropriate function drivers get AddDevice and StartDevice events.


From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Vishwanath Maram
Sent: Thursday, November 01, 2007 4:07 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] Query on child drivers of USB Composite Driver?

Hi All,

I have a basic question on when exactly the child drivers (I mean
different class specific drivers) gets started after Microsoft Composite
driver has found that this device is a generic device.

Here in my case after the Microsoft (usbccgp.sys) composite driver has
started and it show the “exclamation” on the class specific drivers and
it displays “code 10”, so does these drivers also get
IRP_MN_START_DEVICE for the child drivers???

Will be great if some one can clarify me on this???

Thanks.




This message, together with any attachment(s), contains confidential and
proprietary information of
ServerEngines LLC and is intended only for the designated recipient(s)
named above. Any unauthorized
review, printing, retention, copying, disclosure or distribution is
strictly prohibited. If you are not the
intended recipient of this message, please immediately advise the sender
by reply email message and
delete all copies of this message and any attachment(s). Thank you.


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer

Vishwanath Maram wrote:

I have a basic question on when exactly the child drivers (I mean
different class specific drivers) gets started after Microsoft
Composite driver has found that this device is a generic device.

Here in my case after the Microsoft (usbccgp.sys) composite driver has
started and it show the “exclamation” on the class specific drivers
and it displays “code 10”, so does these drivers also get
IRP_MN_START_DEVICE for the child drivers???

Will be great if some one can clarify me on this???

I’m not sure I understand the question. Code 10 means the driver failed
to start. Either the configuration was wrong and it couldn’t find the
.sys file, or it tried to start it and the driver failed the start
request, or something similar to that.

You’re working on the virtual hub device, right? Remember that certain
composite devices are treated specially. Audio and video class devices,
for example. In those classes, there is always a control interface and
a streaming interface that are related to each other – they are not
exposed as two separate PnP ids.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

Yeah I am working on a virtual hub driver, but what’s happening is we are
getting all the configuration descriptors and we reply back properly without
any issues. Now that the child drivers doesn’t get started at all, here for
these child device objects we don’t have any control to create the
Compatible Id’s as this has to be taken care by the interface specific
drivers I believe.

Tim as of now I am trying to make the Logitech webcam work as an virtual
device, but I haven’t understood what you were saying about “In those
classes, there is always a control interface and a streaming interface that
are related to each other – they are not exposed as two separate PnP ids.”

Can you please clarify more on this???

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Tim Roberts
Sent: Thursday, November 01, 2007 1:25 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] Query on child drivers of USB Composite Driver?

Vishwanath Maram wrote:

I have a basic question on when exactly the child drivers (I mean
different class specific drivers) gets started after Microsoft
Composite driver has found that this device is a generic device.

Here in my case after the Microsoft (usbccgp.sys) composite driver has
started and it show the “exclamation” on the class specific drivers
and it displays “code 10”, so does these drivers also get
IRP_MN_START_DEVICE for the child drivers???

Will be great if some one can clarify me on this???

I’m not sure I understand the question. Code 10 means the driver failed
to start. Either the configuration was wrong and it couldn’t find the
.sys file, or it tried to start it and the driver failed the start
request, or something similar to that.

You’re working on the virtual hub device, right? Remember that certain
composite devices are treated specially. Audio and video class devices,
for example. In those classes, there is always a control interface and
a streaming interface that are related to each other – they are not
exposed as two separate PnP ids.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer


This message, together with any attachment(s), contains confidential and proprietary information of
ServerEngines LLC and is intended only for the designated recipient(s) named above. Any unauthorized
review, printing, retention, copying, disclosure or distribution is strictly prohibited. If you are not the
intended recipient of this message, please immediately advise the sender by reply email message and
delete all copies of this message and any attachment(s). Thank you.

Vishwanath Maram wrote:

Yeah I am working on a virtual hub driver, but what’s happening is we are
getting all the configuration descriptors and we reply back properly without
any issues. Now that the child drivers doesn’t get started at all, here for
these child device objects we don’t have any control to create the
Compatible Id’s as this has to be taken care by the interface specific
drivers I believe.

Tim as of now I am trying to make the Logitech webcam work as an virtual
device, but I haven’t understood what you were saying about “In those
classes, there is always a control interface and a streaming interface that
are related to each other – they are not exposed as two separate PnP ids.”

Can you please clarify more on this???

If you plug in a USB Video Camera, it will have a Video Class interface
on interface 0, and a Video Streaming interface on interface 1. But if
you look at the Enum\USB tree, you will only see a subkey for MI_00, and
not for MI_01. The same thing happens for a USB Audio device. I
haven’t traced through it closely enough to see who is making that
distinction, but I don’t think that usbccgp.sys is in the driver stack
for a USB Audio device.

If you look at usbvideo.inf, you’ll see that it matches USB\CLASS_0E.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.