IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO

Hi,

A 3rd party driver sends this IOCTL down to my USB Bus driver. There
doesn’t seem to be good documentation on it.

I’m assuming that in Parameters.Others.Arg1 I need to fill in the Hub’s
FDO pointer. It doesn’t seem to be working.

Any ideas?

Thanks

Pankaj

> Hi,

A 3rd party driver sends this IOCTL down to my USB Bus driver. There
doesn’t
seem to be good documentation on it.

I’m assuming that in Parameters.Others.Arg1 I need to fill in the
Hub’s FDO
pointer. It doesn’t seem to be working.

Any ideas?

I wonder if you are supposed to give it a USB_HUB_INFORMATION struct?

What is the size of the buffer that you are passed? Is it the same size
as a pointer or is it something bigger?

You could also try finding a real hub device and passing it that IOCTL
and see what it says. Or use the debugger and do a spot of reverse
engineering.

Under ReactOS (windows clone), it seems to return a pointer to a ‘struct
usb_device’, which is purely private data and almost certainly won’t
match what Windows uses (ReactOS probably inherited its USB subsystem
from Linux or BSD). This implies that this IOCTL is a purely internal
(eg windows internal only) one and whatever you pass needs to match the
internal data that the caller expects.

If the caller is a 3rd party one and they are making use of this data
then they have most likely done some reverse engineering themselves.
Maybe you should start from seeing what fields the caller is looking
for?

Hope the above vague and contradictory ramblings are of some use :slight_smile:

James

I don’t know what this IOCTL used to return, but if you try sending it
on Win7, usbhub will fail it.

On 1/28/2011 5:59 PM, James Harper wrote:

> Hi,
>
> A 3rd party driver sends this IOCTL down to my USB Bus driver. There
doesn’t
> seem to be good documentation on it.
>
> I’m assuming that in Parameters.Others.Arg1 I need to fill in the
Hub’s FDO
> pointer. It doesn’t seem to be working.
>
> Any ideas?
>

I wonder if you are supposed to give it a USB_HUB_INFORMATION struct?

What is the size of the buffer that you are passed? Is it the same size
as a pointer or is it something bigger?

You could also try finding a real hub device and passing it that IOCTL
and see what it says. Or use the debugger and do a spot of reverse
engineering.

Under ReactOS (windows clone), it seems to return a pointer to a ‘struct
usb_device’, which is purely private data and almost certainly won’t
match what Windows uses (ReactOS probably inherited its USB subsystem
from Linux or BSD). This implies that this IOCTL is a purely internal
(eg windows internal only) one and whatever you pass needs to match the
internal data that the caller expects.

If the caller is a 3rd party one and they are making use of this data
then they have most likely done some reverse engineering themselves.
Maybe you should start from seeing what fields the caller is looking
for?

Hope the above vague and contradictory ramblings are of some use :slight_smile:

James