6 #define USB_BUSIFFN __stdcall
9 #if (NTDDI_VERSION >= NTDDI_WINXP)
11 #if !defined(_HUBBUSIF_)
12 typedef PVOID PUSB_DEVICE_HANDLE
;
17 (USB_BUSIFFN
*PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB
) (
21 #define USB_HCD_CAPS_SUPPORTS_RT_THREADS 0x00000001
24 (USB_BUSIFFN
*PUSB_BUSIFFN_GETUSBDI_VERSION
) (
26 _Out_opt_ PUSBD_VERSION_INFORMATION
,
31 (USB_BUSIFFN
*PUSB_BUSIFFN_QUERY_BUS_TIME
) (
36 (USB_BUSIFFN
*PUSB_BUSIFFN_ENUM_LOG_ENTRY
) (
43 typedef struct _USB_BUS_INFORMATION_LEVEL_0
{
45 ULONG ConsumedBandwidth
;
46 } USB_BUS_INFORMATION_LEVEL_0
, *PUSB_BUS_INFORMATION_LEVEL_0
;
48 typedef struct _USB_BUS_INFORMATION_LEVEL_1
{
50 ULONG ConsumedBandwidth
;
51 ULONG ControllerNameLength
;
52 WCHAR ControllerNameUnicodeString
[1];
53 } USB_BUS_INFORMATION_LEVEL_1
, *PUSB_BUS_INFORMATION_LEVEL_1
;
57 (USB_BUSIFFN
*PUSB_BUSIFFN_QUERY_BUS_INFORMATION
) (
66 (USB_BUSIFFN
*PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED
) (
69 #define USB_BUSIF_USBDI_VERSION_0 0x0000
70 #define USB_BUSIF_USBDI_VERSION_1 0x0001
71 #define USB_BUSIF_USBDI_VERSION_2 0x0002
72 #define USB_BUSIF_USBDI_VERSION_3 0x0003
74 DEFINE_GUID(USB_BUS_INTERFACE_USBDI_GUID
,
75 0xb1a96a13, 0x3de0, 0x4574, 0x9b, 0x1, 0xc0, 0x8f, 0xea, 0xb3, 0x18, 0xd6);
77 typedef struct _USB_BUS_INTERFACE_USBDI_V0
{
81 PINTERFACE_REFERENCE InterfaceReference
;
82 PINTERFACE_DEREFERENCE InterfaceDereference
;
83 PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion
;
84 PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime
;
85 PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb
;
86 PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation
;
87 } USB_BUS_INTERFACE_USBDI_V0
, *PUSB_BUS_INTERFACE_USBDI_V0
;
89 typedef struct _USB_BUS_INTERFACE_USBDI_V1
{
93 PINTERFACE_REFERENCE InterfaceReference
;
94 PINTERFACE_DEREFERENCE InterfaceDereference
;
95 PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion
;
96 PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime
;
97 PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb
;
98 PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation
;
99 PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed
;
100 } USB_BUS_INTERFACE_USBDI_V1
, *PUSB_BUS_INTERFACE_USBDI_V1
;
102 typedef struct _USB_BUS_INTERFACE_USBDI_V2
{
106 PINTERFACE_REFERENCE InterfaceReference
;
107 PINTERFACE_DEREFERENCE InterfaceDereference
;
108 PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion
;
109 PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime
;
110 PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb
;
111 PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation
;
112 PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed
;
113 PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry
;
114 } USB_BUS_INTERFACE_USBDI_V2
, *PUSB_BUS_INTERFACE_USBDI_V2
;
116 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
118 #if (NTDDI_VERSION >= NTDDI_VISTA)
120 _Must_inspect_result_
122 (USB_BUSIFFN
*PUSB_BUSIFFN_QUERY_BUS_TIME_EX
) (
126 _Must_inspect_result_
128 (USB_BUSIFFN
*PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE
) (
138 typedef struct _USB_BUS_INTERFACE_USBDI_V3
{
142 PINTERFACE_REFERENCE InterfaceReference
;
143 PINTERFACE_DEREFERENCE InterfaceDereference
;
144 PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion
;
145 PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime
;
146 PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb
;
147 PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation
;
148 PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed
;
149 PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry
;
150 PUSB_BUSIFFN_QUERY_BUS_TIME_EX QueryBusTimeEx
;
151 PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE QueryControllerType
;
152 } USB_BUS_INTERFACE_USBDI_V3
, *PUSB_BUS_INTERFACE_USBDI_V3
;
154 DEFINE_GUID(USB_BUS_INTERFACE_USBC_CONFIGURATION_GUID
,
155 0x893b6a96, 0xb7f, 0x4d4d, 0xbd, 0xb4, 0xbb, 0xd4, 0xce, 0xeb, 0xb3, 0x1c);
157 #define USBC_FUNCTION_FLAG_APPEND_ID 0x1
159 typedef struct _USBC_FUNCTION_DESCRIPTOR
{
160 UCHAR FunctionNumber
;
161 UCHAR NumberOfInterfaces
;
162 PUSB_INTERFACE_DESCRIPTOR
*InterfaceDescriptorList
;
163 UNICODE_STRING HardwareId
;
164 UNICODE_STRING CompatibleId
;
165 UNICODE_STRING FunctionDescription
;
168 } USBC_FUNCTION_DESCRIPTOR
, *PUSBC_FUNCTION_DESCRIPTOR
;
170 _Must_inspect_result_
172 (USB_BUSIFFN
*USBC_START_DEVICE_CALLBACK
)(
173 _In_ PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
,
174 _In_ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
,
175 _Outptr_result_bytebuffer_maybenull_(*FunctionDescriptorBufferLength
)
176 PUSBC_FUNCTION_DESCRIPTOR
*FunctionDescriptorBuffer
,
177 _Out_ PULONG FunctionDescriptorBufferLength
,
178 _In_ PDEVICE_OBJECT FdoDeviceObject
,
179 _In_ PDEVICE_OBJECT PdoDeviceObject
);
181 _Must_inspect_result_
183 (USB_BUSIFFN
*USBC_PDO_ENABLE_CALLBACK
)(
185 _In_ USHORT FirstInterfaceNumber
,
186 _In_ USHORT NumberOfInterfaces
,
187 _In_ UCHAR FunctionClass
,
188 _In_ UCHAR FunctionSubClass
,
189 _In_ UCHAR FunctionProtocol
);
191 #define USBC_DEVICE_CONFIGURATION_INTERFACE_VERSION_1 0x0001
193 typedef struct _USBC_DEVICE_CONFIGURATION_INTERFACE_V1
{
197 PINTERFACE_REFERENCE InterfaceReference
;
198 PINTERFACE_DEREFERENCE InterfaceDereference
;
199 USBC_START_DEVICE_CALLBACK StartDeviceCallback
;
200 USBC_PDO_ENABLE_CALLBACK PdoEnableCallback
;
202 } USBC_DEVICE_CONFIGURATION_INTERFACE_V1
, *PUSBC_DEVICE_CONFIGURATION_INTERFACE_V1
;
204 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */