USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that expose multiple interfaces and do not have their own parent class driver, the system loads an extra driver, usbccgp.sys, between the hub driver and the client device drivers. The system assigns a separate PDO to each interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found any specifications on MSDN as to what this class driver does so I do not know how practical it is to try to write a replacement driver for it. Can anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in usbccgp “may be supported” in future versions of Windows. I am wondering why Microsoft hasn’t fixed this feature yet - is there something in the architecture that makes it impossible to fix? Do they have a suggested work-around (I haven’t found any) other than the obvious suggestion of not using composite devices, which really is not a practical suggestion for laptops since there are more than a few readily-available and popular consumer usb composite devices that plug into external usb ports, such as Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower filter driver and was wondering if those of you who have written upper or lower filter drivers for it would care to comment on what it was used, etc. I was wondering if a filter driver could be used to make Selective Suspend work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.commailto:xxxxx</mailto:xxxxx>

Usbgccp splits the composite device into separate separate child devices, one per interface … with exceptions. It has special knowledge to know to group usb audio interfaces together for instance. On newer versions, it also supports IAD (interface association descriptor) so that it can group interfaces into one child. It then munges the config descriptor for each child to appear as if the config descriptor contains only the interface for the child.

For power, it will not power down the parent until all the children are powered down and vice versa. That is at least in simplistic terms what it does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and tears. I think even with the access to the sources, it would be a near impossible task to implement the usb core side of usb SS. In the end, I think you will have to live with the limitations of the driver in terms of USB SS. Reverse engineering it into an upper filter would consume a tremendous amount of man months. I would rate it 10 on a scale of 1 to 10 on difficulty (in terms of getting all the quirky rules right, of which there are quite a few).

d


From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi
?
I’m trying to find out more information about the Microsoft USB Common Class Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite devices on Windows XP.?
?
(Note that according to MSDN, for composite USB devices (on Windows XP) that expose multiple interfaces and do not have their own parent class driver, the system loads an extra driver, usbccgp.sys, between the hub driver and the client device drivers. The system assigns a separate PDO to each interface of a composite device.)
?
(1) Does anybody know what the tasks are of usbccgp.sys? I have not found any specifications on MSDN as to what this class driver does so I do not know how practical it is to try to write a replacement driver for it. Can anybody comment on what it would take to do this?
?
(2) Also, what is about this driver that makes it not support Selective Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in usbccgp “may be supported” in future versions of Windows. I am wondering why Microsoft hasn’t fixed this feature yet - is there something in the architecture that makes it impossible to fix? Do they have a suggested work-around (I haven’t found any) other than the obvious suggestion of not using composite devices, which?really is?not a practical suggestion for?laptops since there are?more than a few?readily-available and popular consumer usb composite devices that plug into external usb ports, such as Microsoft’s wireless USB/mouse combos.
?
(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower filter driver and was wondering if those of you who have written upper or lower filter drivers for it would care to comment on what it was used, etc. I was wondering if a filter driver could be used to make Selective Suspend work for USB composite devices.
?
?
My goal is to find out if it possible to get around the lack of support for Selective Suspend by usbccgp.sys for USB composite devices.
?
thanks in advance,
Sharon xxxxx@msn.com
?

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

Doron,
On what version does usbccgp introduce IAD support? Is it already available
on winxp SP2? Can you give an example for a USB device that includes an IAD
descriptor? I would like to get my hands on one and test it with the product
I’m working on…

Thanks,
Shahar

“Doron Holan” wrote in message
news:xxxxx@ntdev…
Usbgccp splits the composite device into separate separate child devices,
one per interface … with exceptions. It has special knowledge to know to
group usb audio interfaces together for instance. On newer versions, it
also supports IAD (interface association descriptor) so that it can group
interfaces into one child. It then munges the config descriptor for each
child to appear as if the config descriptor contains only the interface for
the child.

For power, it will not power down the parent until all the children are
powered down and vice versa. That is at least in simplistic terms what it
does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and
tears. I think even with the access to the sources, it would be a near
impossible task to implement the usb core side of usb SS. In the end, I
think you will have to live with the limitations of the driver in terms of
USB SS. Reverse engineering it into an upper filter would consume a
tremendous amount of man months. I would rate it 10 on a scale of 1 to 10
on difficulty (in terms of getting all the quirky rules right, of which
there are quite a few).

d

________________________________________
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class
Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite
devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that
expose multiple interfaces and do not have their own parent class driver,
the system loads an extra driver, usbccgp.sys, between the hub driver and
the client device drivers. The system assigns a separate PDO to each
interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found
any specifications on MSDN as to what this class driver does so I do not
know how practical it is to try to write a replacement driver for it. Can
anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective
Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in
usbccgp “may be supported” in future versions of Windows. I am wondering why
Microsoft hasn’t fixed this feature yet - is there something in the
architecture that makes it impossible to fix? Do they have a suggested
work-around (I haven’t found any) other than the obvious suggestion of not
using composite devices, which really is not a practical suggestion for
laptops since there are more than a few readily-available and popular
consumer usb composite devices that plug into external usb ports, such as
Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower
filter driver and was wondering if those of you who have written upper or
lower filter drivers for it would care to comment on what it was used, etc.
I was wondering if a filter driver could be used to make Selective Suspend
work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for
Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

IIRC, xpsp2 has IAD support. As for a device which supports it, I don’t
know of one offhand. We have a usb device simulator which we can use to
cook up this type of descriptor, so we don’t necessarily need a true hw
device to test IAD.

d

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Shahar Talmi
Sent: Monday, February 21, 2005 6:25 PM
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] USB composite class driver

Doron,
On what version does usbccgp introduce IAD support? Is it already
available
on winxp SP2? Can you give an example for a USB device that includes an
IAD
descriptor? I would like to get my hands on one and test it with the
product
I’m working on…

Thanks,
Shahar

“Doron Holan” wrote in message
news:xxxxx@ntdev…
Usbgccp splits the composite device into separate separate child
devices,
one per interface … with exceptions. It has special knowledge to know
to
group usb audio interfaces together for instance. On newer versions, it

also supports IAD (interface association descriptor) so that it can
group
interfaces into one child. It then munges the config descriptor for
each
child to appear as if the config descriptor contains only the interface
for
the child.

For power, it will not power down the parent until all the children are
powered down and vice versa. That is at least in simplistic terms what
it
does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and

tears. I think even with the access to the sources, it would be a near
impossible task to implement the usb core side of usb SS. In the end, I

think you will have to live with the limitations of the driver in terms
of
USB SS. Reverse engineering it into an upper filter would consume a
tremendous amount of man months. I would rate it 10 on a scale of 1 to
10
on difficulty (in terms of getting all the quirky rules right, of which
there are quite a few).

