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 _HUB_CHILDDEVICE_EXTENSION
69 PDEVICE_OBJECT Parent
;
70 PWCHAR DeviceId
; // REG_SZ
71 PWCHAR InstanceId
; // REG_SZ
72 PWCHAR HardwareIds
; // REG_MULTI_SZ
73 PWCHAR CompatibleIds
; // REG_MULTI_SZ
74 PWCHAR TextDescription
;
75 UNICODE_STRING SymbolicLinkName
;
76 } HUB_CHILDDEVICE_EXTENSION
, *PHUB_CHILDDEVICE_EXTENSION
;
78 typedef struct _HUB_DEVICE_EXTENSION
82 PDEVICE_OBJECT LowerDevice
;
84 PDEVICE_OBJECT Children
[USB_MAXCHILDREN
];
86 PUSB_DEVICE UsbChildren
[USB_MAXCHILDREN
];
88 PUSB_DEVICE RootHubUsbDevice
;
90 PDEVICE_OBJECT RootHubPdo
;
91 PDEVICE_OBJECT RootHubFdo
;
95 USHORT PortStatus
[256];
97 USB_BUS_INTERFACE_HUB_V5 HubInterface
;
98 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface
;
100 USB_HUB_DESCRIPTOR HubDescriptor
;
101 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor
;
103 USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor
;
104 USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor
;
105 USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor
;
107 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo
;
108 USB_DEVICE_INFORMATION_0 DeviceInformation
;
110 WORK_QUEUE_ITEM WorkItem
;
112 USBD_CONFIGURATION_HANDLE ConfigurationHandle
;
113 USBD_PIPE_HANDLE PipeHandle
;
115 UNICODE_STRING SymbolicLinkName
;
116 } HUB_DEVICE_EXTENSION
, *PHUB_DEVICE_EXTENSION
;
121 IN PDEVICE_OBJECT DeviceObject
,
126 IN PDEVICE_OBJECT DeviceObject
,
131 IN PDEVICE_OBJECT DeviceObject
,
137 IN PDEVICE_OBJECT DeviceObject
,
141 UsbhubDeviceControlFdo(
142 IN PDEVICE_OBJECT DeviceObject
,
148 IN PDEVICE_OBJECT DeviceObject
,
153 IN PDEVICE_OBJECT DeviceObject
,
157 UsbhubDuplicateUnicodeString(
158 OUT PUNICODE_STRING Destination
,
159 IN PUNICODE_STRING Source
,
160 IN POOL_TYPE PoolType
);
163 UsbhubInitMultiSzString(
164 OUT PUNICODE_STRING Destination
,
165 .../* list of PCSZ */);
170 IN PDEVICE_OBJECT DeviceObject
,
174 UsbhubInternalDeviceControlPdo(
175 IN PDEVICE_OBJECT DeviceObject
,