14 //BROKEN: #include <usbprotocoldefs.h>
15 #include <pseh/pseh2.h>
17 #define USB_HUB_TAG 'hbsu'
18 #define USB_MAXCHILDREN 127
20 // Lifted from broken header above
21 #define C_HUB_LOCAL_POWER 0
22 #define C_HUB_OVER_CURRENT 1
23 #define PORT_CONNECTION 0
25 #define PORT_SUSPEND 2
26 #define PORT_OVER_CURRENT 3
29 #define PORT_LOW_SPEED 9
30 #define C_PORT_CONNECTION 16
31 #define C_PORT_ENABLE 17
32 #define C_PORT_SUSPEND 18
33 #define C_PORT_OVER_CURRENT 19
34 #define C_PORT_RESET 20
36 #define PORT_INDICATOR 22
38 typedef struct _PORT_STATUS_CHANGE
42 } PORT_STATUS_CHANGE
, *PPORT_STATUS_CHANGE
;
44 typedef struct _WORK_ITEM_DATA
46 WORK_QUEUE_ITEM WorkItem
;
48 } WORK_ITEM_DATA
, *PWORK_ITEM_DATA
;
53 } COMMON_DEVICE_EXTENSION
, *PCOMMON_DEVICE_EXTENSION
;
55 typedef struct _HUB_CHILDDEVICE_EXTENSION
57 COMMON_DEVICE_EXTENSION Common
;
58 PDEVICE_OBJECT ParentDeviceObject
;
59 PUSB_DEVICE_HANDLE UsbDeviceHandle
;
61 UNICODE_STRING usDeviceId
;
62 UNICODE_STRING usInstanceId
;
63 UNICODE_STRING usHardwareIds
;
64 UNICODE_STRING usCompatibleIds
;
65 UNICODE_STRING usTextDescription
;
66 UNICODE_STRING usLocationInformation
;
67 USB_DEVICE_DESCRIPTOR DeviceDesc
;
68 PUSB_CONFIGURATION_DESCRIPTOR FullConfigDesc
;
69 UNICODE_STRING SymbolicLinkName
;
70 } HUB_CHILDDEVICE_EXTENSION
, *PHUB_CHILDDEVICE_EXTENSION
;
72 typedef struct _HUB_DEVICE_EXTENSION
74 COMMON_DEVICE_EXTENSION Common
;
75 PDEVICE_OBJECT LowerDeviceObject
;
77 PDEVICE_OBJECT ChildDeviceObject
[USB_MAXCHILDREN
];
78 PDEVICE_OBJECT RootHubPhysicalDeviceObject
;
79 PDEVICE_OBJECT RootHubFunctionalDeviceObject
;
84 PORT_STATUS_CHANGE
*PortStatusChange
;
88 USB_BUS_INTERFACE_HUB_V5 HubInterface
;
89 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface
;
91 USB_HUB_DESCRIPTOR HubDescriptor
;
92 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor
;
93 USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor
;
94 USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor
;
95 USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor
;
97 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo
;
98 USB_DEVICE_INFORMATION_0 DeviceInformation
;
100 USBD_CONFIGURATION_HANDLE ConfigurationHandle
;
101 USBD_PIPE_HANDLE PipeHandle
;
104 UNICODE_STRING SymbolicLinkName
;
105 } HUB_DEVICE_EXTENSION
, *PHUB_DEVICE_EXTENSION
;
110 IN PDEVICE_OBJECT DeviceObject
,
115 IN PDEVICE_OBJECT DeviceObject
,
120 IN PDEVICE_OBJECT DeviceObject
,
125 USBHUB_FdoHandleDeviceControl(
126 PDEVICE_OBJECT DeviceObject
,
131 PDEVICE_OBJECT DeviceObject
,
137 IN PDEVICE_OBJECT DeviceObject
,
142 IN PDEVICE_OBJECT DeviceObject
,
148 PDEVICE_OBJECT DeviceObject
,
152 USBHUB_PdoHandleInternalDeviceControl(
153 PDEVICE_OBJECT DeviceObject
,
157 DumpDeviceDescriptor(
158 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
);
161 DumpConfigurationDescriptor(
162 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
);
165 DumpFullConfigurationDescriptor(
166 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
);
169 GetPortStatusAndChange(
170 IN PDEVICE_OBJECT RootHubDeviceObject
,
172 OUT PPORT_STATUS_CHANGE StatusChange
);