d

________________________________________
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common
Class
Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite
devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP)
that
expose multiple interfaces and do not have their own parent class
driver,
the system loads an extra driver, usbccgp.sys, between the hub driver
and
the client device drivers. The system assigns a separate PDO to each
interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not
found
any specifications on MSDN as to what this class driver does so I do not

know how practical it is to try to write a replacement driver for it.
Can
anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective
Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in

usbccgp “may be supported” in future versions of Windows. I am wondering
why
Microsoft hasn’t fixed this feature yet - is there something in the
architecture that makes it impossible to fix? Do they have a suggested
work-around (I haven’t found any) other than the obvious suggestion of
not
using composite devices, which really is not a practical suggestion for
laptops since there are more than a few readily-available and popular
consumer usb composite devices that plug into external usb ports, such
as
Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a
lower
filter driver and was wondering if those of you who have written upper
or
lower filter drivers for it would care to comment on what it was used,
etc.
I was wondering if a filter driver could be used to make Selective
Suspend
work for USB composite devices.

My goal is to find out if it possible to get around the lack of support
for
Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument:
‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@windows.microsoft.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Doron:

Can you give me an idea of what specifically is the problem with usbccgp.sys (or the architecture) that makes it difficult to support SS?

Is there a spec for writing this class driver, so I can look at it or does Microsoft not share that?

(While what you said sounds reasonable, I need a little more concrete info.)

You said that usbccgp.sys won’t power down the parent until all the children are powered down (I also read this in Oney’s book) – this implies to me that it does support selective suspend. What, then, does Microsoft means when it says that usbccgp.sys doesn’t support selective suspend?

Another question I had is this:
I noticed on some laptops, that they will not enter C3 (you can tell by using Performance Monitor under Control Panel’s Administrative Tools) if you plug in a composite device such as a Microsoft wireless usb keyboard/mouse combo. This makes sense - that a composite device would hold off C3 (%C3 goes down to 0 in PerfMon with the usb combosite device plugged in).

However, on other laptops, I see them in C3 for around 50% of the time regardless if I have the composite keyboard plugged in or not. This does not make any sense to me, unless perhaps I’m misinterpreting what Microsoft said when they said that usbccgp.sys doesn’t support SS.

All the laptops were running XP SP2, by the way.

Please clarify.

thanks in advance,
Sharon
----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 5:40 PM
Subject: RE: [ntdev] USB composite class driver

Usbgccp splits the composite device into separate separate child devices, one per interface … with exceptions. It has special knowledge to know to group usb audio interfaces together for instance. On newer versions, it also supports IAD (interface association descriptor) so that it can group interfaces into one child. It then munges the config descriptor for each child to appear as if the config descriptor contains only the interface for the child.

For power, it will not power down the parent until all the children are powered down and vice versa. That is at least in simplistic terms what it does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and tears. I think even with the access to the sources, it would be a near impossible task to implement the usb core side of usb SS. In the end, I think you will have to live with the limitations of the driver in terms of USB SS. Reverse engineering it into an upper filter would consume a tremendous amount of man months. I would rate it 10 on a scale of 1 to 10 on difficulty (in terms of getting all the quirky rules right, of which there are quite a few).

d


From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that expose multiple interfaces and do not have their own parent class driver, the system loads an extra driver, usbccgp.sys, between the hub driver and the client device drivers. The system assigns a separate PDO to each interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found any specifications on MSDN as to what this class driver does so I do not know how practical it is to try to write a replacement driver for it. Can anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in usbccgp “may be supported” in future versions of Windows. I am wondering why Microsoft hasn’t fixed this feature yet - is there something in the architecture that makes it impossible to fix? Do they have a suggested work-around (I haven’t found any) other than the obvious suggestion of not using composite devices, which really is not a practical suggestion for laptops since there are more than a few readily-available and popular consumer usb composite devices that plug into external usb ports, such as Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower filter driver and was wondering if those of you who have written upper or lower filter drivers for it would care to comment on what it was used, etc. I was wondering if a filter driver could be used to make Selective Suspend work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

There is no spec.

SS is difficult to support b/c you have N entities that want to change state independently of each other and once you get them all to agree, you have to freeze out their state changes until you can commit the change (ie move into Dx) and then when one of them wants out, you have to bring every one else out of Dx. You have to do this while calling out into other drivers (meaning you have a pretty complex state machine) w/out locks being held for periods of time.

As for the c3 issue. It is not matter of SS in this case. The host controller itself is probably suspending the bus schedule, or there is some logic between the HC and the pci bus that allows C3 to be entered.

The coordination of the children into Dx is only one part. What I described was the machine going into lower power (ie an Sx state), not necessarily SS. Like I said previously, SS entails a lot more nasty logic b/c you have to do a lot more synchronization.

d


From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 7:41 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] USB composite class driver

Doron:
?
Can you give me an idea of what specifically is the problem with usbccgp.sys (or the architecture) that makes it difficult to support SS?
?
Is there a spec for writing this class driver, so I can look at it or does Microsoft not share that?
?
(While what you said sounds reasonable, I need a little more concrete info.)
?
?
You said that usbccgp.sys won’t power down the parent until all the children are powered down (I also read this in Oney’s book) – this implies to me that it does support selective suspend.?What, then, does Microsoft means when it says that usbccgp.sys doesn’t support selective suspend?
?
Another question I had is this:
I noticed on some laptops, that they will not enter C3 (you can tell by using Performance Monitor under Control Panel’s Administrative Tools) if you plug in a composite device such as a Microsoft wireless usb keyboard/mouse combo. This makes sense - that a composite device would hold off C3 (%C3 goes down to 0 in PerfMon with the usb combosite device plugged in).
?
However, on other laptops, I see them in C3 for around 50% of the time regardless if I have the composite keyboard plugged in or not. This does not make any sense to me, unless perhaps I’m misinterpreting what Microsoft said when they said that usbccgp.sys doesn’t support SS.
?
All the laptops were running XP SP2, by the way.
?
Please clarify.
?
thanks in advance,
Sharon
----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 5:40 PM
Subject: RE: [ntdev] USB composite class driver

Usbgccp splits the composite device into separate separate child devices, one per interface … with exceptions.? It has special knowledge to know to group usb audio interfaces together for instance.? On newer versions, it also supports IAD (interface association descriptor) so that it can group interfaces into one child.? It then munges the config descriptor for each child to appear as if the config descriptor contains only the interface for the child.

