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
38
USB_BUSIFFN_CREATE_USB_DEVICE (
40
OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
41
IN PUSB_DEVICE_HANDLE HubDeviceHandle,
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;
69
USB_BUSIFFN_CREATE_USB_DEVICE_EX (
71
OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
72
IN PUSB_DEVICE_HANDLE HsHubDeviceHandle,
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;
87
USB_BUSIFFN_CREATE_USB_DEVICE_V7 (
89
OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
90
IN PUSB_DEVICE_HANDLE HsHubDeviceHandle,
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;
119
USB_BUSIFFN_INITIALIZE_USB_DEVICE (
121
IN OUT PUSB_DEVICE_HANDLE DeviceHandle);
122
typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE;
127
USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX (
129
IN OUT 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;
136
USB_BUSIFFN_REMOVE_USB_DEVICE (
138
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);
152
typedef USB_BUSIFFN_GET_USB_DESCRIPTORS *PUSB_BUSIFFN_GET_USB_DESCRIPTORS;
157
USB_BUSIFFN_RESTORE_DEVICE (
159
IN OUT PUSB_DEVICE_HANDLE OldDeviceHandle,
160
IN OUT PUSB_DEVICE_HANDLE NewDeviceHandle);
161
typedef USB_BUSIFFN_RESTORE_DEVICE *PUSB_BUSIFFN_RESTORE_DEVICE;
166
USB_BUSIFFN_GET_POTRTHACK_FLAGS (
168
IN OUT PULONG Flags);
169
typedef USB_BUSIFFN_GET_POTRTHACK_FLAGS *PUSB_BUSIFFN_GET_POTRTHACK_FLAGS;
174
USB_BUSIFFN_GET_DEVICE_INFORMATION (
176
IN PUSB_DEVICE_HANDLE DeviceHandle,
177
OUT PVOID DeviceInformationBuffer,
178
IN ULONG DeviceInformationBufferLength,
179
IN OUT PULONG LengthOfDataCopied);
180
typedef USB_BUSIFFN_GET_DEVICE_INFORMATION *PUSB_BUSIFFN_GET_DEVICE_INFORMATION;
185
USB_BUSIFFN_GET_CONTROLLER_INFORMATION (
187
IN OUT PVOID ControllerInformationBuffer,
188
IN ULONG ControllerInformationBufferLength,
189
IN OUT PULONG LengthOfDataCopied);
190
typedef USB_BUSIFFN_GET_CONTROLLER_INFORMATION *PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION;
195
USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND (
198
typedef USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND *PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND;
203
USB_BUSIFFN_GET_EXTENDED_HUB_INFO (
205
IN PDEVICE_OBJECT HubPhysicalDeviceObject,
206
IN PVOID HubInformationBuffer,
207
IN ULONG HubInformationBufferLength,
208
OUT PULONG LengthOfDataCopied);
209
typedef USB_BUSIFFN_GET_EXTENDED_HUB_INFO *PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO;
214
USB_BUSIFFN_GET_ROOTHUB_SYM_NAME (
216
IN PVOID HubSymNameBuffer,
217
IN ULONG HubSymNameBufferLength,
218
OUT PULONG HubSymNameActualLength);
219
typedef USB_BUSIFFN_GET_ROOTHUB_SYM_NAME *PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME;
224
USB_BUSIFFN_GET_DEVICE_BUSCONTEXT (
225
IN PVOID HubBusContext,
226
IN PVOID DeviceHandle);
227
typedef USB_BUSIFFN_GET_DEVICE_BUSCONTEXT *PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT;
232
USB_BUSIFFN_INITIALIZE_20HUB (
234
IN PUSB_DEVICE_HANDLE HubDeviceHandle,
236
typedef USB_BUSIFFN_INITIALIZE_20HUB *PUSB_BUSIFFN_INITIALIZE_20HUB;
241
USB_BUSIFFN_IS_ROOT (
243
IN PVOID DeviceObject);
244
typedef USB_BUSIFFN_IS_ROOT *PUSB_BUSIFFN_IS_ROOT;
249
USB_BUSIFFN_ACQUIRE_SEMAPHORE (
250
IN PVOID BusContext);
251
typedef USB_BUSIFFN_ACQUIRE_SEMAPHORE *PUSB_BUSIFFN_ACQUIRE_SEMAPHORE;
256
USB_BUSIFFN_RELEASE_SEMAPHORE (
257
IN PVOID BusContext);
258
typedef USB_BUSIFFN_RELEASE_SEMAPHORE *PUSB_BUSIFFN_RELEASE_SEMAPHORE;
264
IN PVOID CallBackContext);
265
typedef RH_INIT_CALLBACK *PRH_INIT_CALLBACK;
270
USB_BUSIFFN_ROOTHUB_INIT_NOTIFY (
272
IN PVOID CallbackContext,
273
IN PRH_INIT_CALLBACK CallbackRoutine);
274
typedef USB_BUSIFFN_ROOTHUB_INIT_NOTIFY *PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY;
279
USB_BUSIFFN_FLUSH_TRANSFERS (
281
IN PVOID DeviceHandle);
282
typedef USB_BUSIFFN_FLUSH_TRANSFERS *PUSB_BUSIFFN_FLUSH_TRANSFERS;
287
USB_BUSIFFN_CALC_PIPE_BANDWIDTH (
289
IN PUSBD_PIPE_INFORMATION PipeInfo,
290
IN USB_DEVICE_SPEED DeviceSpeed);
291
typedef USB_BUSIFFN_CALC_PIPE_BANDWIDTH *PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH;
296
USB_BUSIFFN_SET_BUS_WAKE_MODE (
299
typedef USB_BUSIFFN_SET_BUS_WAKE_MODE *PUSB_BUSIFFN_SET_BUS_WAKE_MODE;
304
USB_BUSIFFN_SET_DEVICE_FLAG (
306
IN GUID *DeviceFlagGuid,
308
IN ULONG ValueLength);
309
typedef USB_BUSIFFN_SET_DEVICE_FLAG *PUSB_BUSIFFN_SET_DEVICE_FLAG;
314
USB_BUSIFFN_SET_DEVHANDLE_DATA (
316
IN PVOID DeviceHandle,
317
IN PDEVICE_OBJECT UsbDevicePdo);
318
typedef USB_BUSIFFN_SET_DEVHANDLE_DATA *PUSB_BUSIFFN_SET_DEVHANDLE_DATA;
323
USB_BUSIFFN_TEST_POINT (
325
IN PVOID DeviceHandle,
328
typedef USB_BUSIFFN_TEST_POINT *PUSB_BUSIFFN_TEST_POINT;
333
USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO (
335
IN PUSB_DEVICE_HANDLE DeviceHandle,
336
OUT PVOID DeviceInformationBuffer,
337
IN ULONG DeviceInformationBufferLength,
338
IN OUT PULONG LengthOfDataCopied);
339
typedef USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO *PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO;
344
USB_BUSIFFN_WAIT_ASYNC_POWERUP (
345
IN PVOID BusContext);
346
typedef USB_BUSIFFN_WAIT_ASYNC_POWERUP *PUSB_BUSIFFN_WAIT_ASYNC_POWERUP;
351
USB_BUSIFFN_GET_DEVICE_ADDRESS (
353
IN PUSB_DEVICE_HANDLE DeviceHandle,
354
OUT PUSHORT DeviceAddress);
355
typedef USB_BUSIFFN_GET_DEVICE_ADDRESS *PUSB_BUSIFFN_GET_DEVICE_ADDRESS;
360
USB_BUSIFFN_DEREF_DEVICE_HANDLE (
362
IN PUSB_DEVICE_HANDLE DeviceHandle,
365
typedef USB_BUSIFFN_DEREF_DEVICE_HANDLE *PUSB_BUSIFFN_DEREF_DEVICE_HANDLE;
370
USB_BUSIFFN_REF_DEVICE_HANDLE (
372
IN PUSB_DEVICE_HANDLE DeviceHandle,
375
typedef USB_BUSIFFN_REF_DEVICE_HANDLE *PUSB_BUSIFFN_REF_DEVICE_HANDLE;
380
USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE (
382
IN PUSB_DEVICE_HANDLE DeviceHandle,
383
IN ULONG NewIdleReadyState);
384
typedef USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE *PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE;
389
USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT (
391
IN USHORT PortNumber,
392
OUT LPGUID ContainerId);
393
typedef USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT;
398
USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT (
400
IN USHORT PortNumber,
401
IN LPGUID ContainerId);
402
typedef USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT;
407
USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES (
409
IN PUSB_DEVICE_HANDLE DeviceHandle);
410
typedef USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES *PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES;
412
#define ERRATA_FLAG_RESET_TT_ON_CANCEL 1
413
#define ERRATA_FLAG_NO_CLEAR_TT_BUFFER_ON_CANCEL 2
415
#define USB_BUSIF_HUB_VERSION_0 0x0000
416
#define USB_BUSIF_HUB_VERSION_1 0x0001
417
#define USB_BUSIF_HUB_VERSION_2 0x0002
418
#define USB_BUSIF_HUB_VERSION_3 0x0003
419
#define USB_BUSIF_HUB_VERSION_4 0x0004
420
#define USB_BUSIF_HUB_VERSION_5 0x0005
421
#define USB_BUSIF_HUB_VERSION_6 0x0006
422
#define USB_BUSIF_HUB_VERSION_7 0x0007
424
#define USB_BUSIF_HUB_MIDUMP_VERSION_0 0x0000
426
#define USB_BUSIF_HUB_SS_VERSION_0 0x0000
431
USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG (
433
IN PUSB_DEVICE_HANDLE DeviceHandle,
434
IN ULONG DeviceErrataFlag);
435
typedef USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG *PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG;
437
DEFINE_GUID(USB_BUS_INTERFACE_HUB_GUID,
438
0xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a);
440
typedef struct _USB_BUS_INTERFACE_HUB_V0 {
444
PINTERFACE_REFERENCE InterfaceReference;
445
PINTERFACE_DEREFERENCE InterfaceDereference;
446
} USB_BUS_INTERFACE_HUB_V0, *PUSB_BUS_INTERFACE_HUB_V0;
448
typedef struct _USB_BUS_INTERFACE_HUB_V1 {
452
PINTERFACE_REFERENCE InterfaceReference;
453
PINTERFACE_DEREFERENCE InterfaceDereference;
454
PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
455
PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
456
PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
457
PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
458
PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
459
PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
460
PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
461
} USB_BUS_INTERFACE_HUB_V1, *PUSB_BUS_INTERFACE_HUB_V1;
463
typedef struct _USB_BUS_INTERFACE_HUB_V2 {
467
PINTERFACE_REFERENCE InterfaceReference;
468
PINTERFACE_DEREFERENCE InterfaceDereference;
469
PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
470
PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
471
PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
472
PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
473
PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
474
PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
475
PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
476
PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
477
PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
478
PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
479
PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
480
PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
481
PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
482
} USB_BUS_INTERFACE_HUB_V2, *PUSB_BUS_INTERFACE_HUB_V2;
484
typedef struct _USB_BUS_INTERFACE_HUB_V3 {
488
PINTERFACE_REFERENCE InterfaceReference;
489
PINTERFACE_DEREFERENCE InterfaceDereference;
490
PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
491
PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
492
PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
493
PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
494
PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
495
PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
496
PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
497
PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
498
PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
499
PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
500
PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
501
PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
502
PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
503
PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
504
} USB_BUS_INTERFACE_HUB_V3, *PUSB_BUS_INTERFACE_HUB_V3;
506
typedef struct _USB_BUS_INTERFACE_HUB_V4 {
510
PINTERFACE_REFERENCE InterfaceReference;
511
PINTERFACE_DEREFERENCE InterfaceDereference;
512
PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
513
PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
514
PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
515
PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
516
PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
517
PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
518
PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
519
PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
520
PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
521
PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
522
PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
523
PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
524
PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
525
PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
526
PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
527
} USB_BUS_INTERFACE_HUB_V4, *PUSB_BUS_INTERFACE_HUB_V4;
529
typedef struct _USB_BUS_INTERFACE_HUB_V5 {
533
PINTERFACE_REFERENCE InterfaceReference;
534
PINTERFACE_DEREFERENCE InterfaceDereference;
535
PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
536
PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
537
PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
538
PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
539
PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
540
PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
541
PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
542
PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
543
PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
544
PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
545
PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
546
PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
547
PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
548
PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
549
PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
550
PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData;
551
} USB_BUS_INTERFACE_HUB_V5, *PUSB_BUS_INTERFACE_HUB_V5;
553
typedef struct _USB_BUS_INTERFACE_HUB_V6 {
557
PINTERFACE_REFERENCE InterfaceReference;
558
PINTERFACE_DEREFERENCE InterfaceDereference;
559
PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice;
560
PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice;
561
PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
562
PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
563
PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
564
PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
565
PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
566
PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
567
PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
568
PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
569
PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
570
PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
571
PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
572
PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
573
PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
574
PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData;
575
PUSB_BUSIFFN_IS_ROOT HubIsRoot;
576
PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore;
577
PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore;
578
PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth;
579
PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode;
580
PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag;
581
PUSB_BUSIFFN_TEST_POINT HubTestPoint;
582
PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo;
583
PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp;
584
PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress;
585
PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle;
586
PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle;
587
PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState;
588
} USB_BUS_INTERFACE_HUB_V6, *PUSB_BUS_INTERFACE_HUB_V6;
590
typedef struct _USB_BUS_INTERFACE_HUB_V7 {
594
PINTERFACE_REFERENCE InterfaceReference;
595
PINTERFACE_DEREFERENCE InterfaceDereference;
596
PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice;
597
PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice;
598
PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
599
PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
600
PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
601
PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
602
PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
603
PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
604
PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
605
PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
606
PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
607
PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
608
PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
609
PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
610
PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
611
PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData;
612
PUSB_BUSIFFN_IS_ROOT HubIsRoot;
613
PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore;
614
PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore;
615
PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth;
616
PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode;
617
PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag;
618
PUSB_BUSIFFN_TEST_POINT HubTestPoint;
619
PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo;
620
PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp;
621
PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress;
622
PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle;
623
PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle;
624
PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState;
625
PUSB_BUSIFFN_CREATE_USB_DEVICE_V7 CreateUsbDeviceV7;
626
PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT GetContainerIdForPort;
627
PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT SetContainerIdForPort;
628
PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES AbortAllDevicePipes;
629
PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG SetDeviceErrataFlag;
630
} USB_BUS_INTERFACE_HUB_V7, *PUSB_BUS_INTERFACE_HUB_V7;
632
DEFINE_GUID(USB_BUS_INTERFACE_HUB_MINIDUMP_GUID,
633
0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38);
636
(USB_BUSIFFN *PUSB_BUSIFFN_SET_MINIDUMP_FLAGS) (
639
typedef struct _USB_BUS_INTERFACE_HUB_MINIDUMP {
643
PINTERFACE_REFERENCE InterfaceReference;
644
PINTERFACE_DEREFERENCE InterfaceDereference;
645
PUSB_BUSIFFN_SET_MINIDUMP_FLAGS SetUsbPortMiniDumpFlags;
646
} USB_BUS_INTERFACE_HUB_MINIDUMP, *PUSB_BUS_INTERFACE_HUB_MINIDUMP;
648
DEFINE_GUID(USB_BUS_INTERFACE_HUB_SS_GUID,
649
0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f);
652
(USB_BUSIFFN *PUSB_BUSIFFN_SUSPEND_HUB) (
656
(USB_BUSIFFN *PUSB_BUSIFFN_RESUME_HUB) (
659
typedef struct _USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND {
663
PINTERFACE_REFERENCE InterfaceReference;
664
PINTERFACE_DEREFERENCE InterfaceDereference;
665
PUSB_BUSIFFN_SUSPEND_HUB SuspendHub;
666
PUSB_BUSIFFN_RESUME_HUB ResumeHub;
667
} USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND, *PUSB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND;
669
#include <pshpack1.h>
671
typedef struct _USB_PIPE_INFORMATION_0 {
672
USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
674
ULONG ScheduleOffset;
675
} USB_PIPE_INFORMATION_0, *PUSB_PIPE_INFORMATION_0;
677
typedef struct _USB_LEVEL_INFORMATION {
678
ULONG InformationLevel;
680
} USB_LEVEL_INFORMATION, *PUSB_LEVEL_INFORMATION;
682
typedef struct _USB_DEVICE_INFORMATION_0 {
683
ULONG InformationLevel;
686
USB_DEVICE_DESCRIPTOR DeviceDescriptor;
688
UCHAR CurrentConfigurationValue;
690
USHORT DeviceAddress;
692
USB_DEVICE_SPEED DeviceSpeed;
693
USB_DEVICE_TYPE DeviceType;
694
ULONG NumberOfOpenPipes;
695
USB_PIPE_INFORMATION_0 PipeList[1];
696
} USB_DEVICE_INFORMATION_0, *PUSB_DEVICE_INFORMATION_0;
698
typedef struct _USB_CONTROLLER_INFORMATION_0 {
699
ULONG InformationLevel;
701
BOOLEAN SelectiveSuspendEnabled;
702
BOOLEAN IsHighSpeedController;
703
} USB_CONTROLLER_INFORMATION_0, *PUSB_CONTROLLER_INFORMATION_0;
705
typedef struct _USB_CONTROLLER_INFORMATION_1 {
706
ULONG InformationLevel;
708
BOOLEAN SelectiveSuspendEnabled;
709
BOOLEAN IsHighSpeedController;
713
} USB_CONTROLLER_INFORMATION_1, *PUSB_CONTROLLER_INFORMATION_1;
715
typedef struct _USB_EXTPORT_INFORMATION_0 {
716
ULONG PhysicalPortNumber;
717
ULONG PortLabelNumber;
720
ULONG PortAttributes;
721
} USB_EXTPORT_INFORMATION_0, *PUSB_EXTPORT_INFORMATION;
723
typedef struct _USB_EXTHUB_INFORMATION_0 {
724
ULONG InformationLevel;
726
USB_EXTPORT_INFORMATION_0 Port[255];
727
} USB_EXTHUB_INFORMATION_0, *PUSB_EXTHUB_INFORMATION_0;
729
typedef struct _USB_DEVICE_PERFORMANCE_INFO_0 {
730
ULONG InformationLevel;
734
ULONG ControlDataBytes;
735
ULONG ControlUrbCount;
738
ULONG InterruptBytes;
739
ULONG InterruptUrbCount;
740
ULONG AllocedInterrupt[6];
742
ULONG Total32secBandwidth;
743
ULONG TotalTtBandwidth;
744
ULONG TotalIsoLatency;
745
ULONG DroppedIsoPackets;
746
ULONG TransferErrors;
747
} USB_DEVICE_PERFORMANCE_INFO_0, *PUSB_DEVICE_PERFORMANCE_INFO_0;
751
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */