3 #if (NTDDI_VERSION >= NTDDI_WINXP)
5 typedef PVOID PUSB_DEVICE_HANDLE
;
7 typedef struct _ROOTHUB_PDO_EXTENSION
{
9 } ROOTHUB_PDO_EXTENSION
, *PROOTHUB_PDO_EXTENSION
;
11 #define USBD_DEVHACK_SLOW_ENUMERATION 0x00000001
12 #define USBD_DEVHACK_DISABLE_SN 0x00000002
13 #define USBD_DEVHACK_SET_DIAG_ID 0x00000004
16 #define USB_BUSIFFN __stdcall
19 #define CD_ERR_V1 0x00000001
21 #define ID_ERR_V1 0x00000001
23 #define USBD_KEEP_DEVICE_DATA 0x00000001
24 #define USBD_MARK_DEVICE_BUSY 0x00000002
26 #define USB_IDLE_NOT_READY 0
27 #define USB_IDLE_READY 1
32 USB_BUSIFFN_CREATE_USB_DEVICE (
34 OUT PUSB_DEVICE_HANDLE
*NewDeviceHandle
,
35 IN PUSB_DEVICE_HANDLE HubDeviceHandle
,
37 IN USHORT PortNumber
);
39 typedef USB_BUSIFFN_CREATE_USB_DEVICE
*PUSB_BUSIFFN_CREATE_USB_DEVICE
;
41 typedef enum _USBPORT_CREATEDEV_ERROR
{
42 CreateDevErrNotSet
= 0,
43 CreateDevBadHubDevHandle
,
44 CreateDevFailedAllocDevHandle
,
45 CreateDevFailedOpenEndpoint
,
46 CreateDevFailedAllocDsBuff
,
49 CreateDevBadDevHandlePtr
50 } USBPORT_CREATEDEV_ERROR
;
52 typedef struct _USB_CD_ERROR_INFORMATION
{
54 USBPORT_CREATEDEV_ERROR PathError
;
59 } USB_CD_ERROR_INFORMATION
, *PUSB_CD_ERROR_INFORMATION
;
64 USB_BUSIFFN_CREATE_USB_DEVICE_EX (
66 OUT PUSB_DEVICE_HANDLE
*NewDeviceHandle
,
67 IN PUSB_DEVICE_HANDLE HsHubDeviceHandle
,
70 OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo
,
71 IN USHORT TtPortNumber
);
73 typedef USB_BUSIFFN_CREATE_USB_DEVICE_EX
*PUSB_BUSIFFN_CREATE_USB_DEVICE_EX
;
75 typedef struct _USB_PORT_PATH
{
78 } USB_PORT_PATH
, *PUSB_PORT_PATH
;
83 USB_BUSIFFN_CREATE_USB_DEVICE_V7 (
85 OUT PUSB_DEVICE_HANDLE
*NewDeviceHandle
,
86 IN PUSB_DEVICE_HANDLE HsHubDeviceHandle
,
88 IN PUSB_PORT_PATH PortPath
,
89 OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo
,
90 IN USHORT TtPortNumber
,
91 IN PDEVICE_OBJECT PdoDeviceObject
,
92 IN PUNICODE_STRING PhysicalDeviceObjectName
);
94 typedef USB_BUSIFFN_CREATE_USB_DEVICE_V7
*PUSB_BUSIFFN_CREATE_USB_DEVICE_V7
;
96 typedef enum _USBPORT_INITDEV_ERROR
{
98 InitDevFailedSetAddress
,
99 InitDevFailedPokeEndpoint
,
100 InitDevBadDeviceDescriptor
101 } USBPORT_INITDEV_ERROR
;
103 typedef struct _USB_ID_ERROR_INFORMATION
{
105 USBPORT_INITDEV_ERROR PathError
;
109 USBD_STATUS UsbdStatus
;
111 } USB_ID_ERROR_INFORMATION
, *PUSB_ID_ERROR_INFORMATION
;
116 USB_BUSIFFN_INITIALIZE_USB_DEVICE (
118 IN OUT PUSB_DEVICE_HANDLE DeviceHandle
);
120 typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE
*PUSB_BUSIFFN_INITIALIZE_USB_DEVICE
;
125 USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX (
127 IN OUT PUSB_DEVICE_HANDLE DeviceHandle
,
128 OUT PUSB_ID_ERROR_INFORMATION IdErrInfo
);
130 typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX
*PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX
;
135 USB_BUSIFFN_REMOVE_USB_DEVICE (
137 IN OUT PUSB_DEVICE_HANDLE DeviceHandle
,
140 typedef USB_BUSIFFN_REMOVE_USB_DEVICE
*PUSB_BUSIFFN_REMOVE_USB_DEVICE
;
145 USB_BUSIFFN_GET_USB_DESCRIPTORS (
147 IN OUT PUSB_DEVICE_HANDLE DeviceHandle
,
148 OUT PUCHAR DeviceDescriptorBuffer
,
149 IN OUT PULONG DeviceDescriptorBufferLength
,
150 OUT PUCHAR ConfigDescriptorBuffer
,
151 IN OUT PULONG ConfigDescriptorBufferLength
);
153 typedef USB_BUSIFFN_GET_USB_DESCRIPTORS
*PUSB_BUSIFFN_GET_USB_DESCRIPTORS
;
158 USB_BUSIFFN_RESTORE_DEVICE (
160 IN OUT PUSB_DEVICE_HANDLE OldDeviceHandle
,
161 IN OUT PUSB_DEVICE_HANDLE NewDeviceHandle
);
163 typedef USB_BUSIFFN_RESTORE_DEVICE
*PUSB_BUSIFFN_RESTORE_DEVICE
;
168 USB_BUSIFFN_GET_POTRTHACK_FLAGS (
170 IN OUT PULONG Flags
);
172 typedef USB_BUSIFFN_GET_POTRTHACK_FLAGS
*PUSB_BUSIFFN_GET_POTRTHACK_FLAGS
;
177 USB_BUSIFFN_GET_DEVICE_INFORMATION (
179 IN PUSB_DEVICE_HANDLE DeviceHandle
,
180 OUT PVOID DeviceInformationBuffer
,
181 IN ULONG DeviceInformationBufferLength
,
182 IN OUT PULONG LengthOfDataCopied
);
184 typedef USB_BUSIFFN_GET_DEVICE_INFORMATION
*PUSB_BUSIFFN_GET_DEVICE_INFORMATION
;
189 USB_BUSIFFN_GET_CONTROLLER_INFORMATION (
191 IN OUT PVOID ControllerInformationBuffer
,
192 IN ULONG ControllerInformationBufferLength
,
193 IN OUT PULONG LengthOfDataCopied
);
195 typedef USB_BUSIFFN_GET_CONTROLLER_INFORMATION
*PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION
;
200 USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND (
204 typedef USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND
*PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND
;
209 USB_BUSIFFN_GET_EXTENDED_HUB_INFO (
211 IN PDEVICE_OBJECT HubPhysicalDeviceObject
,
212 IN PVOID HubInformationBuffer
,
213 IN ULONG HubInformationBufferLength
,
214 OUT PULONG LengthOfDataCopied
);
216 typedef USB_BUSIFFN_GET_EXTENDED_HUB_INFO
*PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO
;
221 USB_BUSIFFN_GET_ROOTHUB_SYM_NAME (
223 IN PVOID HubSymNameBuffer
,
224 IN ULONG HubSymNameBufferLength
,
225 OUT PULONG HubSymNameActualLength
);
227 typedef USB_BUSIFFN_GET_ROOTHUB_SYM_NAME
*PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME
;
232 USB_BUSIFFN_GET_DEVICE_BUSCONTEXT (
233 IN PVOID HubBusContext
,
234 IN PVOID DeviceHandle
);
236 typedef USB_BUSIFFN_GET_DEVICE_BUSCONTEXT
*PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT
;
241 USB_BUSIFFN_INITIALIZE_20HUB (
243 IN PUSB_DEVICE_HANDLE HubDeviceHandle
,
246 typedef USB_BUSIFFN_INITIALIZE_20HUB
*PUSB_BUSIFFN_INITIALIZE_20HUB
;
251 USB_BUSIFFN_IS_ROOT (
253 IN PVOID DeviceObject
);
255 typedef USB_BUSIFFN_IS_ROOT
*PUSB_BUSIFFN_IS_ROOT
;
260 USB_BUSIFFN_ACQUIRE_SEMAPHORE (
261 IN PVOID BusContext
);
263 typedef USB_BUSIFFN_ACQUIRE_SEMAPHORE
*PUSB_BUSIFFN_ACQUIRE_SEMAPHORE
;
268 USB_BUSIFFN_RELEASE_SEMAPHORE (
269 IN PVOID BusContext
);
271 typedef USB_BUSIFFN_RELEASE_SEMAPHORE
*PUSB_BUSIFFN_RELEASE_SEMAPHORE
;
277 IN PVOID CallBackContext
);
279 typedef RH_INIT_CALLBACK
*PRH_INIT_CALLBACK
;
284 USB_BUSIFFN_ROOTHUB_INIT_NOTIFY (
286 IN PVOID CallbackContext
,
287 IN PRH_INIT_CALLBACK CallbackRoutine
);
289 typedef USB_BUSIFFN_ROOTHUB_INIT_NOTIFY
*PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY
;
294 USB_BUSIFFN_FLUSH_TRANSFERS (
296 IN PVOID DeviceHandle
);
298 typedef USB_BUSIFFN_FLUSH_TRANSFERS
*PUSB_BUSIFFN_FLUSH_TRANSFERS
;
303 USB_BUSIFFN_CALC_PIPE_BANDWIDTH (
305 IN PUSBD_PIPE_INFORMATION PipeInfo
,
306 IN USB_DEVICE_SPEED DeviceSpeed
);
308 typedef USB_BUSIFFN_CALC_PIPE_BANDWIDTH
*PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH
;
313 USB_BUSIFFN_SET_BUS_WAKE_MODE (
317 typedef USB_BUSIFFN_SET_BUS_WAKE_MODE
*PUSB_BUSIFFN_SET_BUS_WAKE_MODE
;
322 USB_BUSIFFN_SET_DEVICE_FLAG (
324 IN GUID
*DeviceFlagGuid
,
326 IN ULONG ValueLength
);
328 typedef USB_BUSIFFN_SET_DEVICE_FLAG
*PUSB_BUSIFFN_SET_DEVICE_FLAG
;
333 USB_BUSIFFN_SET_DEVHANDLE_DATA (
335 IN PVOID DeviceHandle
,
336 IN PDEVICE_OBJECT UsbDevicePdo
);
338 typedef USB_BUSIFFN_SET_DEVHANDLE_DATA
*PUSB_BUSIFFN_SET_DEVHANDLE_DATA
;
343 USB_BUSIFFN_TEST_POINT (
345 IN PVOID DeviceHandle
,
349 typedef USB_BUSIFFN_TEST_POINT
*PUSB_BUSIFFN_TEST_POINT
;
354 USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO (
356 IN PUSB_DEVICE_HANDLE DeviceHandle
,
357 OUT PVOID DeviceInformationBuffer
,
358 IN ULONG DeviceInformationBufferLength
,
359 IN OUT PULONG LengthOfDataCopied
);
361 typedef USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO
*PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO
;
366 USB_BUSIFFN_WAIT_ASYNC_POWERUP (
367 IN PVOID BusContext
);
369 typedef USB_BUSIFFN_WAIT_ASYNC_POWERUP
*PUSB_BUSIFFN_WAIT_ASYNC_POWERUP
;
374 USB_BUSIFFN_GET_DEVICE_ADDRESS (
376 IN PUSB_DEVICE_HANDLE DeviceHandle
,
377 OUT PUSHORT DeviceAddress
);
379 typedef USB_BUSIFFN_GET_DEVICE_ADDRESS
*PUSB_BUSIFFN_GET_DEVICE_ADDRESS
;
384 USB_BUSIFFN_DEREF_DEVICE_HANDLE (
386 IN PUSB_DEVICE_HANDLE DeviceHandle
,
390 typedef USB_BUSIFFN_DEREF_DEVICE_HANDLE
*PUSB_BUSIFFN_DEREF_DEVICE_HANDLE
;
395 USB_BUSIFFN_REF_DEVICE_HANDLE (
397 IN PUSB_DEVICE_HANDLE DeviceHandle
,
401 typedef USB_BUSIFFN_REF_DEVICE_HANDLE
*PUSB_BUSIFFN_REF_DEVICE_HANDLE
;
406 USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE (
408 IN PUSB_DEVICE_HANDLE DeviceHandle
,
409 IN ULONG NewIdleReadyState
);
411 typedef USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE
*PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE
;
416 USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT (
418 IN USHORT PortNumber
,
419 OUT LPGUID ContainerId
);
421 typedef USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT
*PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT
;
426 USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT (
428 IN USHORT PortNumber
,
429 IN LPGUID ContainerId
);
431 typedef USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT
*PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT
;
436 USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES (
438 IN PUSB_DEVICE_HANDLE DeviceHandle
);
440 typedef USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES
*PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES
;
442 #define ERRATA_FLAG_RESET_TT_ON_CANCEL 1
443 #define ERRATA_FLAG_NO_CLEAR_TT_BUFFER_ON_CANCEL 2
445 #define USB_BUSIF_HUB_VERSION_0 0x0000
446 #define USB_BUSIF_HUB_VERSION_1 0x0001
447 #define USB_BUSIF_HUB_VERSION_2 0x0002
448 #define USB_BUSIF_HUB_VERSION_3 0x0003
449 #define USB_BUSIF_HUB_VERSION_4 0x0004
450 #define USB_BUSIF_HUB_VERSION_5 0x0005
451 #define USB_BUSIF_HUB_VERSION_6 0x0006
452 #define USB_BUSIF_HUB_VERSION_7 0x0007
454 #define USB_BUSIF_HUB_MIDUMP_VERSION_0 0x0000
456 #define USB_BUSIF_HUB_SS_VERSION_0 0x0000
461 USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG (
463 IN PUSB_DEVICE_HANDLE DeviceHandle
,
464 IN ULONG DeviceErrataFlag
);
466 typedef USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG
*PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG
;
468 DEFINE_GUID(USB_BUS_INTERFACE_HUB_GUID
,
469 0xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a);
471 typedef struct _USB_BUS_INTERFACE_HUB_V0
{
475 PINTERFACE_REFERENCE InterfaceReference
;
476 PINTERFACE_DEREFERENCE InterfaceDereference
;
477 } USB_BUS_INTERFACE_HUB_V0
, *PUSB_BUS_INTERFACE_HUB_V0
;
479 typedef struct _USB_BUS_INTERFACE_HUB_V1
{
483 PINTERFACE_REFERENCE InterfaceReference
;
484 PINTERFACE_DEREFERENCE InterfaceDereference
;
485 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
486 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
487 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
488 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
489 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
490 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
491 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
492 } USB_BUS_INTERFACE_HUB_V1
, *PUSB_BUS_INTERFACE_HUB_V1
;
494 typedef struct _USB_BUS_INTERFACE_HUB_V2
{
498 PINTERFACE_REFERENCE InterfaceReference
;
499 PINTERFACE_DEREFERENCE InterfaceDereference
;
500 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
501 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
502 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
503 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
504 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
505 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
506 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
507 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
508 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
509 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
510 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
511 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
512 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
513 } USB_BUS_INTERFACE_HUB_V2
, *PUSB_BUS_INTERFACE_HUB_V2
;
515 typedef struct _USB_BUS_INTERFACE_HUB_V3
{
519 PINTERFACE_REFERENCE InterfaceReference
;
520 PINTERFACE_DEREFERENCE InterfaceDereference
;
521 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
522 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
523 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
524 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
525 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
526 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
527 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
528 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
529 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
530 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
531 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
532 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
533 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
534 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
535 } USB_BUS_INTERFACE_HUB_V3
, *PUSB_BUS_INTERFACE_HUB_V3
;
537 typedef struct _USB_BUS_INTERFACE_HUB_V4
{
541 PINTERFACE_REFERENCE InterfaceReference
;
542 PINTERFACE_DEREFERENCE InterfaceDereference
;
543 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
544 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
545 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
546 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
547 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
548 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
549 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
550 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
551 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
552 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
553 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
554 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
555 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
556 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
557 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers
;
558 } USB_BUS_INTERFACE_HUB_V4
, *PUSB_BUS_INTERFACE_HUB_V4
;
560 typedef struct _USB_BUS_INTERFACE_HUB_V5
{
564 PINTERFACE_REFERENCE InterfaceReference
;
565 PINTERFACE_DEREFERENCE InterfaceDereference
;
566 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice
;
567 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice
;
568 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
569 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
570 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
571 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
572 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
573 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
574 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
575 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
576 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
577 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
578 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
579 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
580 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers
;
581 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData
;
582 } USB_BUS_INTERFACE_HUB_V5
, *PUSB_BUS_INTERFACE_HUB_V5
;
584 typedef struct _USB_BUS_INTERFACE_HUB_V6
{
588 PINTERFACE_REFERENCE InterfaceReference
;
589 PINTERFACE_DEREFERENCE InterfaceDereference
;
590 PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice
;
591 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice
;
592 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
593 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
594 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
595 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
596 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
597 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
598 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
599 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
600 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
601 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
602 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
603 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
604 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers
;
605 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData
;
606 PUSB_BUSIFFN_IS_ROOT HubIsRoot
;
607 PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore
;
608 PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore
;
609 PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth
;
610 PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode
;
611 PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag
;
612 PUSB_BUSIFFN_TEST_POINT HubTestPoint
;
613 PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo
;
614 PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp
;
615 PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress
;
616 PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle
;
617 PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle
;
618 PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState
;
619 } USB_BUS_INTERFACE_HUB_V6
, *PUSB_BUS_INTERFACE_HUB_V6
;
621 typedef struct _USB_BUS_INTERFACE_HUB_V7
{
625 PINTERFACE_REFERENCE InterfaceReference
;
626 PINTERFACE_DEREFERENCE InterfaceDereference
;
627 PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice
;
628 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice
;
629 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors
;
630 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice
;
631 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice
;
632 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags
;
633 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation
;
634 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation
;
635 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend
;
636 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation
;
637 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName
;
638 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext
;
639 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub
;
640 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification
;
641 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers
;
642 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData
;
643 PUSB_BUSIFFN_IS_ROOT HubIsRoot
;
644 PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore
;
645 PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore
;
646 PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth
;
647 PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode
;
648 PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag
;
649 PUSB_BUSIFFN_TEST_POINT HubTestPoint
;
650 PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo
;
651 PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp
;
652 PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress
;
653 PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle
;
654 PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle
;
655 PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState
;
656 PUSB_BUSIFFN_CREATE_USB_DEVICE_V7 CreateUsbDeviceV7
;
657 PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT GetContainerIdForPort
;
658 PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT SetContainerIdForPort
;
659 PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES AbortAllDevicePipes
;
660 PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG SetDeviceErrataFlag
;
661 } USB_BUS_INTERFACE_HUB_V7
, *PUSB_BUS_INTERFACE_HUB_V7
;
663 DEFINE_GUID(USB_BUS_INTERFACE_HUB_MINIDUMP_GUID
,
664 0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38);
667 (USB_BUSIFFN
*PUSB_BUSIFFN_SET_MINIDUMP_FLAGS
) (
670 typedef struct _USB_BUS_INTERFACE_HUB_MINIDUMP
{
674 PINTERFACE_REFERENCE InterfaceReference
;
675 PINTERFACE_DEREFERENCE InterfaceDereference
;
676 PUSB_BUSIFFN_SET_MINIDUMP_FLAGS SetUsbPortMiniDumpFlags
;
677 } USB_BUS_INTERFACE_HUB_MINIDUMP
, *PUSB_BUS_INTERFACE_HUB_MINIDUMP
;
679 DEFINE_GUID(USB_BUS_INTERFACE_HUB_SS_GUID
,
680 0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f);
683 (USB_BUSIFFN
*PUSB_BUSIFFN_SUSPEND_HUB
) (
687 (USB_BUSIFFN
*PUSB_BUSIFFN_RESUME_HUB
) (
690 typedef struct _USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND
{
694 PINTERFACE_REFERENCE InterfaceReference
;
695 PINTERFACE_DEREFERENCE InterfaceDereference
;
696 PUSB_BUSIFFN_SUSPEND_HUB SuspendHub
;
697 PUSB_BUSIFFN_RESUME_HUB ResumeHub
;
698 } USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND
, *PUSB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND
;
700 #include <pshpack1.h>
702 typedef struct _USB_PIPE_INFORMATION_0
{
703 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor
;
705 ULONG ScheduleOffset
;
706 } USB_PIPE_INFORMATION_0
, *PUSB_PIPE_INFORMATION_0
;
708 typedef struct _USB_LEVEL_INFORMATION
{
709 ULONG InformationLevel
;
711 } USB_LEVEL_INFORMATION
, *PUSB_LEVEL_INFORMATION
;
713 typedef struct _USB_DEVICE_INFORMATION_0
{
714 ULONG InformationLevel
;
717 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
719 UCHAR CurrentConfigurationValue
;
721 USHORT DeviceAddress
;
723 USB_DEVICE_SPEED DeviceSpeed
;
724 USB_DEVICE_TYPE DeviceType
;
725 ULONG NumberOfOpenPipes
;
726 USB_PIPE_INFORMATION_0 PipeList
[1];
727 } USB_DEVICE_INFORMATION_0
, *PUSB_DEVICE_INFORMATION_0
;
729 typedef struct _USB_CONTROLLER_INFORMATION_0
{
730 ULONG InformationLevel
;
732 BOOLEAN SelectiveSuspendEnabled
;
733 BOOLEAN IsHighSpeedController
;
734 } USB_CONTROLLER_INFORMATION_0
, *PUSB_CONTROLLER_INFORMATION_0
;
736 typedef struct _USB_CONTROLLER_INFORMATION_1
{
737 ULONG InformationLevel
;
739 BOOLEAN SelectiveSuspendEnabled
;
740 BOOLEAN IsHighSpeedController
;
744 } USB_CONTROLLER_INFORMATION_1
, *PUSB_CONTROLLER_INFORMATION_1
;
746 typedef struct _USB_EXTPORT_INFORMATION_0
{
747 ULONG PhysicalPortNumber
;
748 ULONG PortLabelNumber
;
751 ULONG PortAttributes
;
752 } USB_EXTPORT_INFORMATION_0
, *PUSB_EXTPORT_INFORMATION
;
754 typedef struct _USB_EXTHUB_INFORMATION_0
{
755 ULONG InformationLevel
;
757 USB_EXTPORT_INFORMATION_0 Port
[255];
758 } USB_EXTHUB_INFORMATION_0
, *PUSB_EXTHUB_INFORMATION_0
;
760 typedef struct _USB_DEVICE_PERFORMANCE_INFO_0
{
761 ULONG InformationLevel
;
765 ULONG ControlDataBytes
;
766 ULONG ControlUrbCount
;
769 ULONG InterruptBytes
;
770 ULONG InterruptUrbCount
;
771 ULONG AllocedInterrupt
[6];
773 ULONG Total32secBandwidth
;
774 ULONG TotalTtBandwidth
;
775 ULONG TotalIsoLatency
;
776 ULONG DroppedIsoPackets
;
777 ULONG TransferErrors
;
778 } USB_DEVICE_PERFORMANCE_INFO_0
, *PUSB_DEVICE_PERFORMANCE_INFO_0
;