For power, it will not power down the parent until all the children are powered down and vice versa.? That is at least in simplistic terms what it does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and tears.? I think even with the access to the sources, it would be a near impossible task to implement the usb core side of usb SS.? In the end, I think you will have to live with the limitations of the driver in terms of USB SS.? Reverse engineering it into an upper filter would consume a tremendous amount of man months.? I would rate it 10 on a scale of 1 to 10 on difficulty (in terms of getting all the quirky rules right, of which there are quite a few).

d


From: xxxxx@listsosr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that expose multiple interfaces and do not have their own parent class driver, the system loads an extra driver, usbccgp.sys, between the hub driver and the client device drivers. The system assigns a separate PDO to each interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found any specifications on MSDN as to what this class driver does so I do not know how practical it is to try to write a replacement driver for it. Can anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in usbccgp “may be supported” in future versions of Windows. I am wondering why Microsoft hasn’t fixed this feature yet - is there something in the architecture that makes it impossible to fix? Do they have a suggested work-around (I haven’t found any) other than the obvious suggestion of not using composite devices, which really is not a practical suggestion for laptops since there are more than a few readily-available and popular consumer usb composite devices that plug into external usb ports, such as Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower filter driver and was wondering if those of you who have written upper or lower filter drivers for it would care to comment on what it was used, etc. I was wondering if a filter driver could be used to make Selective Suspend work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

Thanks for the helpful info!

I have one other USB question to ask. Can you think of a reason why there would be a power spike (power usage) every 250 mSec only when a usb device is plugged in on a Windows XP SP2 laptop?

The knowledge base article Q297045 talks about bus polling holding off C3 and indicates a registry to change the polling from 1 to 5 msec - but this rate is no were near to the 250 mSec I’m asking about. I’m bringing it up only because this KB article has to do with polling (periodic stuff) and might ring a bell. Do you have any suggestions of where to look?

http://support.microsoft.com/kb/297045/EN-US/

thanks
Sharon

----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 8:13 PM
Subject: RE: [ntdev] USB composite class driver

There is no spec.

SS is difficult to support b/c you have N entities that want to change state independently of each other and once you get them all to agree, you have to freeze out their state changes until you can commit the change (ie move into Dx) and then when one of them wants out, you have to bring every one else out of Dx. You have to do this while calling out into other drivers (meaning you have a pretty complex state machine) w/out locks being held for periods of time.

As for the c3 issue. It is not matter of SS in this case. The host controller itself is probably suspending the bus schedule, or there is some logic between the HC and the pci bus that allows C3 to be entered.

The coordination of the children into Dx is only one part. What I described was the machine going into lower power (ie an Sx state), not necessarily SS. Like I said previously, SS entails a lot more nasty logic b/c you have to do a lot more synchronization.

d


From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 7:41 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] USB composite class driver

Doron:

Can you give me an idea of what specifically is the problem with usbccgp.sys (or the architecture) that makes it difficult to support SS?

Is there a spec for writing this class driver, so I can look at it or does Microsoft not share that?

(While what you said sounds reasonable, I need a little more concrete info.)

You said that usbccgp.sys won’t power down the parent until all the children are powered down (I also read this in Oney’s book) – this implies to me that it does support selective suspend. What, then, does Microsoft means when it says that usbccgp.sys doesn’t support selective suspend?

Another question I had is this:
I noticed on some laptops, that they will not enter C3 (you can tell by using Performance Monitor under Control Panel’s Administrative Tools) if you plug in a composite device such as a Microsoft wireless usb keyboard/mouse combo. This makes sense - that a composite device would hold off C3 (%C3 goes down to 0 in PerfMon with the usb combosite device plugged in).

However, on other laptops, I see them in C3 for around 50% of the time regardless if I have the composite keyboard plugged in or not. This does not make any sense to me, unless perhaps I’m misinterpreting what Microsoft said when they said that usbccgp.sys doesn’t support SS.

All the laptops were running XP SP2, by the way.

Please clarify.

thanks in advance,
Sharon
----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 5:40 PM
Subject: RE: [ntdev] USB composite class driver

Usbgccp splits the composite device into separate separate child devices, one per interface … with exceptions. It has special knowledge to know to group usb audio interfaces together for instance. On newer versions, it also supports IAD (interface association descriptor) so that it can group interfaces into one child. It then munges the config descriptor for each child to appear as if the config descriptor contains only the interface for the child.

For power, it will not power down the parent until all the children are powered down and vice versa. That is at least in simplistic terms what it does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and tears. I think even with the access to the sources, it would be a near impossible task to implement the usb core side of usb SS. In the end, I think you will have to live with the limitations of the driver in terms of USB SS. Reverse engineering it into an upper filter would consume a tremendous amount of man months. I would rate it 10 on a scale of 1 to 10 on difficulty (in terms of getting all the quirky rules right, of which there are quite a few).

d


From: xxxxx@listsosr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that expose multiple interfaces and do not have their own parent class driver, the system loads an extra driver, usbccgp.sys, between the hub driver and the client device drivers. The system assigns a separate PDO to each interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found any specifications on MSDN as to what this class driver does so I do not know how practical it is to try to write a replacement driver for it. Can anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in usbccgp “may be supported” in future versions of Windows. I am wondering why Microsoft hasn’t fixed this feature yet - is there something in the architecture that makes it impossible to fix? Do they have a suggested work-around (I haven’t found any) other than the obvious suggestion of not using composite devices, which really is not a practical suggestion for laptops since there are more than a few readily-available and popular consumer usb composite devices that plug into external usb ports, such as Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower filter driver and was wondering if those of you who have written upper or lower filter drivers for it would care to comment on what it was used, etc. I was wondering if a filter driver could be used to make Selective Suspend work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

I don’t know about specific timings, but the usb bus runs on a schedule. That schedule causes dma bus master traffic which requires the processor to be in C0. If the schedule is setup in a particular way, it could be causing bus master traffic at the interval you see. Sorry, but I don’t know the particulars on how this key works, just how the usb bus works in general. Certainly, when there are no devices plugged in, the schedule doesn’t run.

d


From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 8:47 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] USB composite class driver

Thanks for the helpful info!
?
I have one other USB question to ask. Can you think of a reason why there would be a power spike (power usage) every 250 mSec only when a usb device is plugged in on a Windows XP SP2 laptop?
?
The knowledge base article Q297045 talks about bus polling holding off?C3?and indicates a registry to change the polling from 1 to 5 msec - but this rate is no were near to the 250 mSec I’m asking about.? I’m bringing it up only because this KB article has to do with polling (periodic stuff) and might ring a bell. Do you have any suggestions of where to look?
?
http://support.microsoft.com/kb/297045/EN-US/
?
thanks
Sharon
?
----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 8:13 PM
Subject: RE: [ntdev] USB composite class driver

