7 #if (NTDDI_VERSION >= NTDDI_WINXP)
9 #if !defined(_USBBUSIF_)
10 typedef PVOID PUSB_DEVICE_HANDLE
;
13 typedef struct _ROOTHUB_PDO_EXTENSION
{
15 } ROOTHUB_PDO_EXTENSION
, *PROOTHUB_PDO_EXTENSION
;
17 #define USBD_DEVHACK_SLOW_ENUMERATION 0x00000001
18 #define USBD_DEVHACK_DISABLE_SN 0x00000002
19 #define USBD_DEVHACK_SET_DIAG_ID 0x00000004
22 #define USB_BUSIFFN __stdcall
25 #define CD_ERR_V1 0x00000001
27 #define ID_ERR_V1 0x00000001
29 #define USBD_KEEP_DEVICE_DATA 0x00000001
30 #define USBD_MARK_DEVICE_BUSY 0x00000002
32 #define USB_IDLE_NOT_READY 0
33 #define USB_IDLE_READY 1
35 _Function_class_(USB_BUSIFFN_CREATE_USB_DEVICE
)
38 USB_BUSIFFN_CREATE_USB_DEVICE (
39 _In_ PVOID BusContext
,
40 _Outptr_ PUSB_DEVICE_HANDLE
*NewDeviceHandle
,
41 _In_ PUSB_DEVICE_HANDLE HubDeviceHandle
,
42 _In_ USHORT PortStatus
,
43 _In_ USHORT PortNumber
);
44 typedef USB_BUSIFFN_CREATE_USB_DEVICE
*PUSB_BUSIFFN_CREATE_USB_DEVICE
;
46 typedef enum _USBPORT_CREATEDEV_ERROR
{
47 CreateDevErrNotSet
= 0,
48 CreateDevBadHubDevHandle
,
49 CreateDevFailedAllocDevHandle
,
50 CreateDevFailedOpenEndpoint
,
51 CreateDevFailedAllocDsBuff
,
54 CreateDevBadDevHandlePtr
55 } USBPORT_CREATEDEV_ERROR
;
57 typedef struct _USB_CD_ERROR_INFORMATION
{
59 USBPORT_CREATEDEV_ERROR PathError
;
64 } USB_CD_ERROR_INFORMATION
, *PUSB_CD_ERROR_INFORMATION
;
66 _Function_class_(USB_BUSIFFN_CREATE_USB_DEVICE_EX
)
69 USB_BUSIFFN_CREATE_USB_DEVICE_EX (
70 _In_ PVOID BusContext
,
71 _Outptr_ PUSB_DEVICE_HANDLE
*NewDeviceHandle
,
72 _In_ PUSB_DEVICE_HANDLE HsHubDeviceHandle
,
73 _In_ USHORT PortStatus
,
74 _In_ USHORT PortNumber
,
75 _Out_ PUSB_CD_ERROR_INFORMATION CdErrorInfo
,
76 _In_ USHORT TtPortNumber
);
77 typedef USB_BUSIFFN_CREATE_USB_DEVICE_EX
*PUSB_BUSIFFN_CREATE_USB_DEVICE_EX
;
79 typedef struct _USB_PORT_PATH
{
82 } USB_PORT_PATH
, *PUSB_PORT_PATH
;
84 _Function_class_(USB_BUSIFFN_CREATE_USB_DEVICE_V7
)
87 USB_BUSIFFN_CREATE_USB_DEVICE_V7 (
88 _In_ PVOID BusContext
,
89 _Outptr_ PUSB_DEVICE_HANDLE
*NewDeviceHandle
,
90 _In_ PUSB_DEVICE_HANDLE HsHubDeviceHandle
,
91 _In_ USHORT PortStatus
,
92 _In_ PUSB_PORT_PATH PortPath
,
93 _Out_ PUSB_CD_ERROR_INFORMATION CdErrorInfo
,
94 _In_ USHORT TtPortNumber
,
95 _In_ PDEVICE_OBJECT PdoDeviceObject
,
96 _In_ PUNICODE_STRING PhysicalDeviceObjectName
);
97 typedef USB_BUSIFFN_CREATE_USB_DEVICE_V7
*PUSB_BUSIFFN_CREATE_USB_DEVICE_V7
;
99 typedef enum _USBPORT_INITDEV_ERROR
{
100 InitDevErrNotSet
= 0,
101 InitDevFailedSetAddress
,
102 InitDevFailedPokeEndpoint
,
103 InitDevBadDeviceDescriptor
104 } USBPORT_INITDEV_ERROR
;
106 typedef struct _USB_ID_ERROR_INFORMATION
{
108 USBPORT_INITDEV_ERROR PathError
;
112 USBD_STATUS UsbdStatus
;
114 } USB_ID_ERROR_INFORMATION
, *PUSB_ID_ERROR_INFORMATION
;
116 _Function_class_(USB_BUSIFFN_INITIALIZE_USB_DEVICE
)
119 USB_BUSIFFN_INITIALIZE_USB_DEVICE(
120 _In_ PVOID BusContext
,
121 _Inout_ PUSB_DEVICE_HANDLE DeviceHandle
);
122 typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE
*PUSB_BUSIFFN_INITIALIZE_USB_DEVICE
;
124 _Function_class_(USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX
)
127 USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX(
128 _In_ PVOID BusContext
,
129 _Inout_ PUSB_DEVICE_HANDLE DeviceHandle
,
130 _Out_ PUSB_ID_ERROR_INFORMATION IdErrInfo
);
131 typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX
*PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX
;
133 _Function_class_(USB_BUSIFFN_REMOVE_USB_DEVICE
)
136 USB_BUSIFFN_REMOVE_USB_DEVICE(
137 _In_ PVOID BusContext
,
138 _Inout_ PUSB_DEVICE_HANDLE DeviceHandle
,
140 typedef USB_BUSIFFN_REMOVE_USB_DEVICE
*PUSB_BUSIFFN_REMOVE_USB_DEVICE
;
142 _Function_class_(USB_BUSIFFN_GET_USB_DESCRIPTORS
)
145 USB_BUSIFFN_GET_USB_DESCRIPTORS(
146 _In_ PVOID BusContext
,
147 _Inout_ PUSB_DEVICE_HANDLE DeviceHandle
,
148 _Out_writes_bytes_to_(*DeviceDescriptorBufferLength
,*DeviceDescriptorBufferLength
)
149 PUCHAR DeviceDescriptorBuffer
,
150 _Inout_ PULONG DeviceDescriptorBufferLength
,
151 _Out_writes_bytes_to_(*ConfigDescriptorBufferLength
, *ConfigDescriptorBufferLength
)
152 PUCHAR ConfigDescriptorBuffer
,
153 _Inout_ PULONG ConfigDescriptorBufferLength
);
154 typedef USB_BUSIFFN_GET_USB_DESCRIPTORS
*PUSB_BUSIFFN_GET_USB_DESCRIPTORS
;
156 _Function_class_(USB_BUSIFFN_RESTORE_DEVICE
)
159 USB_BUSIFFN_RESTORE_DEVICE(
160 _In_ PVOID BusContext
,
161 _Inout_ PUSB_DEVICE_HANDLE OldDeviceHandle
,
162 _Inout_ PUSB_DEVICE_HANDLE NewDeviceHandle
);
163 typedef USB_BUSIFFN_RESTORE_DEVICE
*PUSB_BUSIFFN_RESTORE_DEVICE
;
165 _Function_class_(USB_BUSIFFN_GET_POTRTHACK_FLAGS
)
168 USB_BUSIFFN_GET_POTRTHACK_FLAGS(
169 _In_ PVOID BusContext
,
170 _Inout_ PULONG Flags
);
171 typedef USB_BUSIFFN_GET_POTRTHACK_FLAGS
*PUSB_BUSIFFN_GET_POTRTHACK_FLAGS
;
173 _Function_class_(USB_BUSIFFN_GET_DEVICE_INFORMATION
)
176 USB_BUSIFFN_GET_DEVICE_INFORMATION(
177 _In_ PVOID BusContext
,
178 _In_ PUSB_DEVICE_HANDLE DeviceHandle
,
179 _Out_writes_bytes_to_(DeviceInformationBufferLength
,*LengthOfDataCopied
)
180 PVOID DeviceInformationBuffer
,
181 _In_ ULONG DeviceInformationBufferLength
,
182 _Inout_ PULONG LengthOfDataCopied
);
183 typedef USB_BUSIFFN_GET_DEVICE_INFORMATION
*PUSB_BUSIFFN_GET_DEVICE_INFORMATION
;
185 _Function_class_(USB_BUSIFFN_GET_CONTROLLER_INFORMATION
)
188 USB_BUSIFFN_GET_CONTROLLER_INFORMATION(
189 _In_ PVOID BusContext
,
190 _Inout_updates_bytes_to_(ControllerInformationBufferLength
, *LengthOfDataCopied
)
191 PVOID ControllerInformationBuffer
,
192 _In_ ULONG ControllerInformationBufferLength
,
193 _Inout_ PULONG LengthOfDataCopied
);
194 typedef USB_BUSIFFN_GET_CONTROLLER_INFORMATION
*PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION
;
196 _Function_class_(USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND
)
199 USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND(
200 _In_ PVOID BusContext
,
201 _In_ BOOLEAN Enable
);
202 typedef USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND
*PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND
;
204 _Function_class_(USB_BUSIFFN_GET_EXTENDED_HUB_INFO
)
207 USB_BUSIFFN_GET_EXTENDED_HUB_INFO(
208 _In_ PVOID BusContext
,
209 _In_ PDEVICE_OBJECT HubPhysicalDeviceObject
,
210 _Inout_updates_bytes_to_(HubInformationBufferLength
, *LengthOfDataCopied
)
211 PVOID HubInformationBuffer
,
212 _In_ ULONG HubInformationBufferLength
,
213 _Out_ PULONG LengthOfDataCopied
);
214 typedef USB_BUSIFFN_GET_EXTENDED_HUB_INFO
*PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO
;
216 _Function_class_(USB_BUSIFFN_GET_ROOTHUB_SYM_NAME
)
219 USB_BUSIFFN_GET_ROOTHUB_SYM_NAME(
220 _In_ PVOID BusContext
,
221 _Inout_updates_bytes_to_(HubSymNameBufferLength
, *HubSymNameActualLength
) PVOID HubSymNameBuffer
,
222 _In_ ULONG HubSymNameBufferLength
,
223 _Out_ PULONG HubSymNameActualLength
);
224 typedef USB_BUSIFFN_GET_ROOTHUB_SYM_NAME
*PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME
;
226 _Function_class_(USB_BUSIFFN_GET_DEVICE_BUSCONTEXT
)
229 USB_BUSIFFN_GET_DEVICE_BUSCONTEXT(
230 _In_ PVOID HubBusContext
,
231 _In_ PVOID DeviceHandle
);
232 typedef USB_BUSIFFN_GET_DEVICE_BUSCONTEXT
*PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT
;
234 _Function_class_(USB_BUSIFFN_INITIALIZE_20HUB
)
237 USB_BUSIFFN_INITIALIZE_20HUB(
238 _In_ PVOID BusContext
,
239 _In_ PUSB_DEVICE_HANDLE HubDeviceHandle
,
241 typedef USB_BUSIFFN_INITIALIZE_20HUB
*PUSB_BUSIFFN_INITIALIZE_20HUB
;
243 _Function_class_(USB_BUSIFFN_IS_ROOT
)
247 _In_ PVOID BusContext
,
248 _In_ PVOID DeviceObject
);
249 typedef USB_BUSIFFN_IS_ROOT
*PUSB_BUSIFFN_IS_ROOT
;
251 _Function_class_(USB_BUSIFFN_ACQUIRE_SEMAPHORE
)
254 USB_BUSIFFN_ACQUIRE_SEMAPHORE(
255 _In_ PVOID BusContext
);
256 typedef USB_BUSIFFN_ACQUIRE_SEMAPHORE
*PUSB_BUSIFFN_ACQUIRE_SEMAPHORE
;
258 _Function_class_(USB_BUSIFFN_RELEASE_SEMAPHORE
)
261 USB_BUSIFFN_RELEASE_SEMAPHORE(
262 _In_ PVOID BusContext
);
263 typedef USB_BUSIFFN_RELEASE_SEMAPHORE
*PUSB_BUSIFFN_RELEASE_SEMAPHORE
;
265 _Function_class_(RH_INIT_CALLBACK
)
269 _In_ PVOID CallBackContext
);
270 typedef RH_INIT_CALLBACK
*PRH_INIT_CALLBACK
;
272 _Function_class_(USB_BUSIFFN_ROOTHUB_INIT_NOTIFY
)
275 USB_BUSIFFN_ROOTHUB_INIT_NOTIFY(
276 _In_ PVOID BusContext
,
277 _In_ PVOID CallbackContext
,
278 _In_ PRH_INIT_CALLBACK CallbackRoutine
);
279 typedef USB_BUSIFFN_ROOTHUB_INIT_NOTIFY
*PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY
;
281 _Function_class_(USB_BUSIFFN_FLUSH_TRANSFERS
)
284 USB_BUSIFFN_FLUSH_TRANSFERS(
285 _In_ PVOID BusContext
,
286 _In_ PVOID DeviceHandle
);
287 typedef USB_BUSIFFN_FLUSH_TRANSFERS
*PUSB_BUSIFFN_FLUSH_TRANSFERS
;
289 _Function_class_(USB_BUSIFFN_CALC_PIPE_BANDWIDTH
)
292 USB_BUSIFFN_CALC_PIPE_BANDWIDTH(
293 _In_ PVOID BusContext
,
294 _In_ PUSBD_PIPE_INFORMATION PipeInfo
,
295 _In_ USB_DEVICE_SPEED DeviceSpeed
);
296 typedef USB_BUSIFFN_CALC_PIPE_BANDWIDTH
*PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH
;
298 _Function_class_(USB_BUSIFFN_SET_BUS_WAKE_MODE
)
301 USB_BUSIFFN_SET_BUS_WAKE_MODE(
302 _In_ PVOID BusContext
,
304 typedef USB_BUSIFFN_SET_BUS_WAKE_MODE
*PUSB_BUSIFFN_SET_BUS_WAKE_MODE
;
306 _Function_class_(USB_BUSIFFN_SET_DEVICE_FLAG
)
309 USB_BUSIFFN_SET_DEVICE_FLAG(
310 _In_ PVOID BusContext
,
311 _In_ GUID
*DeviceFlagGuid
,
312 _In_ PVOID ValueData
,
313 _In_ ULONG ValueLength
);
314 typedef USB_BUSIFFN_SET_DEVICE_FLAG
*PUSB_BUSIFFN_SET_DEVICE_FLAG
;
316 _Function_class_(USB_BUSIFFN_SET_DEVHANDLE_DATA
)
319 USB_BUSIFFN_SET_DEVHANDLE_DATA(
320 _In_ PVOID BusContext
,
321 _In_ PVOID DeviceHandle
,
322 _In_ PDEVICE_OBJECT UsbDevicePdo
);
323 typedef USB_BUSIFFN_SET_DEVHANDLE_DATA
*PUSB_BUSIFFN_SET_DEVHANDLE_DATA
;
325 _Function_class_(USB_BUSIFFN_TEST_POINT
)
328 USB_BUSIFFN_TEST_POINT(
329 _In_ PVOID BusContext
,
330 _In_ PVOID DeviceHandle
,
332 _In_ PVOID TestData
);
333 typedef USB_BUSIFFN_TEST_POINT
*PUSB_BUSIFFN_TEST_POINT
;
335 _Function_class_(USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO
)
338 USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO(
339 _In_ PVOID BusContext
,
340 _In_ PUSB_DEVICE_HANDLE DeviceHandle
,
341 _Out_writes_bytes_to_(DeviceInformationBufferLength
,*LengthOfDataCopied
)
342 PVOID DeviceInformationBuffer
,
343 _In_ ULONG DeviceInformationBufferLength
,
344 _Inout_ PULONG LengthOfDataCopied
);
345 typedef USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO
*PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO
;
347 _Function_class_(USB_BUSIFFN_WAIT_ASYNC_POWERUP
)
350 USB_BUSIFFN_WAIT_ASYNC_POWERUP(
351 _In_ PVOID BusContext
);
352 typedef USB_BUSIFFN_WAIT_ASYNC_POWERUP
*PUSB_BUSIFFN_WAIT_ASYNC_POWERUP
;
354 _Function_class_(USB_BUSIFFN_GET_DEVICE_ADDRESS
)
357 USB_BUSIFFN_GET_DEVICE_ADDRESS(
358 _In_ PVOID BusContext
,
359 _In_ PUSB_DEVICE_HANDLE DeviceHandle
,
360 _Out_ PUSHORT DeviceAddress
);
361 typedef USB_BUSIFFN_GET_DEVICE_ADDRESS
*PUSB_BUSIFFN_GET_DEVICE_ADDRESS
;
363 _Function_class_(USB_BUSIFFN_DEREF_DEVICE_HANDLE
)
366 USB_BUSIFFN_DEREF_DEVICE_HANDLE(
367 _In_ PVOID BusContext
,
368 _In_ PUSB_DEVICE_HANDLE DeviceHandle
,
371 typedef USB_BUSIFFN_DEREF_DEVICE_HANDLE
*PUSB_BUSIFFN_DEREF_DEVICE_HANDLE
;
373 _Function_class_(USB_BUSIFFN_REF_DEVICE_HANDLE
)
376 USB_BUSIFFN_REF_DEVICE_HANDLE(
377 _In_ PVOID BusContext
,
378 _In_ PUSB_DEVICE_HANDLE DeviceHandle
,
381 typedef USB_BUSIFFN_REF_DEVICE_HANDLE
*PUSB_BUSIFFN_REF_DEVICE_HANDLE
;
383 _Function_class_(USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE
)
386 USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE(
387 _In_ PVOID BusContext
,
388 _In_ PUSB_DEVICE_HANDLE DeviceHandle
,
389 _In_ ULONG NewIdleReadyState
);
390 typedef USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE
*PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE
;
392 _Function_class_(USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT
)
395 USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT(
396 _In_ PVOID BusContext
,
397 _In_ USHORT PortNumber
,
398 _Out_ LPGUID ContainerId
);
399 typedef USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT
*PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT
;
401 _Function_class_(USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT
)
404 USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT(
405 _In_ PVOID BusContext
,
406 _In_ USHORT PortNumber
,
407 _In_ LPGUID ContainerId
);
408 typedef USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT
*PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT
;
410 _Function_class_(USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES
)
413 USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES(
414 _In_ PVOID BusContext
,
415 _In_ PUSB_DEVICE_HANDLE DeviceHandle
);
416 typedef USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES
*PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES
;
418 #define ERRATA_FLAG_RESET_TT_ON_CANCEL 1
419 #define ERRATA_FLAG_NO_CLEAR_TT_BUFFER_ON_CANCEL 2
421 #define USB_BUSIF_HUB_VERSION_0 0x0000
422 #define USB_BUSIF_HUB_VERSION_1 0x0001
423 #define USB_BUSIF_HUB_VERSION_2 0x0002
424 #define USB_BUSIF_HUB_VERSION_3 0x0003
425 #define USB_BUSIF_HUB_VERSION_4 0x0004
426 #define USB_BUSIF_HUB_VERSION_5 0x0005
427 #define USB_BUSIF_HUB_VERSION_6 0x0006
428 #define USB_BUSIF_HUB_VERSION_7 0x0007
430 #define USB_BUSIF_HUB_MIDUMP_VERSION_0 0x0000
432 #define USB_BUSIF_HUB_SS_VERSION_0 0x0000
434 _Function_class_(USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG
)
437 USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG(
438 _In_ PVOID BusContext
,
439 _In_ PUSB_DEVICE_HANDLE DeviceHandle
,
440 _In_ ULONG DeviceErrataFlag
);
441 typedef USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG
*PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG
;
443 DEFINE_GUID(USB_BUS_INTERFACE_HUB_GUID
,
444 0xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a);
446 typedef struct _USB_BUS_INTERFACE_HUB_V0
{
450 PINTERFACE_REFERENCE InterfaceReference
;
451 PINTERFACE_DEREFERENCE InterfaceDereference
;
452 } USB_BUS_INTERFACE_HUB_V0
, *PUSB_BUS_INTERFACE_HUB_V0
;
454 typedef struct _USB_BUS_INTERFACE_HUB_V1
{
458 PINTERFACE_REFERENCE InterfaceReference
;
459 PINTERFACE_DEREFERENCE InterfaceDereference
;
460 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
461 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
462 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
463 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
464 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
465 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
466 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
467 } USB_BUS_INTERFACE_HUB_V1
, *PUSB_BUS_INTERFACE_HUB_V1
;
469 typedef struct _USB_BUS_INTERFACE_HUB_V2
{
473 PINTERFACE_REFERENCE InterfaceReference
;
474 PINTERFACE_DEREFERENCE InterfaceDereference
;
475 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
476 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
477 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
478 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
479 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
480 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
481 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
482 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
483 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
484 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
485 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
486 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
487 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
488 } USB_BUS_INTERFACE_HUB_V2
, *PUSB_BUS_INTERFACE_HUB_V2
;
490 typedef struct _USB_BUS_INTERFACE_HUB_V3
{
494 PINTERFACE_REFERENCE InterfaceReference
;
495 PINTERFACE_DEREFERENCE InterfaceDereference
;
496 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
497 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
498 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
499 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
500 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
501 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
502 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
503 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
504 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
505 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
506 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
507 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
508 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
509 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
510 } USB_BUS_INTERFACE_HUB_V3
, *PUSB_BUS_INTERFACE_HUB_V3
;
512 typedef struct _USB_BUS_INTERFACE_HUB_V4
{
516 PINTERFACE_REFERENCE InterfaceReference
;
517 PINTERFACE_DEREFERENCE InterfaceDereference
;
518 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
519 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
520 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
521 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
522 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
523 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
524 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
525 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
526 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
527 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
528 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
529 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
530 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
531 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
532 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers
;
533 } USB_BUS_INTERFACE_HUB_V4
, *PUSB_BUS_INTERFACE_HUB_V4
;
535 typedef struct _USB_BUS_INTERFACE_HUB_V5
{
539 PINTERFACE_REFERENCE InterfaceReference
;
540 PINTERFACE_DEREFERENCE InterfaceDereference
;
541 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
542 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
543 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
544 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
545 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
546 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
547 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
548 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
549 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
550 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
551 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
552 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
553 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
554 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
555 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers
;
556 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData
;
557 } USB_BUS_INTERFACE_HUB_V5
, *PUSB_BUS_INTERFACE_HUB_V5
;
559 typedef struct _USB_BUS_INTERFACE_HUB_V6
{
563 PINTERFACE_REFERENCE InterfaceReference
;
564 PINTERFACE_DEREFERENCE InterfaceDereference
;
565 PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice
;
566 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice
;
567 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
568 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
569 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
570 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
571 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
572 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
573 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
574 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
575 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
576 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
577 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
578 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
579 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers
;
580 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData
;
581 PUSB_BUSIFFN_IS_ROOT HubIsRoot
;
582 PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore
;
583 PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore
;
584 PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth
;
585 PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode
;
586 PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag
;
587 PUSB_BUSIFFN_TEST_POINT HubTestPoint
;
588 PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo
;
589 PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp
;
590 PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress
;
591 PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle
;
592 PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle
;
593 PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState
;
594 } USB_BUS_INTERFACE_HUB_V6
, *PUSB_BUS_INTERFACE_HUB_V6
;
596 typedef struct _USB_BUS_INTERFACE_HUB_V7
{
600 PINTERFACE_REFERENCE InterfaceReference
;
601 PINTERFACE_DEREFERENCE InterfaceDereference
;
602 PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice
;
603 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice
;
604 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
605 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
606 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
607 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
608 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
609 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
610 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
611 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
612 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
613 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
614 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
615 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
616 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers
;
617 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData
;
618 PUSB_BUSIFFN_IS_ROOT HubIsRoot
;
619 PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore
;
620 PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore
;
621 PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth
;
622 PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode
;
623 PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag
;
624 PUSB_BUSIFFN_TEST_POINT HubTestPoint
;
625 PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo
;
626 PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp
;
627 PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress
;
628 PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle
;
629 PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle
;
630 PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState
;
631 PUSB_BUSIFFN_CREATE_USB_DEVICE_V7 CreateUsbDeviceV7
;
632 PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT GetContainerIdForPort
;
633 PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT SetContainerIdForPort
;
634 PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES AbortAllDevicePipes
;
635 PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG SetDeviceErrataFlag
;
636 } USB_BUS_INTERFACE_HUB_V7
, *PUSB_BUS_INTERFACE_HUB_V7
;
638 DEFINE_GUID(USB_BUS_INTERFACE_HUB_MINIDUMP_GUID
,
639 0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38);
642 (USB_BUSIFFN
*PUSB_BUSIFFN_SET_MINIDUMP_FLAGS
) (
645 typedef struct _USB_BUS_INTERFACE_HUB_MINIDUMP
{
649 PINTERFACE_REFERENCE InterfaceReference
;
650 PINTERFACE_DEREFERENCE InterfaceDereference
;
651 PUSB_BUSIFFN_SET_MINIDUMP_FLAGS SetUsbPortMiniDumpFlags
;
652 } USB_BUS_INTERFACE_HUB_MINIDUMP
, *PUSB_BUS_INTERFACE_HUB_MINIDUMP
;
654 DEFINE_GUID(USB_BUS_INTERFACE_HUB_SS_GUID
,
655 0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f);
658 (USB_BUSIFFN
*PUSB_BUSIFFN_SUSPEND_HUB
) (
662 (USB_BUSIFFN
*PUSB_BUSIFFN_RESUME_HUB
) (
665 typedef struct _USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND
{
669 PINTERFACE_REFERENCE InterfaceReference
;
670 PINTERFACE_DEREFERENCE InterfaceDereference
;
671 PUSB_BUSIFFN_SUSPEND_HUB SuspendHub
;
672 PUSB_BUSIFFN_RESUME_HUB ResumeHub
;
673 } USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND
, *PUSB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND
;
675 #include <pshpack1.h>
677 typedef struct _USB_PIPE_INFORMATION_0
{
678 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor
;
680 ULONG ScheduleOffset
;
681 } USB_PIPE_INFORMATION_0
, *PUSB_PIPE_INFORMATION_0
;
683 typedef struct _USB_LEVEL_INFORMATION
{
684 ULONG InformationLevel
;
686 } USB_LEVEL_INFORMATION
, *PUSB_LEVEL_INFORMATION
;
688 typedef struct _USB_DEVICE_INFORMATION_0
{
689 ULONG InformationLevel
;
692 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
694 UCHAR CurrentConfigurationValue
;
696 USHORT DeviceAddress
;
698 USB_DEVICE_SPEED DeviceSpeed
;
699 USB_DEVICE_TYPE DeviceType
;
700 ULONG NumberOfOpenPipes
;
701 USB_PIPE_INFORMATION_0 PipeList
[1];
702 } USB_DEVICE_INFORMATION_0
, *PUSB_DEVICE_INFORMATION_0
;
704 typedef struct _USB_CONTROLLER_INFORMATION_0
{
705 ULONG InformationLevel
;
707 BOOLEAN SelectiveSuspendEnabled
;
708 BOOLEAN IsHighSpeedController
;
709 } USB_CONTROLLER_INFORMATION_0
, *PUSB_CONTROLLER_INFORMATION_0
;
711 typedef struct _USB_CONTROLLER_INFORMATION_1
{
712 ULONG InformationLevel
;
714 BOOLEAN SelectiveSuspendEnabled
;
715 BOOLEAN IsHighSpeedController
;
719 } USB_CONTROLLER_INFORMATION_1
, *PUSB_CONTROLLER_INFORMATION_1
;
721 typedef struct _USB_EXTPORT_INFORMATION_0
{
722 ULONG PhysicalPortNumber
;
723 ULONG PortLabelNumber
;
726 ULONG PortAttributes
;
727 } USB_EXTPORT_INFORMATION_0
, *PUSB_EXTPORT_INFORMATION
;
729 typedef struct _USB_EXTHUB_INFORMATION_0
{
730 ULONG InformationLevel
;
732 USB_EXTPORT_INFORMATION_0 Port
[255];
733 } USB_EXTHUB_INFORMATION_0
, *PUSB_EXTHUB_INFORMATION_0
;
735 typedef struct _USB_DEVICE_PERFORMANCE_INFO_0
{
736 ULONG InformationLevel
;
740 ULONG ControlDataBytes
;
741 ULONG ControlUrbCount
;
744 ULONG InterruptBytes
;
745 ULONG InterruptUrbCount
;
746 ULONG AllocedInterrupt
[6];
748 ULONG Total32secBandwidth
;
749 ULONG TotalTtBandwidth
;
750 ULONG TotalIsoLatency
;
751 ULONG DroppedIsoPackets
;
752 ULONG TransferErrors
;
753 } USB_DEVICE_PERFORMANCE_INFO_0
, *PUSB_DEVICE_PERFORMANCE_INFO_0
;
757 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */