7 //BROKEN: #include <usbprotocoldefs.h>
9 #define USB_HUB_TAG 'hbsu'
10 #define USB_MAXCHILDREN 127
12 /* Lifted from broken header above */
13 #define C_HUB_LOCAL_POWER 0
14 #define C_HUB_OVER_CURRENT 1
15 #define PORT_CONNECTION 0
17 #define PORT_SUSPEND 2
18 #define PORT_OVER_CURRENT 3
21 #define PORT_LOW_SPEED 9
22 #define C_PORT_CONNECTION 16
23 #define C_PORT_ENABLE 17
24 #define C_PORT_SUSPEND 18
25 #define C_PORT_OVER_CURRENT 19
26 #define C_PORT_RESET 20
28 #define PORT_INDICATOR 22
30 typedef struct _USB_ENDPOINT
34 struct _USB_INTERFACE
*Interface
;
35 USB_ENDPOINT_DESCRIPTOR EndPointDescriptor
;
36 } USB_ENDPOINT
, *PUSB_ENDPOINT
;
38 typedef struct _USB_INTERFACE
40 struct _USB_CONFIGURATION
*Config
;
41 USB_INTERFACE_DESCRIPTOR InterfaceDescriptor
;
42 USB_ENDPOINT
*EndPoints
[];
43 } USB_INTERFACE
, *PUSB_INTERFACE
;
45 typedef struct _USB_CONFIGURATION
47 struct _USB_DEVICE
*Device
;
48 USB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
;
49 USB_INTERFACE
*Interfaces
[];
50 } USB_CONFIGURATION
, *PUSB_CONFIGURATION
;
52 typedef struct _USB_DEVICE
58 USB_DEVICE_SPEED DeviceSpeed
;
59 USB_DEVICE_TYPE DeviceType
;
60 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
61 USB_CONFIGURATION
*ActiveConfig
;
62 USB_INTERFACE
*ActiveInterface
;
63 USB_CONFIGURATION
**Configs
;
64 } USB_DEVICE
, *PUSB_DEVICE
;
66 typedef struct _WORKITEMDATA
68 WORK_QUEUE_ITEM WorkItem
;
70 } WORKITEMDATA
, *PWORKITEMDATA
;
72 typedef struct _HUB_CHILDDEVICE_EXTENSION
75 PDEVICE_OBJECT Parent
;
76 PWCHAR DeviceId
; // REG_SZ
77 PWCHAR InstanceId
; // REG_SZ
78 PWCHAR HardwareIds
; // REG_MULTI_SZ
79 PWCHAR CompatibleIds
; // REG_MULTI_SZ
80 PWCHAR TextDescription
;
81 UNICODE_STRING SymbolicLinkName
;
82 } HUB_CHILDDEVICE_EXTENSION
, *PHUB_CHILDDEVICE_EXTENSION
;
84 typedef struct _HUB_DEVICE_EXTENSION
88 PDEVICE_OBJECT LowerDevice
;
90 PDEVICE_OBJECT Children
[USB_MAXCHILDREN
];
92 PUSB_DEVICE UsbChildren
[USB_MAXCHILDREN
];
94 PUSB_DEVICE RootHubUsbDevice
;
96 PDEVICE_OBJECT RootHubPdo
;
97 PDEVICE_OBJECT RootHubFdo
;
101 USHORT PortStatus
[256];
104 USB_BUS_INTERFACE_HUB_V5 HubInterface
;
105 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface
;
107 USB_HUB_DESCRIPTOR HubDescriptor
;
108 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor
;
110 USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor
;
111 USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor
;
112 USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor
;
114 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo
;
115 USB_DEVICE_INFORMATION_0 DeviceInformation
;
117 USBD_CONFIGURATION_HANDLE ConfigurationHandle
;
118 USBD_PIPE_HANDLE PipeHandle
;
120 UNICODE_STRING SymbolicLinkName
;
121 } HUB_DEVICE_EXTENSION
, *PHUB_DEVICE_EXTENSION
;
126 IN PDEVICE_OBJECT DeviceObject
,
131 IN PDEVICE_OBJECT DeviceObject
,
136 IN PDEVICE_OBJECT DeviceObject
,
142 IN PDEVICE_OBJECT DeviceObject
,
146 UsbhubDeviceControlFdo(
147 IN PDEVICE_OBJECT DeviceObject
,
153 IN PDEVICE_OBJECT DeviceObject
,
158 IN PDEVICE_OBJECT DeviceObject
,
162 UsbhubDuplicateUnicodeString(
163 OUT PUNICODE_STRING Destination
,
164 IN PUNICODE_STRING Source
,
165 IN POOL_TYPE PoolType
);
168 UsbhubInitMultiSzString(
169 OUT PUNICODE_STRING Destination
,
170 .../* list of PCSZ */);
175 IN PDEVICE_OBJECT DeviceObject
,
179 UsbhubInternalDeviceControlPdo(
180 IN PDEVICE_OBJECT DeviceObject
,