There is no spec.?

SS is difficult to support b/c you have N entities that want to change state independently of each other and once you get them all to agree, you have to freeze out their state changes until you can commit the change (ie move into Dx) and then when one of them wants out, you have to bring every one else out of Dx.? You have to do this while calling out into other drivers (meaning you have a pretty complex state machine) w/out locks being held for periods of time.

As for the c3 issue.? It is not matter of SS? in this case.? The host controller itself is probably suspending the bus schedule, or there is some logic between the HC and the pci bus that allows C3 to be entered.

The coordination of the children into Dx is only one part.? What I described was the machine going into lower power (ie an Sx state), not necessarily SS.? Like I said previously, SS entails a lot more nasty logic b/c you have to do a lot more synchronization.

d


From: xxxxx@listsosr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 7:41 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] USB composite class driver

Doron:

Can you give me an idea of what specifically is the problem with usbccgp.sys (or the architecture) that makes it difficult to support SS?

Is there a spec for writing this class driver, so I can look at it or does Microsoft not share that?

(While what you said sounds reasonable, I need a little more concrete info.)

You said that usbccgp.sys won’t power down the parent until all the children are powered down (I also read this in Oney’s book) – this implies to me that it does support selective suspend. What, then, does Microsoft means when it says that usbccgp.sys doesn’t support selective suspend?

Another question I had is this:
I noticed on some laptops, that they will not enter C3 (you can tell by using Performance Monitor under Control Panel’s Administrative Tools) if you plug in a composite device such as a Microsoft wireless usb keyboard/mouse combo. This makes sense - that a composite device would hold off C3 (%C3 goes down to 0 in PerfMon with the usb combosite device plugged in).

However, on other laptops, I see them in C3 for around 50% of the time regardless if I have the composite keyboard plugged in or not. This does not make any sense to me, unless perhaps I’m misinterpreting what Microsoft said when they said that usbccgp.sys doesn’t support SS.

All the laptops were running XP SP2, by the way.

Please clarify.

thanks in advance,
Sharon
----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 5:40 PM
Subject: RE: [ntdev] USB composite class driver

Usbgccp splits the composite device into separate separate child devices, one per interface … with exceptions. It has special knowledge to know to group usb audio interfaces together for instance. On newer versions, it also supports IAD (interface association descriptor) so that it can group interfaces into one child. It then munges the config descriptor for each child to appear as if the config descriptor contains only the interface for the child.

For power, it will not power down the parent until all the children are powered down and vice versa. That is at least in simplistic terms what it does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and tears. I think even with the access to the sources, it would be a near impossible task to implement the usb core side of usb SS. In the end, I think you will have to live with the limitations of the driver in terms of USB SS. Reverse engineering it into an upper filter would consume a tremendous amount of man months. I would rate it 10 on a scale of 1 to 10 on difficulty (in terms of getting all the quirky rules right, of which there are quite a few).

d


From: xxxxx@listsosr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that expose multiple interfaces and do not have their own parent class driver, the system loads an extra driver, usbccgp.sys, between the hub driver and the client device drivers. The system assigns a separate PDO to each interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found any specifications on MSDN as to what this class driver does so I do not know how practical it is to try to write a replacement driver for it. Can anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in usbccgp “may be supported” in future versions of Windows. I am wondering why Microsoft hasn’t fixed this feature yet - is there something in the architecture that makes it impossible to fix? Do they have a suggested work-around (I haven’t found any) other than the obvious suggestion of not using composite devices, which really is not a practical suggestion for laptops since there are more than a few readily-available and popular consumer usb composite devices that plug into external usb ports, such as Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower filter driver and was wondering if those of you who have written upper or lower filter drivers for it would care to comment on what it was used, etc. I was wondering if a filter driver could be used to make Selective Suspend work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

Doron,
It’s funny you mention that because just yesterday someone from the QA team
asked me if I know any device simulators they can use in the QA lab. He told
me they were using something from PLX for simulating USB devices but they
are also looking for PCMCIA and IEEE1394 device simulators and cannot find
any commercial ones… What device simulator do you use for USB? Do you know
any simulators for PCMCIA or IEEE1394?

Thanks,
Shahar

“Doron Holan” wrote in message
news:xxxxx@ntdev…
IIRC, xpsp2 has IAD support. As for a device which supports it, I don’t
know of one offhand. We have a usb device simulator which we can use to
cook up this type of descriptor, so we don’t necessarily need a true hw
device to test IAD.

d

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Shahar Talmi
Sent: Monday, February 21, 2005 6:25 PM
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] USB composite class driver

Doron,
On what version does usbccgp introduce IAD support? Is it already
available
on winxp SP2? Can you give an example for a USB device that includes an
IAD
descriptor? I would like to get my hands on one and test it with the
product
I’m working on…

Thanks,
Shahar

“Doron Holan” wrote in message
news:xxxxx@ntdev…
Usbgccp splits the composite device into separate separate child
devices,
one per interface … with exceptions. It has special knowledge to know
to
group usb audio interfaces together for instance. On newer versions, it

also supports IAD (interface association descriptor) so that it can
group
interfaces into one child. It then munges the config descriptor for
each
child to appear as if the config descriptor contains only the interface
for
the child.

For power, it will not power down the parent until all the children are
powered down and vice versa. That is at least in simplistic terms what
it
does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and

tears. I think even with the access to the sources, it would be a near
impossible task to implement the usb core side of usb SS. In the end, I

think you will have to live with the limitations of the driver in terms
of
USB SS. Reverse engineering it into an upper filter would consume a
tremendous amount of man months. I would rate it 10 on a scale of 1 to
10
on difficulty (in terms of getting all the quirky rules right, of which
there are quite a few).

d

________________________________________
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common
Class
Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite
devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP)
that
expose multiple interfaces and do not have their own parent class
driver,
the system loads an extra driver, usbccgp.sys, between the hub driver
and
the client device drivers. The system assigns a separate PDO to each
interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not
found
any specifications on MSDN as to what this class driver does so I do not

know how practical it is to try to write a replacement driver for it.
Can
anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective
Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in

usbccgp “may be supported” in future versions of Windows. I am wondering
why
Microsoft hasn’t fixed this feature yet - is there something in the
architecture that makes it impossible to fix? Do they have a suggested
work-around (I haven’t found any) other than the obvious suggestion of
not
using composite devices, which really is not a practical suggestion for
laptops since there are more than a few readily-available and popular
consumer usb composite devices that plug into external usb ports, such
as
Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a
lower
filter driver and was wondering if those of you who have written upper
or
lower filter drivers for it would care to comment on what it was used,
etc.
I was wondering if a filter driver could be used to make Selective
Suspend
work for USB composite devices.

