1#pragma once
2
3#define _USBBUSIF_
4
5#ifndef USB_BUSIFFN
6#define USB_BUSIFFN __stdcall
7#endif
8
9#if (NTDDI_VERSION >= NTDDI_WINXP)
10
11#if !defined(_HUBBUSIF_)
12typedef PVOID PUSB_DEVICE_HANDLE;
13#endif
14
15typedef NTSTATUS
16(USB_BUSIFFN *PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB) (
17  IN PVOID,
18  IN PURB);
19
20#define USB_HCD_CAPS_SUPPORTS_RT_THREADS    0x00000001
21
22typedef VOID
23(USB_BUSIFFN *PUSB_BUSIFFN_GETUSBDI_VERSION) (
24  IN PVOID,
25  OUT PUSBD_VERSION_INFORMATION OPTIONAL,
26  OUT PULONG OPTIONAL);
27
28typedef NTSTATUS
29(USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_TIME) (
30  IN PVOID,
31  OUT PULONG OPTIONAL);
32
33typedef NTSTATUS
34(USB_BUSIFFN *PUSB_BUSIFFN_ENUM_LOG_ENTRY) (
35  IN PVOID,
36  IN ULONG,
37  IN ULONG,
38  IN ULONG,
39  IN ULONG);
40
41typedef struct _USB_BUS_INFORMATION_LEVEL_0 {
42  ULONG TotalBandwidth;
43  ULONG ConsumedBandwidth;
44} USB_BUS_INFORMATION_LEVEL_0, *PUSB_BUS_INFORMATION_LEVEL_0;
45
46typedef struct _USB_BUS_INFORMATION_LEVEL_1 {
47  ULONG TotalBandwidth;
48  ULONG ConsumedBandwidth;
49  ULONG ControllerNameLength;
50  WCHAR ControllerNameUnicodeString[1];
51} USB_BUS_INFORMATION_LEVEL_1, *PUSB_BUS_INFORMATION_LEVEL_1;
52
53typedef NTSTATUS
54(USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_INFORMATION) (
55  IN PVOID,
56  IN ULONG,
57  IN OUT PVOID,
58  OUT PULONG,
59  OUT PULONG OPTIONAL);
60
61typedef BOOLEAN
62(USB_BUSIFFN *PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED) (
63  IN PVOID OPTIONAL);
64
65#define USB_BUSIF_USBDI_VERSION_0         0x0000
66#define USB_BUSIF_USBDI_VERSION_1         0x0001
67#define USB_BUSIF_USBDI_VERSION_2         0x0002
68#define USB_BUSIF_USBDI_VERSION_3         0x0003
69
70DEFINE_GUID(USB_BUS_INTERFACE_USBDI_GUID,
710xb1a96a13, 0x3de0, 0x4574, 0x9b, 0x1, 0xc0, 0x8f, 0xea, 0xb3, 0x18, 0xd6);
72
73typedef struct _USB_BUS_INTERFACE_USBDI_V0 {
74  USHORT Size;
75  USHORT Version;
76  PVOID BusContext;
77  PINTERFACE_REFERENCE InterfaceReference;
78  PINTERFACE_DEREFERENCE InterfaceDereference;
79  PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion;
80  PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime;
81  PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb;
82  PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation;
83} USB_BUS_INTERFACE_USBDI_V0, *PUSB_BUS_INTERFACE_USBDI_V0;
84
85typedef struct _USB_BUS_INTERFACE_USBDI_V1 {
86  USHORT Size;
87  USHORT Version;
88  PVOID BusContext;
89  PINTERFACE_REFERENCE InterfaceReference;
90  PINTERFACE_DEREFERENCE InterfaceDereference;
91  PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion;
92  PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime;
93  PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb;
94  PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation;
95  PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed;
96} USB_BUS_INTERFACE_USBDI_V1, *PUSB_BUS_INTERFACE_USBDI_V1;
97
98typedef struct _USB_BUS_INTERFACE_USBDI_V2 {
99  USHORT Size;
100  USHORT Version;
101  PVOID BusContext;
102  PINTERFACE_REFERENCE InterfaceReference;
103  PINTERFACE_DEREFERENCE InterfaceDereference;
104  PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion;
105  PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime;
106  PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb;
107  PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation;
108  PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed;
109  PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry;
110} USB_BUS_INTERFACE_USBDI_V2, *PUSB_BUS_INTERFACE_USBDI_V2;
111
112#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
113
114#if (NTDDI_VERSION >= NTDDI_VISTA)
115
116typedef NTSTATUS
117(USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_TIME_EX) (
118  IN PVOID OPTIONAL,
119  OUT PULONG OPTIONAL);
120
121typedef NTSTATUS
122(USB_BUSIFFN *PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE) (
123  IN PVOID OPTIONAL,
124  OUT PULONG OPTIONAL,
125  OUT PUSHORT OPTIONAL,
126  OUT PUSHORT OPTIONAL,
127  OUT PUCHAR OPTIONAL,
128  OUT PUCHAR OPTIONAL,
129  OUT PUCHAR OPTIONAL,
130  OUT PUCHAR OPTIONAL);
131
132typedef struct _USB_BUS_INTERFACE_USBDI_V3 {
133  USHORT Size;
134  USHORT Version;
135  PVOID BusContext;
136  PINTERFACE_REFERENCE InterfaceReference;
137  PINTERFACE_DEREFERENCE InterfaceDereference;
138  PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion;
139  PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime;
140  PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb;
141  PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation;
142  PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed;
143  PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry;
144  PUSB_BUSIFFN_QUERY_BUS_TIME_EX QueryBusTimeEx;
145  PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE QueryControllerType;
146} USB_BUS_INTERFACE_USBDI_V3, *PUSB_BUS_INTERFACE_USBDI_V3;
147
148DEFINE_GUID(USB_BUS_INTERFACE_USBC_CONFIGURATION_GUID,
149	0x893b6a96, 0xb7f, 0x4d4d, 0xbd, 0xb4, 0xbb, 0xd4, 0xce, 0xeb, 0xb3, 0x1c);
150
151#define USBC_FUNCTION_FLAG_APPEND_ID 0x1
152
153typedef struct _USBC_FUNCTION_DESCRIPTOR{
154  UCHAR FunctionNumber;
155  UCHAR NumberOfInterfaces;
156  PUSB_INTERFACE_DESCRIPTOR *InterfaceDescriptorList;
157  UNICODE_STRING HardwareId;
158  UNICODE_STRING CompatibleId;
159  UNICODE_STRING FunctionDescription;
160  ULONG FunctionFlags;
161  PVOID Reserved;
162} USBC_FUNCTION_DESCRIPTOR, *PUSBC_FUNCTION_DESCRIPTOR;
163
164typedef
165NTSTATUS
166(USB_BUSIFFN *USBC_START_DEVICE_CALLBACK)(
167  IN PUSB_DEVICE_DESCRIPTOR DeviceDescriptor,
168  IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
169  OUT PUSBC_FUNCTION_DESCRIPTOR *FunctionDescriptorBuffer,
170  OUT PULONG FunctionDescriptorBufferLength,
171  IN PDEVICE_OBJECT FdoDeviceObject,
172  IN PDEVICE_OBJECT PdoDeviceObject);
173
174typedef
175BOOLEAN
176(USB_BUSIFFN *USBC_PDO_ENABLE_CALLBACK)(
177  IN PVOID  Context,
178  IN USHORT FirstInterfaceNumber,
179  IN USHORT NumberOfInterfaces,
180  IN UCHAR  FunctionClass,
181  IN UCHAR  FunctionSubClass,
182  IN UCHAR  FunctionProtocol);
183
184#define USBC_DEVICE_CONFIGURATION_INTERFACE_VERSION_1         0x0001
185
186typedef struct _USBC_DEVICE_CONFIGURATION_INTERFACE_V1 {
187  USHORT Size;
188  USHORT Version;
189  PVOID Context;
190  PINTERFACE_REFERENCE InterfaceReference;
191  PINTERFACE_DEREFERENCE InterfaceDereference;
192  USBC_START_DEVICE_CALLBACK StartDeviceCallback;
193  USBC_PDO_ENABLE_CALLBACK   PdoEnableCallback;
194  PVOID Reserved[7];
195} USBC_DEVICE_CONFIGURATION_INTERFACE_V1, *PUSBC_DEVICE_CONFIGURATION_INTERFACE_V1;
196
197#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
198
199