13 //BROKEN: #include <usbprotocoldefs.h>
14 #include <pseh/pseh2.h>
16 #define USB_HUB_TAG 'hbsu'
17 #define USB_MAXCHILDREN 127
19 // Lifted from broken header above
20 #define C_HUB_LOCAL_POWER 0
21 #define C_HUB_OVER_CURRENT 1
22 #define PORT_CONNECTION 0
24 #define PORT_SUSPEND 2
25 #define PORT_OVER_CURRENT 3
28 #define PORT_LOW_SPEED 9
29 #define C_PORT_CONNECTION 16
30 #define C_PORT_ENABLE 17
31 #define C_PORT_SUSPEND 18
32 #define C_PORT_OVER_CURRENT 19
33 #define C_PORT_RESET 20
35 #define PORT_INDICATOR 22
37 typedef struct _PORT_STATUS_CHANGE
41 } PORT_STATUS_CHANGE
, *PPORT_STATUS_CHANGE
;
43 typedef struct _WORK_ITEM_DATA
45 WORK_QUEUE_ITEM WorkItem
;
47 } WORK_ITEM_DATA
, *PWORK_ITEM_DATA
;
52 } COMMON_DEVICE_EXTENSION
, *PCOMMON_DEVICE_EXTENSION
;
54 typedef struct _HUB_CHILDDEVICE_EXTENSION
56 COMMON_DEVICE_EXTENSION Common
;
57 PDEVICE_OBJECT ParentDeviceObject
;
58 PUSB_DEVICE_HANDLE UsbDeviceHandle
;
60 UNICODE_STRING usDeviceId
;
61 UNICODE_STRING usInstanceId
;
62 UNICODE_STRING usHardwareIds
;
63 UNICODE_STRING usCompatibleIds
;
64 UNICODE_STRING usTextDescription
;
65 UNICODE_STRING usLocationInformation
;
66 USB_DEVICE_DESCRIPTOR DeviceDesc
;
67 PUSB_CONFIGURATION_DESCRIPTOR FullConfigDesc
;
68 UNICODE_STRING SymbolicLinkName
;
69 } HUB_CHILDDEVICE_EXTENSION
, *PHUB_CHILDDEVICE_EXTENSION
;
71 typedef struct _HUB_DEVICE_EXTENSION
73 COMMON_DEVICE_EXTENSION Common
;
74 PDEVICE_OBJECT LowerDeviceObject
;
76 PDEVICE_OBJECT ChildDeviceObject
[USB_MAXCHILDREN
];
77 PDEVICE_OBJECT RootHubPhysicalDeviceObject
;
78 PDEVICE_OBJECT RootHubFunctionalDeviceObject
;
82 PORT_STATUS_CHANGE
*PortStatusChange
;
86 USB_BUS_INTERFACE_HUB_V5 HubInterface
;
87 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface
;
89 USB_HUB_DESCRIPTOR HubDescriptor
;
90 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor
;
91 USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor
;
92 USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor
;
93 USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor
;
95 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo
;
96 USB_DEVICE_INFORMATION_0 DeviceInformation
;
98 USBD_CONFIGURATION_HANDLE ConfigurationHandle
;
99 USBD_PIPE_HANDLE PipeHandle
;
102 UNICODE_STRING SymbolicLinkName
;
103 } HUB_DEVICE_EXTENSION
, *PHUB_DEVICE_EXTENSION
;
108 IN PDEVICE_OBJECT DeviceObject
,
113 IN PDEVICE_OBJECT DeviceObject
,
118 IN PDEVICE_OBJECT DeviceObject
,
123 USBHUB_FdoHandleDeviceControl(
124 PDEVICE_OBJECT DeviceObject
,
129 PDEVICE_OBJECT DeviceObject
,
135 IN PDEVICE_OBJECT DeviceObject
,
140 IN PDEVICE_OBJECT DeviceObject
,
146 PDEVICE_OBJECT DeviceObject
,
150 USBHUB_PdoHandleInternalDeviceControl(
151 PDEVICE_OBJECT DeviceObject
,
155 DumpDeviceDescriptor(
156 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
);
159 DumpConfigurationDescriptor(
160 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
);
163 DumpFullConfigurationDescriptor(
164 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
);
167 GetPortStatusAndChange(
168 IN PDEVICE_OBJECT RootHubDeviceObject
,
170 OUT PPORT_STATUS_CHANGE StatusChange
);