My goal is to find out if it possible to get around the lack of support
for
Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument:
‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@windows.microsoft.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

EZ USB FX2 is pretty standard. NetChip makes a pretty inexpensive
device, they just got bought out by PLX. It is almost a commodity
market now.

I don’t know about PCMCIA or firewire device simulation, sorry. I do
know that you can you use the firewire stack to create virtual devices
locally, but that’s about all I know.

d

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Shahar Talmi
Sent: Tuesday, February 22, 2005 1:58 AM
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] USB composite class driver

Doron,
It’s funny you mention that because just yesterday someone from the QA
team
asked me if I know any device simulators they can use in the QA lab. He
told
me they were using something from PLX for simulating USB devices but
they
are also looking for PCMCIA and IEEE1394 device simulators and cannot
find
any commercial ones… What device simulator do you use for USB? Do you
know
any simulators for PCMCIA or IEEE1394?

Thanks,
Shahar

“Doron Holan” wrote in message
news:xxxxx@ntdev…
IIRC, xpsp2 has IAD support. As for a device which supports it, I don’t
know of one offhand. We have a usb device simulator which we can use to
cook up this type of descriptor, so we don’t necessarily need a true hw
device to test IAD.

d

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Shahar Talmi
Sent: Monday, February 21, 2005 6:25 PM
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] USB composite class driver

Doron,
On what version does usbccgp introduce IAD support? Is it already
available
on winxp SP2? Can you give an example for a USB device that includes an
IAD
descriptor? I would like to get my hands on one and test it with the
product
I’m working on…

Thanks,
Shahar

“Doron Holan” wrote in message
news:xxxxx@ntdev…
Usbgccp splits the composite device into separate separate child
devices,
one per interface … with exceptions. It has special knowledge to know
to
group usb audio interfaces together for instance. On newer versions, it

also supports IAD (interface association descriptor) so that it can
group
interfaces into one child. It then munges the config descriptor for
each
child to appear as if the config descriptor contains only the interface
for
the child.

For power, it will not power down the parent until all the children are
powered down and vice versa. That is at least in simplistic terms what
it
does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and

tears. I think even with the access to the sources, it would be a near
impossible task to implement the usb core side of usb SS. In the end, I

think you will have to live with the limitations of the driver in terms
of
USB SS. Reverse engineering it into an upper filter would consume a
tremendous amount of man months. I would rate it 10 on a scale of 1 to
10
on difficulty (in terms of getting all the quirky rules right, of which
there are quite a few).

d

________________________________________
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common
Class
Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite
devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP)
that
expose multiple interfaces and do not have their own parent class
driver,
the system loads an extra driver, usbccgp.sys, between the hub driver
and
the client device drivers. The system assigns a separate PDO to each
interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not
found
any specifications on MSDN as to what this class driver does so I do not

know how practical it is to try to write a replacement driver for it.
Can
anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective
Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in

usbccgp “may be supported” in future versions of Windows. I am wondering
why
Microsoft hasn’t fixed this feature yet - is there something in the
architecture that makes it impossible to fix? Do they have a suggested
work-around (I haven’t found any) other than the obvious suggestion of
not
using composite devices, which really is not a practical suggestion for
laptops since there are more than a few readily-available and popular
consumer usb composite devices that plug into external usb ports, such
as
Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a
lower
filter driver and was wondering if those of you who have written upper
or
lower filter drivers for it would care to comment on what it was used,
etc.
I was wondering if a filter driver could be used to make Selective
Suspend
work for USB composite devices.

My goal is to find out if it possible to get around the lack of support
for
Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument:
‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@windows.microsoft.com
To unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@windows.microsoft.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

Here’s another vote for the Cypress EZ USB Fx2 Dev kit. Complete, flexible,
comes with toolset for building your own firmware, download driver and app,
built in re-enumeration support, etc. etc.

=====================
Mark Roddy

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Doron Holan
Sent: Tuesday, February 22, 2005 11:42 AM
To: Windows System Software Devs Interest List
Subject: RE: [ntdev] USB composite class driver

EZ USB FX2 is pretty standard. NetChip makes a pretty inexpensive device,
they just got bought out by PLX. It is almost a commodity market now.

I don’t know about PCMCIA or firewire device simulation, sorry. I do know
that you can you use the firewire stack to create virtual devices locally,
but that’s about all I know.

d

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Shahar Talmi
Sent: Tuesday, February 22, 2005 1:58 AM
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] USB composite class driver

Doron,
It’s funny you mention that because just yesterday someone from the QA team
asked me if I know any device simulators they can use in the QA lab. He told
me they were using something from PLX for simulating USB devices but they
are also looking for PCMCIA and IEEE1394 device simulators and cannot find
any commercial ones… What device simulator do you use for USB? Do you know
any simulators for PCMCIA or IEEE1394?

Thanks,
Shahar

“Doron Holan” wrote in message
news:xxxxx@ntdev…
IIRC, xpsp2 has IAD support. As for a device which supports it, I don’t
know of one offhand. We have a usb device simulator which we can use to
cook up this type of descriptor, so we don’t necessarily need a true hw
device to test IAD.

d

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Shahar Talmi
Sent: Monday, February 21, 2005 6:25 PM
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] USB composite class driver

Doron,
On what version does usbccgp introduce IAD support? Is it already available
on winxp SP2? Can you give an example for a USB device that includes an IAD
descriptor? I would like to get my hands on one and test it with the product
I’m working on…

Thanks,
Shahar

“Doron Holan” wrote in message
news:xxxxx@ntdev…
Usbgccp splits the composite device into separate separate child devices,
one per interface … with exceptions. It has special knowledge to know to
group usb audio interfaces together for instance. On newer versions, it

also supports IAD (interface association descriptor) so that it can group
interfaces into one child. It then munges the config descriptor for each
child to appear as if the config descriptor contains only the interface for
the child.

For power, it will not power down the parent until all the children are
powered down and vice versa. That is at least in simplistic terms what it
does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and

tears. I think even with the access to the sources, it would be a near
impossible task to implement the usb core side of usb SS. In the end, I

think you will have to live with the limitations of the driver in terms of
USB SS. Reverse engineering it into an upper filter would consume a
tremendous amount of man months. I would rate it 10 on a scale of 1 to 10
on difficulty (in terms of getting all the quirky rules right, of which
there are quite a few).

d

