6 #define USB_BUSIFFN __stdcall
9 #if (NTDDI_VERSION >= NTDDI_WINXP)
11 #if !defined(_HUBBUSIF_)
12 typedef PVOID PUSB_DEVICE_HANDLE
;
18 (USB_BUSIFFN
*PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB
) (
22 #define USB_HCD_CAPS_SUPPORTS_RT_THREADS 0x00000001
25 (USB_BUSIFFN
*PUSB_BUSIFFN_GETUSBDI_VERSION
) (
27 _Out_opt_ PUSBD_VERSION_INFORMATION
,
33 (USB_BUSIFFN
*PUSB_BUSIFFN_QUERY_BUS_TIME
) (
38 (USB_BUSIFFN
*PUSB_BUSIFFN_ENUM_LOG_ENTRY
) (
45 typedef struct _USB_BUS_INFORMATION_LEVEL_0
{
47 ULONG ConsumedBandwidth
;
48 } USB_BUS_INFORMATION_LEVEL_0
, *PUSB_BUS_INFORMATION_LEVEL_0
;
50 typedef struct _USB_BUS_INFORMATION_LEVEL_1
{
52 ULONG ConsumedBandwidth
;
53 ULONG ControllerNameLength
;
54 WCHAR ControllerNameUnicodeString
[1];
55 } USB_BUS_INFORMATION_LEVEL_1
, *PUSB_BUS_INFORMATION_LEVEL_1
;
60 (USB_BUSIFFN
*PUSB_BUSIFFN_QUERY_BUS_INFORMATION
) (
70 (USB_BUSIFFN
*PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED
) (
73 #define USB_BUSIF_USBDI_VERSION_0 0x0000
74 #define USB_BUSIF_USBDI_VERSION_1 0x0001
75 #define USB_BUSIF_USBDI_VERSION_2 0x0002
76 #define USB_BUSIF_USBDI_VERSION_3 0x0003
78 DEFINE_GUID(USB_BUS_INTERFACE_USBDI_GUID
,
79 0xb1a96a13, 0x3de0, 0x4574, 0x9b, 0x1, 0xc0, 0x8f, 0xea, 0xb3, 0x18, 0xd6);
81 typedef struct _USB_BUS_INTERFACE_USBDI_V0
{
85 PINTERFACE_REFERENCE InterfaceReference
;
86 PINTERFACE_DEREFERENCE InterfaceDereference
;
87 PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion
;
88 PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime
;
89 PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb
;
90 PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation
;
91 } USB_BUS_INTERFACE_USBDI_V0
, *PUSB_BUS_INTERFACE_USBDI_V0
;
93 typedef struct _USB_BUS_INTERFACE_USBDI_V1
{
97 PINTERFACE_REFERENCE InterfaceReference
;
98 PINTERFACE_DEREFERENCE InterfaceDereference
;
99 PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion
;
100 PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime
;
101 PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb
;
102 PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation
;
103 PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed
;
104 } USB_BUS_INTERFACE_USBDI_V1
, *PUSB_BUS_INTERFACE_USBDI_V1
;
106 typedef struct _USB_BUS_INTERFACE_USBDI_V2
{
110 PINTERFACE_REFERENCE InterfaceReference
;
111 PINTERFACE_DEREFERENCE InterfaceDereference
;
112 PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion
;
113 PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime
;
114 PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb
;
115 PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation
;
116 PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed
;
117 PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry
;
118 } USB_BUS_INTERFACE_USBDI_V2
, *PUSB_BUS_INTERFACE_USBDI_V2
;
120 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
122 #if (NTDDI_VERSION >= NTDDI_VISTA)
125 _Must_inspect_result_
127 (USB_BUSIFFN
*PUSB_BUSIFFN_QUERY_BUS_TIME_EX
) (
132 _Must_inspect_result_
134 (USB_BUSIFFN
*PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE
) (
144 typedef struct _USB_BUS_INTERFACE_USBDI_V3
{
148 PINTERFACE_REFERENCE InterfaceReference
;
149 PINTERFACE_DEREFERENCE InterfaceDereference
;
150 PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion
;
151 PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime
;
152 PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb
;
153 PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation
;
154 PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed
;
155 PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry
;
156 PUSB_BUSIFFN_QUERY_BUS_TIME_EX QueryBusTimeEx
;
157 PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE QueryControllerType
;
158 } USB_BUS_INTERFACE_USBDI_V3
, *PUSB_BUS_INTERFACE_USBDI_V3
;
160 DEFINE_GUID(USB_BUS_INTERFACE_USBC_CONFIGURATION_GUID
,
161 0x893b6a96, 0xb7f, 0x4d4d, 0xbd, 0xb4, 0xbb, 0xd4, 0xce, 0xeb, 0xb3, 0x1c);
163 #define USBC_FUNCTION_FLAG_APPEND_ID 0x1
165 typedef struct _USBC_FUNCTION_DESCRIPTOR
{
166 UCHAR FunctionNumber
;
167 UCHAR NumberOfInterfaces
;
168 PUSB_INTERFACE_DESCRIPTOR
*InterfaceDescriptorList
;
169 UNICODE_STRING HardwareId
;
170 UNICODE_STRING CompatibleId
;
171 UNICODE_STRING FunctionDescription
;
174 } USBC_FUNCTION_DESCRIPTOR
, *PUSBC_FUNCTION_DESCRIPTOR
;
177 _Must_inspect_result_
179 (USB_BUSIFFN
*USBC_START_DEVICE_CALLBACK
)(
180 _In_ PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
,
181 _In_ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
,
182 _Outptr_result_bytebuffer_maybenull_(*FunctionDescriptorBufferLength
)
183 PUSBC_FUNCTION_DESCRIPTOR
*FunctionDescriptorBuffer
,
184 _Out_ PULONG FunctionDescriptorBufferLength
,
185 _In_ PDEVICE_OBJECT FdoDeviceObject
,
186 _In_ PDEVICE_OBJECT PdoDeviceObject
);
189 _Must_inspect_result_
191 (USB_BUSIFFN
*USBC_PDO_ENABLE_CALLBACK
)(
193 _In_ USHORT FirstInterfaceNumber
,
194 _In_ USHORT NumberOfInterfaces
,
195 _In_ UCHAR FunctionClass
,
196 _In_ UCHAR FunctionSubClass
,
197 _In_ UCHAR FunctionProtocol
);
199 #define USBC_DEVICE_CONFIGURATION_INTERFACE_VERSION_1 0x0001
201 typedef struct _USBC_DEVICE_CONFIGURATION_INTERFACE_V1
{
205 PINTERFACE_REFERENCE InterfaceReference
;
206 PINTERFACE_DEREFERENCE InterfaceDereference
;
207 USBC_START_DEVICE_CALLBACK StartDeviceCallback
;
208 USBC_PDO_ENABLE_CALLBACK PdoEnableCallback
;
210 } USBC_DEVICE_CONFIGURATION_INTERFACE_V1
, *PUSBC_DEVICE_CONFIGURATION_INTERFACE_V1
;
212 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */