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
;
65 } USB_DEVICE
, *PUSB_DEVICE
;
67 typedef struct _HUB_DEVICE_EXTENSION
71 PDEVICE_OBJECT LowerDevice
;
73 PDEVICE_OBJECT Children
[USB_MAXCHILDREN
];
75 PUSB_DEVICE RootHubUsbDevice
;
77 PDEVICE_OBJECT RootHubPdo
;
78 PDEVICE_OBJECT RootHubFdo
;
82 USB_BUS_INTERFACE_HUB_V5 HubInterface
;
83 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface
;
85 USB_HUB_DESCRIPTOR HubDescriptor
;
86 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor
;
87 USB_CONFIGURATION_DESCRIPTOR HubConfig
;
88 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo
;
90 /* Fields valid only when IsFDO == FALSE */
91 UNICODE_STRING DeviceId
; // REG_SZ
92 UNICODE_STRING InstanceId
; // REG_SZ
93 UNICODE_STRING HardwareIds
; // REG_MULTI_SZ
94 UNICODE_STRING CompatibleIds
; // REG_MULTI_SZ
95 UNICODE_STRING SymbolicLinkName
;
96 } HUB_DEVICE_EXTENSION
, *PHUB_DEVICE_EXTENSION
;
101 IN PDEVICE_OBJECT DeviceObject
,
106 IN PDEVICE_OBJECT DeviceObject
,
111 IN PDEVICE_OBJECT DeviceObject
,
117 IN PDEVICE_OBJECT DeviceObject
,
121 UsbhubDeviceControlFdo(
122 IN PDEVICE_OBJECT DeviceObject
,
128 IN PDEVICE_OBJECT DeviceObject
,
133 IN PDEVICE_OBJECT DeviceObject
,
137 UsbhubDuplicateUnicodeString(
138 OUT PUNICODE_STRING Destination
,
139 IN PUNICODE_STRING Source
,
140 IN POOL_TYPE PoolType
);
143 UsbhubInitMultiSzString(
144 OUT PUNICODE_STRING Destination
,
145 ... /* list of PCSZ */);
150 IN PDEVICE_OBJECT DeviceObject
,
154 UsbhubInternalDeviceControlPdo(
155 IN PDEVICE_OBJECT DeviceObject
,