________________________________________
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class
Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite
devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that
expose multiple interfaces and do not have their own parent class driver,
the system loads an extra driver, usbccgp.sys, between the hub driver and
the client device drivers. The system assigns a separate PDO to each
interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found
any specifications on MSDN as to what this class driver does so I do not

know how practical it is to try to write a replacement driver for it.
Can
anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective
Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in

usbccgp “may be supported” in future versions of Windows. I am wondering why
Microsoft hasn’t fixed this feature yet - is there something in the
architecture that makes it impossible to fix? Do they have a suggested
work-around (I haven’t found any) other than the obvious suggestion of not
using composite devices, which really is not a practical suggestion for
laptops since there are more than a few readily-available and popular
consumer usb composite devices that plug into external usb ports, such as
Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower
filter driver and was wondering if those of you who have written upper or
lower filter drivers for it would care to comment on what it was used, etc.
I was wondering if a filter driver could be used to make Selective Suspend
work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for
Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument:
‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@windows.microsoft.com To
unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@windows.microsoft.com To
unsubscribe send a blank email to xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

Roddy, Mark wrote:

Here’s another vote for the Cypress EZ USB Fx2 Dev kit. Complete, flexible,
comes with toolset for building your own firmware, download driver and app,
built in re-enumeration support, etc. etc.

And my compliments on your spelling. The FX2 documentation insists on
referring to that process as “renumeration”, an abomination that is not
a word and does not even derive from the correct root. It is not
repeating the process of “numeration”.

I agree. The USB FX2 kit is pretty fun.

If you’re looking for a cute, inexpensive, version of the hardware that
you can download firmware to, check out the USB board in the OSR Online
store. You can build FX2 firmware using the (free downloadable) USB FX2
tools, and slam the code down to the board.

Regarding what Tim Roberts wrote:

And my compliments on your spelling. The FX2 documentation insists on
referring to that process as “renumeration”, an abomination that is not
a word and does not even derive from the correct root. It is not
repeating the process of “numeration”.

Cypress certainly knows this, but recall that Cypress has “renumeration”
trademarked. Annoying, but you can’t blame them for trying to
differentiate their product.

Peter
OSR

Will you be selling your hardware at WinHEC?


Don Burn (MVP, Windows DDK)
Windows 2k/XP/2k3 Filesystem and Driver Consulting
Remove StopSpam from the email to reply

“Peter Viscarola (OSR)” wrote in message
news:xxxxx@ntdev…
>I agree. The USB FX2 kit is pretty fun.
>
> If you’re looking for a cute, inexpensive, version of the hardware that
> you can download firmware to, check out the USB board in the OSR Online
> store. You can build FX2 firmware using the (free downloadable) USB FX2
> tools, and slam the code down to the board.
>

Don Burn wrote:

Will you be selling your hardware at WinHEC?

There are no sales allowed on the trade show floor at WinHEC, nor are
there any provisions to sell things directly during the DDC.

Of course, we can take orders for things during the shows. But in that
case, folks might as well order on the web.

Peter
OSR

Doron:

Sorry to be nit-picky here, but I just want to clarify what the limitations of usbccgp.sys really are. (I haven’t seen anything in the DDK about it’s limitations and I don’t want to go by what I read in the WinHec 2004 notes since those slides are written by PMs who aren’t writing the actual code).

Are you saying that usbccgp.sys does not support SS even if each client driver (one client driver per interface, per pdo) does support SS?

I would think that it doesn’t support SS because of the complexities you mentioned (trying to coordinate powering down a device that is shared among more than one driver), but I’m not sure - hence me again.

thanks
Sharon

----- Original Message -----
From: Doron Holanmailto:xxxxx
To: Windows System Software Devs Interest Listmailto:xxxxx
Sent: Monday, February 21, 2005 8:13 PM
Subject: RE: [ntdev] USB composite class driver

There is no spec.

SS is difficult to support b/c you have N entities that want to change state independently of each other and once you get them all to agree, you have to freeze out their state changes until you can commit the change (ie move into Dx) and then when one of them wants out, you have to bring every one else out of Dx. You have to do this while calling out into other drivers (meaning you have a pretty complex state machine) w/out locks being held for periods of time.

As for the c3 issue. It is not matter of SS in this case. The host controller itself is probably suspending the bus schedule, or there is some logic between the HC and the pci bus that allows C3 to be entered.

The coordination of the children into Dx is only one part. What I described was the machine going into lower power (ie an Sx state), not necessarily SS. Like I said previously, SS entails a lot more nasty logic b/c you have to do a lot more synchronization.

d


From: xxxxx@lists.osr.commailto:xxxxx [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 7:41 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] USB composite class driver

Doron:

Can you give me an idea of what specifically is the problem with usbccgp.sys (or the architecture) that makes it difficult to support SS?

Is there a spec for writing this class driver, so I can look at it or does Microsoft not share that?

(While what you said sounds reasonable, I need a little more concrete info.)

You said that usbccgp.sys won’t power down the parent until all the children are powered down (I also read this in Oney’s book) – this implies to me that it does support selective suspend. What, then, does Microsoft means when it says that usbccgp.sys doesn’t support selective suspend?

Another question I had is this:
I noticed on some laptops, that they will not enter C3 (you can tell by using Performance Monitor under Control Panel’s Administrative Tools) if you plug in a composite device such as a Microsoft wireless usb keyboard/mouse combo. This makes sense - that a composite device would hold off C3 (%C3 goes down to 0 in PerfMon with the usb combosite device plugged in).

However, on other laptops, I see them in C3 for around 50% of the time regardless if I have the composite keyboard plugged in or not. This does not make any sense to me, unless perhaps I’m misinterpreting what Microsoft said when they said that usbccgp.sys doesn’t support SS.

All the laptops were running XP SP2, by the way.

Please clarify.

thanks in advance,
Sharon
----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 5:40 PM
Subject: RE: [ntdev] USB composite class driver

Usbgccp splits the composite device into separate separate child devices, one per interface … with exceptions. It has special knowledge to know to group usb audio interfaces together for instance. On newer versions, it also supports IAD (interface association descriptor) so that it can group interfaces into one child. It then munges the config descriptor for each child to appear as if the config descriptor contains only the interface for the child.

For power, it will not power down the parent until all the children are powered down and vice versa. That is at least in simplistic terms what it does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and tears. I think even with the access to the sources, it would be a near impossible task to implement the usb core side of usb SS. In the end, I think you will have to live with the limitations of the driver in terms of USB SS. Reverse engineering it into an upper filter would consume a tremendous amount of man months. I would rate it 10 on a scale of 1 to 10 on difficulty (in terms of getting all the quirky rules right, of which there are quite a few).

d


From: xxxxx@listsosr.commailto:xxxxx [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that expose multiple interfaces and do not have their own parent class driver, the system loads an extra driver, usbccgp.sys, between the hub driver and the client device drivers. The system assigns a separate PDO to each interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found any specifications on MSDN as to what this class driver does so I do not know how practical it is to try to write a replacement driver for it. Can anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in usbccgp “may be supported” in future versions of Windows. I am wondering why Microsoft hasn’t fixed this feature yet - is there something in the architecture that makes it impossible to fix? Do they have a suggested work-around (I haven’t found any) other than the obvious suggestion of not using composite devices, which really is not a practical suggestion for laptops since there are more than a few readily-available and popular consumer usb composite devices that plug into external usb ports, such as Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower filter driver and was wondering if those of you who have written upper or lower filter drivers for it would care to comment on what it was used, etc. I was wondering if a filter driver could be used to make Selective Suspend work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.commailto:xxxxx


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.commailto:xxxxx


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.commailto:xxxxx

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.commailto:xxxxx


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.commailto:xxxxx</mailto:xxxxx></http:></mailto:xxxxx></http:></mailto:xxxxx></http:></mailto:xxxxx></http:></mailto:xxxxx></mailto:xxxxx></mailto:xxxxx></mailto:xxxxx></mailto:xxxxx>

There is a bit of confusion here.

  1. overall, for usb SS to work, every single client driver has to support it, otherwise just one device can keep usb SS from occurring b/c it remains in full power while the machine is in S0

  2. the support for the IOCTL and callback set is not present in usbgccp. This means, that no matter what the client tries to do, or if one of them does not support usb SS, usb SS will not occur.

d


From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Tuesday, February 22, 2005 3:08 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] USB composite class driver

Doron:
?
Sorry to be nit-picky here, but I just want to clarify what the limitations of usbccgp.sys really are. (I haven’t seen anything in the DDK about it’s limitations and I don’t want to go by what I read in the WinHec 2004 notes since those slides are written by PMs who? aren’t writing the actual code).
?
Are you saying that usbccgp.sys does not support SS even if each client driver?(one client driver per interface, per pdo)?does support SS?
?
?
I would think that it doesn’t support SS because of the complexities you mentioned (trying to coordinate powering down a device that is shared among more than one driver), but I’m not sure - hence me again.
?
thanks
Sharon
?
----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 8:13 PM
Subject: RE: [ntdev] USB composite class driver

There is no spec.?

SS is difficult to support b/c you have N entities that want to change state independently of each other and once you get them all to agree, you have to freeze out their state changes until you can commit the change (ie move into Dx) and then when one of them wants out, you have to bring every one else out of Dx.? You have to do this while calling out into other drivers (meaning you have a pretty complex state machine) w/out locks being held for periods of time.

As for the c3 issue.? It is not matter of SS? in this case.? The host controller itself is probably suspending the bus schedule, or there is some logic between the HC and the pci bus that allows C3 to be entered.

The coordination of the children into Dx is only one part.? What I described was the machine going into lower power (ie an Sx state), not necessarily SS.? Like I said previously, SS entails a lot more nasty logic b/c you have to do a lot more synchronization.

d


From: xxxxx@listsosr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 7:41 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] USB composite class driver

Doron:

Can you give me an idea of what specifically is the problem with usbccgp.sys (or the architecture) that makes it difficult to support SS?

Is there a spec for writing this class driver, so I can look at it or does Microsoft not share that?

(While what you said sounds reasonable, I need a little more concrete info.)

You said that usbccgp.sys won’t power down the parent until all the children are powered down (I also read this in Oney’s book) – this implies to me that it does support selective suspend. What, then, does Microsoft means when it says that usbccgp.sys doesn’t support selective suspend?

Another question I had is this:
I noticed on some laptops, that they will not enter C3 (you can tell by using Performance Monitor under Control Panel’s Administrative Tools) if you plug in a composite device such as a Microsoft wireless usb keyboard/mouse combo. This makes sense - that a composite device would hold off C3 (%C3 goes down to 0 in PerfMon with the usb combosite device plugged in).

However, on other laptops, I see them in C3 for around 50% of the time regardless if I have the composite keyboard plugged in or not. This does not make any sense to me, unless perhaps I’m misinterpreting what Microsoft said when they said that usbccgp.sys doesn’t support SS.

All the laptops were running XP SP2, by the way.

Please clarify.

thanks in advance,
Sharon
----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 5:40 PM
Subject: RE: [ntdev] USB composite class driver

Usbgccp splits the composite device into separate separate child devices, one per interface … with exceptions. It has special knowledge to know to group usb audio interfaces together for instance. On newer versions, it also supports IAD (interface association descriptor) so that it can group interfaces into one child. It then munges the config descriptor for each child to appear as if the config descriptor contains only the interface for the child.

For power, it will not power down the parent until all the children are powered down and vice versa. That is at least in simplistic terms what it does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and tears. I think even with the access to the sources, it would be a near impossible task to implement the usb core side of usb SS. In the end, I think you will have to live with the limitations of the driver in terms of USB SS. Reverse engineering it into an upper filter would consume a tremendous amount of man months. I would rate it 10 on a scale of 1 to 10 on difficulty (in terms of getting all the quirky rules right, of which there are quite a few).

d


From: xxxxx@listsosr.com [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that expose multiple interfaces and do not have their own parent class driver, the system loads an extra driver, usbccgp.sys, between the hub driver and the client device drivers. The system assigns a separate PDO to each interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found any specifications on MSDN as to what this class driver does so I do not know how practical it is to try to write a replacement driver for it. Can anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in usbccgp “may be supported” in future versions of Windows. I am wondering why Microsoft hasn’t fixed this feature yet - is there something in the architecture that makes it impossible to fix? Do they have a suggested work-around (I haven’t found any) other than the obvious suggestion of not using composite devices, which really is not a practical suggestion for laptops since there are more than a few readily-available and popular consumer usb composite devices that plug into external usb ports, such as Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower filter driver and was wondering if those of you who have written upper or lower filter drivers for it would care to comment on what it was used, etc. I was wondering if a filter driver could be used to make Selective Suspend work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.com

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

Thanks - it was #2 that I was unsure about.
Sharon
----- Original Message -----
From: Doron Holanmailto:xxxxx
To: Windows System Software Devs Interest Listmailto:xxxxx
Sent: Tuesday, February 22, 2005 3:42 PM
Subject: RE: [ntdev] USB composite class driver

There is a bit of confusion here.

1) overall, for usb SS to work, every single client driver has to support it, otherwise just one device can keep usb SS from occurring b/c it remains in full power while the machine is in S0

2) the support for the IOCTL and callback set is not present in usbgccp. This means, that no matter what the client tries to do, or if one of them does not support usb SS, usb SS will not occur.

d


From: xxxxx@lists.osr.commailto:xxxxx [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Tuesday, February 22, 2005 3:08 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] USB composite class driver

Doron:

Sorry to be nit-picky here, but I just want to clarify what the limitations of usbccgp.sys really are. (I haven’t seen anything in the DDK about it’s limitations and I don’t want to go by what I read in the WinHec 2004 notes since those slides are written by PMs who aren’t writing the actual code).

Are you saying that usbccgp.sys does not support SS even if each client driver (one client driver per interface, per pdo) does support SS?

I would think that it doesn’t support SS because of the complexities you mentioned (trying to coordinate powering down a device that is shared among more than one driver), but I’m not sure - hence me again.

thanks
Sharon

----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 8:13 PM
Subject: RE: [ntdev] USB composite class driver

There is no spec.

SS is difficult to support b/c you have N entities that want to change state independently of each other and once you get them all to agree, you have to freeze out their state changes until you can commit the change (ie move into Dx) and then when one of them wants out, you have to bring every one else out of Dx. You have to do this while calling out into other drivers (meaning you have a pretty complex state machine) w/out locks being held for periods of time.

As for the c3 issue. It is not matter of SS in this case. The host controller itself is probably suspending the bus schedule, or there is some logic between the HC and the pci bus that allows C3 to be entered.

The coordination of the children into Dx is only one part. What I described was the machine going into lower power (ie an Sx state), not necessarily SS. Like I said previously, SS entails a lot more nasty logic b/c you have to do a lot more synchronization.

d


From: xxxxx@listsosr.commailto:xxxxx [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 7:41 PM
To: Windows System Software Devs Interest List
Subject: Re: [ntdev] USB composite class driver

Doron:

Can you give me an idea of what specifically is the problem with usbccgp.sys (or the architecture) that makes it difficult to support SS?

Is there a spec for writing this class driver, so I can look at it or does Microsoft not share that?

(While what you said sounds reasonable, I need a little more concrete info.)

You said that usbccgp.sys won’t power down the parent until all the children are powered down (I also read this in Oney’s book) – this implies to me that it does support selective suspend. What, then, does Microsoft means when it says that usbccgp.sys doesn’t support selective suspend?

Another question I had is this:
I noticed on some laptops, that they will not enter C3 (you can tell by using Performance Monitor under Control Panel’s Administrative Tools) if you plug in a composite device such as a Microsoft wireless usb keyboard/mouse combo. This makes sense - that a composite device would hold off C3 (%C3 goes down to 0 in PerfMon with the usb combosite device plugged in).

However, on other laptops, I see them in C3 for around 50% of the time regardless if I have the composite keyboard plugged in or not. This does not make any sense to me, unless perhaps I’m misinterpreting what Microsoft said when they said that usbccgp.sys doesn’t support SS.

All the laptops were running XP SP2, by the way.

Please clarify.

thanks in advance,
Sharon
----- Original Message -----
From: Doron Holan
To: Windows System Software Devs Interest List
Sent: Monday, February 21, 2005 5:40 PM
Subject: RE: [ntdev] USB composite class driver

Usbgccp splits the composite device into separate separate child devices, one per interface … with exceptions. It has special knowledge to know to group usb audio interfaces together for instance. On newer versions, it also supports IAD (interface association descriptor) so that it can group interfaces into one child. It then munges the config descriptor for each child to appear as if the config descriptor contains only the interface for the child.

For power, it will not power down the parent until all the children are powered down and vice versa. That is at least in simplistic terms what it does.

Usb SS cannot be implemented by a filter w/out a lot of pain, sweat, and tears. I think even with the access to the sources, it would be a near impossible task to implement the usb core side of usb SS. In the end, I think you will have to live with the limitations of the driver in terms of USB SS. Reverse engineering it into an upper filter would consume a tremendous amount of man months. I would rate it 10 on a scale of 1 to 10 on difficulty (in terms of getting all the quirky rules right, of which there are quite a few).

d

________________________________________
From: xxxxx@listsosr.commailto:xxxxx [mailto:xxxxx@lists.osr.com] On Behalf Of S. Drasnin
Sent: Monday, February 21, 2005 5:13 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB composite class driver

hi

I’m trying to find out more information about the Microsoft USB Common Class Generic Parent Driver (usbccgp.sys) that gets loaded for USB composite devices on Windows XP.

(Note that according to MSDN, for composite USB devices (on Windows XP) that expose multiple interfaces and do not have their own parent class driver, the system loads an extra driver, usbccgp.sys, between the hub driver and the client device drivers. The system assigns a separate PDO to each interface of a composite device.)

(1) Does anybody know what the tasks are of usbccgp.sys? I have not found any specifications on MSDN as to what this class driver does so I do not know how practical it is to try to write a replacement driver for it. Can anybody comment on what it would take to do this?

(2) Also, what is about this driver that makes it not support Selective Suspend? I found on a USB FAQ from WinHEC 2004 that Selective Suspend in usbccgp “may be supported” in future versions of Windows. I am wondering why Microsoft hasn’t fixed this feature yet - is there something in the architecture that makes it impossible to fix? Do they have a suggested work-around (I haven’t found any) other than the obvious suggestion of not using composite devices, which really is not a practical suggestion for laptops since there are more than a few readily-available and popular consumer usb composite devices that plug into external usb ports, such as Microsoft’s wireless USB/mouse combos.

(3) Also, I read that somebody (Carsten Schultz, Feb 6, 2002) wrote a lower filter driver and was wondering if those of you who have written upper or lower filter drivers for it would care to comment on what it was used, etc. I was wondering if a filter driver could be used to make Selective Suspend work for USB composite devices.

My goal is to find out if it possible to get around the lack of support for Selective Suspend by usbccgp.sys for USB composite devices.

thanks in advance,
Sharon xxxxx@msn.commailto:xxxxx


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.commailto:xxxxx


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.commailto:xxxxx

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.commailto:xxxxx


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@listsosr.commailto:xxxxx

Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.commailto:xxxxx


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256http:

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.commailto:xxxxx</mailto:xxxxx></http:></mailto:xxxxx></http:></mailto:xxxxx></http:></mailto:xxxxx></http:></mailto:xxxxx></http:></mailto:xxxxx></http:></mailto:xxxxx></mailto:xxxxx></mailto:xxxxx></mailto:xxxxx></mailto:xxxxx></mailto:xxxxx>