1#pragma once 2 3#define _HUBBUSIF_ 4 5#include "usbdi.h" 6 7#if (NTDDI_VERSION >= NTDDI_WINXP) 8 9#if !defined(_USBBUSIF_) 10typedef PVOID PUSB_DEVICE_HANDLE; 11#endif 12 13typedef struct _ROOTHUB_PDO_EXTENSION { 14 ULONG Signature; 15} ROOTHUB_PDO_EXTENSION, *PROOTHUB_PDO_EXTENSION; 16 17#define USBD_DEVHACK_SLOW_ENUMERATION 0x00000001 18#define USBD_DEVHACK_DISABLE_SN 0x00000002 19#define USBD_DEVHACK_SET_DIAG_ID 0x00000004 20 21#ifndef USB_BUSIFFN 22#if defined(_ARM_) 23#define USB_BUSIFFN 24#else 25#define USB_BUSIFFN __stdcall 26#endif 27#endif 28 29#define CD_ERR_V1 0x00000001 30 31#define ID_ERR_V1 0x00000001 32 33#define USBD_KEEP_DEVICE_DATA 0x00000001 34#define USBD_MARK_DEVICE_BUSY 0x00000002 35 36#define USB_IDLE_NOT_READY 0 37#define USB_IDLE_READY 1 38 39typedef 40NTSTATUS 41USB_BUSIFFN 42USB_BUSIFFN_CREATE_USB_DEVICE ( 43 IN PVOID BusContext, 44 OUT PUSB_DEVICE_HANDLE *NewDeviceHandle, 45 IN PUSB_DEVICE_HANDLE HubDeviceHandle, 46 IN USHORT PortStatus, 47 IN USHORT PortNumber); 48 49typedef USB_BUSIFFN_CREATE_USB_DEVICE *PUSB_BUSIFFN_CREATE_USB_DEVICE; 50 51typedef enum _USBPORT_CREATEDEV_ERROR { 52 CreateDevErrNotSet = 0, 53 CreateDevBadHubDevHandle, 54 CreateDevFailedAllocDevHandle, 55 CreateDevFailedOpenEndpoint, 56 CreateDevFailedAllocDsBuff, 57 CreateDevFailedGetDs, 58 CreateDevTtNotFound, 59 CreateDevBadDevHandlePtr 60} USBPORT_CREATEDEV_ERROR; 61 62typedef struct _USB_CD_ERROR_INFORMATION { 63 ULONG Version; 64 USBPORT_CREATEDEV_ERROR PathError; 65 ULONG UlongArg1; 66 ULONG UlongArg2; 67 NTSTATUS NtStatus; 68 UCHAR XtraInfo[64]; 69} USB_CD_ERROR_INFORMATION, *PUSB_CD_ERROR_INFORMATION; 70 71typedef 72NTSTATUS 73USB_BUSIFFN 74USB_BUSIFFN_CREATE_USB_DEVICE_EX ( 75 IN PVOID BusContext, 76 OUT PUSB_DEVICE_HANDLE *NewDeviceHandle, 77 IN PUSB_DEVICE_HANDLE HsHubDeviceHandle, 78 IN USHORT PortStatus, 79 IN USHORT PortNumber, 80 OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo, 81 IN USHORT TtPortNumber); 82 83typedef USB_BUSIFFN_CREATE_USB_DEVICE_EX *PUSB_BUSIFFN_CREATE_USB_DEVICE_EX; 84 85typedef struct _USB_PORT_PATH { 86 ULONG PortPathDepth; 87 ULONG PortPath[6]; 88} USB_PORT_PATH, *PUSB_PORT_PATH; 89 90typedef 91NTSTATUS 92USB_BUSIFFN 93USB_BUSIFFN_CREATE_USB_DEVICE_V7 ( 94 IN PVOID BusContext, 95 OUT PUSB_DEVICE_HANDLE *NewDeviceHandle, 96 IN PUSB_DEVICE_HANDLE HsHubDeviceHandle, 97 IN USHORT PortStatus, 98 IN PUSB_PORT_PATH PortPath, 99 OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo, 100 IN USHORT TtPortNumber, 101 IN PDEVICE_OBJECT PdoDeviceObject, 102 IN PUNICODE_STRING PhysicalDeviceObjectName); 103 104typedef USB_BUSIFFN_CREATE_USB_DEVICE_V7 *PUSB_BUSIFFN_CREATE_USB_DEVICE_V7; 105 106typedef enum _USBPORT_INITDEV_ERROR { 107 InitDevErrNotSet = 0, 108 InitDevFailedSetAddress, 109 InitDevFailedPokeEndpoint, 110 InitDevBadDeviceDescriptor 111} USBPORT_INITDEV_ERROR; 112 113typedef struct _USB_ID_ERROR_INFORMATION { 114 ULONG Version; 115 USBPORT_INITDEV_ERROR PathError; 116 ULONG Arg1; 117 ULONG UsbAddress; 118 NTSTATUS NtStatus; 119 USBD_STATUS UsbdStatus; 120 UCHAR XtraInfo[64]; 121} USB_ID_ERROR_INFORMATION, *PUSB_ID_ERROR_INFORMATION; 122 123typedef 124NTSTATUS 125USB_BUSIFFN 126USB_BUSIFFN_INITIALIZE_USB_DEVICE ( 127 IN PVOID BusContext, 128 IN OUT PUSB_DEVICE_HANDLE DeviceHandle); 129 130typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE; 131 132typedef 133NTSTATUS 134USB_BUSIFFN 135USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX ( 136 IN PVOID BusContext, 137 IN OUT PUSB_DEVICE_HANDLE DeviceHandle, 138 OUT PUSB_ID_ERROR_INFORMATION IdErrInfo); 139 140typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX; 141 142typedef 143NTSTATUS 144USB_BUSIFFN 145USB_BUSIFFN_REMOVE_USB_DEVICE ( 146 IN PVOID BusContext, 147 IN OUT PUSB_DEVICE_HANDLE DeviceHandle, 148 IN ULONG Flags); 149 150typedef USB_BUSIFFN_REMOVE_USB_DEVICE *PUSB_BUSIFFN_REMOVE_USB_DEVICE; 151 152typedef 153NTSTATUS 154USB_BUSIFFN 155USB_BUSIFFN_GET_USB_DESCRIPTORS ( 156 IN PVOID BusContext, 157 IN OUT PUSB_DEVICE_HANDLE DeviceHandle, 158 OUT PUCHAR DeviceDescriptorBuffer, 159 IN OUT PULONG DeviceDescriptorBufferLength, 160 OUT PUCHAR ConfigDescriptorBuffer, 161 IN OUT PULONG ConfigDescriptorBufferLength); 162 163typedef USB_BUSIFFN_GET_USB_DESCRIPTORS *PUSB_BUSIFFN_GET_USB_DESCRIPTORS; 164 165typedef 166NTSTATUS 167USB_BUSIFFN 168USB_BUSIFFN_RESTORE_DEVICE ( 169 IN PVOID BusContext, 170 IN OUT PUSB_DEVICE_HANDLE OldDeviceHandle, 171 IN OUT PUSB_DEVICE_HANDLE NewDeviceHandle); 172 173typedef USB_BUSIFFN_RESTORE_DEVICE *PUSB_BUSIFFN_RESTORE_DEVICE; 174 175typedef 176NTSTATUS 177USB_BUSIFFN 178USB_BUSIFFN_GET_POTRTHACK_FLAGS ( 179 IN PVOID BusContext, 180 IN OUT PULONG Flags); 181 182typedef USB_BUSIFFN_GET_POTRTHACK_FLAGS *PUSB_BUSIFFN_GET_POTRTHACK_FLAGS; 183 184typedef 185NTSTATUS 186USB_BUSIFFN 187USB_BUSIFFN_GET_DEVICE_INFORMATION ( 188 IN PVOID BusContext, 189 IN PUSB_DEVICE_HANDLE DeviceHandle, 190 OUT PVOID DeviceInformationBuffer, 191 IN ULONG DeviceInformationBufferLength, 192 IN OUT PULONG LengthOfDataCopied); 193 194typedef USB_BUSIFFN_GET_DEVICE_INFORMATION *PUSB_BUSIFFN_GET_DEVICE_INFORMATION; 195 196typedef 197NTSTATUS 198USB_BUSIFFN 199USB_BUSIFFN_GET_CONTROLLER_INFORMATION ( 200 IN PVOID BusContext, 201 IN OUT PVOID ControllerInformationBuffer, 202 IN ULONG ControllerInformationBufferLength, 203 IN OUT PULONG LengthOfDataCopied); 204 205typedef USB_BUSIFFN_GET_CONTROLLER_INFORMATION *PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION; 206 207typedef 208NTSTATUS 209USB_BUSIFFN 210USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ( 211 IN PVOID BusContext, 212 IN BOOLEAN Enable); 213 214typedef USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND *PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND; 215 216typedef 217NTSTATUS 218USB_BUSIFFN 219USB_BUSIFFN_GET_EXTENDED_HUB_INFO ( 220 IN PVOID BusContext, 221 IN PDEVICE_OBJECT HubPhysicalDeviceObject, 222 IN PVOID HubInformationBuffer, 223 IN ULONG HubInformationBufferLength, 224 OUT PULONG LengthOfDataCopied); 225 226typedef USB_BUSIFFN_GET_EXTENDED_HUB_INFO *PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO; 227 228typedef 229NTSTATUS 230USB_BUSIFFN 231USB_BUSIFFN_GET_ROOTHUB_SYM_NAME ( 232 IN PVOID BusContext, 233 IN PVOID HubSymNameBuffer, 234 IN ULONG HubSymNameBufferLength, 235 OUT PULONG HubSymNameActualLength); 236 237typedef USB_BUSIFFN_GET_ROOTHUB_SYM_NAME *PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME; 238 239typedef 240PVOID 241USB_BUSIFFN 242USB_BUSIFFN_GET_DEVICE_BUSCONTEXT ( 243 IN PVOID HubBusContext, 244 IN PVOID DeviceHandle); 245 246typedef USB_BUSIFFN_GET_DEVICE_BUSCONTEXT *PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT; 247 248typedef 249NTSTATUS 250USB_BUSIFFN 251USB_BUSIFFN_INITIALIZE_20HUB ( 252 IN PVOID BusContext, 253 IN PUSB_DEVICE_HANDLE HubDeviceHandle, 254 IN ULONG TtCount); 255 256typedef USB_BUSIFFN_INITIALIZE_20HUB *PUSB_BUSIFFN_INITIALIZE_20HUB; 257 258typedef 259BOOLEAN 260USB_BUSIFFN 261USB_BUSIFFN_IS_ROOT ( 262 IN PVOID BusContext, 263 IN PVOID DeviceObject); 264 265typedef USB_BUSIFFN_IS_ROOT *PUSB_BUSIFFN_IS_ROOT; 266 267typedef 268VOID 269USB_BUSIFFN 270USB_BUSIFFN_ACQUIRE_SEMAPHORE ( 271 IN PVOID BusContext); 272 273typedef USB_BUSIFFN_ACQUIRE_SEMAPHORE *PUSB_BUSIFFN_ACQUIRE_SEMAPHORE; 274 275typedef 276VOID 277USB_BUSIFFN 278USB_BUSIFFN_RELEASE_SEMAPHORE ( 279 IN PVOID BusContext); 280 281typedef USB_BUSIFFN_RELEASE_SEMAPHORE *PUSB_BUSIFFN_RELEASE_SEMAPHORE; 282 283typedef 284VOID 285__stdcall 286RH_INIT_CALLBACK ( 287 IN PVOID CallBackContext); 288 289typedef RH_INIT_CALLBACK *PRH_INIT_CALLBACK; 290 291typedef 292NTSTATUS 293USB_BUSIFFN 294USB_BUSIFFN_ROOTHUB_INIT_NOTIFY ( 295 IN PVOID BusContext, 296 IN PVOID CallbackContext, 297 IN PRH_INIT_CALLBACK CallbackRoutine); 298 299typedef USB_BUSIFFN_ROOTHUB_INIT_NOTIFY *PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY; 300 301typedef 302VOID 303USB_BUSIFFN 304USB_BUSIFFN_FLUSH_TRANSFERS ( 305 IN PVOID BusContext, 306 IN PVOID DeviceHandle); 307 308typedef USB_BUSIFFN_FLUSH_TRANSFERS *PUSB_BUSIFFN_FLUSH_TRANSFERS; 309 310typedef 311ULONG 312USB_BUSIFFN 313USB_BUSIFFN_CALC_PIPE_BANDWIDTH ( 314 IN PVOID BusContext, 315 IN PUSBD_PIPE_INFORMATION PipeInfo, 316 IN USB_DEVICE_SPEED DeviceSpeed); 317 318typedef USB_BUSIFFN_CALC_PIPE_BANDWIDTH *PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH; 319 320typedef 321VOID 322USB_BUSIFFN 323USB_BUSIFFN_SET_BUS_WAKE_MODE ( 324 IN PVOID BusContext, 325 IN ULONG Mode); 326 327typedef USB_BUSIFFN_SET_BUS_WAKE_MODE *PUSB_BUSIFFN_SET_BUS_WAKE_MODE; 328 329typedef 330VOID 331USB_BUSIFFN 332USB_BUSIFFN_SET_DEVICE_FLAG ( 333 IN PVOID BusContext, 334 IN GUID *DeviceFlagGuid, 335 IN PVOID ValueData, 336 IN ULONG ValueLength); 337 338typedef USB_BUSIFFN_SET_DEVICE_FLAG *PUSB_BUSIFFN_SET_DEVICE_FLAG; 339 340typedef 341VOID 342USB_BUSIFFN 343USB_BUSIFFN_SET_DEVHANDLE_DATA ( 344 IN PVOID BusContext, 345 IN PVOID DeviceHandle, 346 IN PDEVICE_OBJECT UsbDevicePdo); 347 348typedef USB_BUSIFFN_SET_DEVHANDLE_DATA *PUSB_BUSIFFN_SET_DEVHANDLE_DATA; 349 350typedef 351NTSTATUS 352USB_BUSIFFN 353USB_BUSIFFN_TEST_POINT ( 354 IN PVOID BusContext, 355 IN PVOID DeviceHandle, 356 IN ULONG Opcode, 357 IN PVOID TestData); 358 359typedef USB_BUSIFFN_TEST_POINT *PUSB_BUSIFFN_TEST_POINT; 360 361typedef 362NTSTATUS 363USB_BUSIFFN 364USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO ( 365 IN PVOID BusContext, 366 IN PUSB_DEVICE_HANDLE DeviceHandle, 367 OUT PVOID DeviceInformationBuffer, 368 IN ULONG DeviceInformationBufferLength, 369 IN OUT PULONG LengthOfDataCopied); 370 371typedef USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO *PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO; 372 373typedef 374NTSTATUS 375USB_BUSIFFN 376USB_BUSIFFN_WAIT_ASYNC_POWERUP ( 377 IN PVOID BusContext); 378 379typedef USB_BUSIFFN_WAIT_ASYNC_POWERUP *PUSB_BUSIFFN_WAIT_ASYNC_POWERUP; 380 381typedef 382NTSTATUS 383USB_BUSIFFN 384USB_BUSIFFN_GET_DEVICE_ADDRESS ( 385 IN PVOID BusContext, 386 IN PUSB_DEVICE_HANDLE DeviceHandle, 387 OUT PUSHORT DeviceAddress); 388 389typedef USB_BUSIFFN_GET_DEVICE_ADDRESS *PUSB_BUSIFFN_GET_DEVICE_ADDRESS; 390 391typedef 392VOID 393USB_BUSIFFN 394USB_BUSIFFN_DEREF_DEVICE_HANDLE ( 395 IN PVOID BusContext, 396 IN PUSB_DEVICE_HANDLE DeviceHandle, 397 IN PVOID Object, 398 IN ULONG Tag); 399 400typedef USB_BUSIFFN_DEREF_DEVICE_HANDLE *PUSB_BUSIFFN_DEREF_DEVICE_HANDLE; 401 402typedef 403NTSTATUS 404USB_BUSIFFN 405USB_BUSIFFN_REF_DEVICE_HANDLE ( 406 IN PVOID BusContext, 407 IN PUSB_DEVICE_HANDLE DeviceHandle, 408 IN PVOID Object, 409 IN ULONG Tag); 410 411typedef USB_BUSIFFN_REF_DEVICE_HANDLE *PUSB_BUSIFFN_REF_DEVICE_HANDLE; 412 413typedef 414ULONG 415USB_BUSIFFN 416USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE ( 417 IN PVOID BusContext, 418 IN PUSB_DEVICE_HANDLE DeviceHandle, 419 IN ULONG NewIdleReadyState); 420 421typedef USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE *PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE; 422 423typedef 424NTSTATUS 425USB_BUSIFFN 426USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT ( 427 IN PVOID BusContext, 428 IN USHORT PortNumber, 429 OUT LPGUID ContainerId); 430 431typedef USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT; 432 433typedef 434VOID 435USB_BUSIFFN 436USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT ( 437 IN PVOID BusContext, 438 IN USHORT PortNumber, 439 IN LPGUID ContainerId); 440 441typedef USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT; 442 443typedef 444NTSTATUS 445USB_BUSIFFN 446USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES ( 447 IN PVOID BusContext, 448 IN PUSB_DEVICE_HANDLE DeviceHandle); 449 450typedef USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES *PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES; 451 452#define ERRATA_FLAG_RESET_TT_ON_CANCEL 1 453#define ERRATA_FLAG_NO_CLEAR_TT_BUFFER_ON_CANCEL 2 454 455#define USB_BUSIF_HUB_VERSION_0 0x0000 456#define USB_BUSIF_HUB_VERSION_1 0x0001 457#define USB_BUSIF_HUB_VERSION_2 0x0002 458#define USB_BUSIF_HUB_VERSION_3 0x0003 459#define USB_BUSIF_HUB_VERSION_4 0x0004 460#define USB_BUSIF_HUB_VERSION_5 0x0005 461#define USB_BUSIF_HUB_VERSION_6 0x0006 462#define USB_BUSIF_HUB_VERSION_7 0x0007 463 464#define USB_BUSIF_HUB_MIDUMP_VERSION_0 0x0000 465 466#define USB_BUSIF_HUB_SS_VERSION_0 0x0000 467 468typedef 469VOID 470USB_BUSIFFN 471USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG ( 472 IN PVOID BusContext, 473 IN PUSB_DEVICE_HANDLE DeviceHandle, 474 IN ULONG DeviceErrataFlag); 475 476typedef USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG *PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG; 477 478DEFINE_GUID(USB_BUS_INTERFACE_HUB_GUID, 4790xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a); 480 481typedef struct _USB_BUS_INTERFACE_HUB_V0 { 482 USHORT Size; 483 USHORT Version; 484 PVOID BusContext; 485 PINTERFACE_REFERENCE InterfaceReference; 486 PINTERFACE_DEREFERENCE InterfaceDereference; 487} USB_BUS_INTERFACE_HUB_V0, *PUSB_BUS_INTERFACE_HUB_V0; 488 489typedef struct _USB_BUS_INTERFACE_HUB_V1 { 490 USHORT Size; 491 USHORT Version; 492 PVOID BusContext; 493 PINTERFACE_REFERENCE InterfaceReference; 494 PINTERFACE_DEREFERENCE InterfaceDereference; 495 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice; 496 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice; 497 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors; 498 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice; 499 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice; 500 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags; 501 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation; 502} USB_BUS_INTERFACE_HUB_V1, *PUSB_BUS_INTERFACE_HUB_V1; 503 504typedef struct _USB_BUS_INTERFACE_HUB_V2 { 505 USHORT Size; 506 USHORT Version; 507 PVOID BusContext; 508 PINTERFACE_REFERENCE InterfaceReference; 509 PINTERFACE_DEREFERENCE InterfaceDereference; 510 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice; 511 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice; 512 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors; 513 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice; 514 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice; 515 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags; 516 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation; 517 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation; 518 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend; 519 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation; 520 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName; 521 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext; 522 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub; 523} USB_BUS_INTERFACE_HUB_V2, *PUSB_BUS_INTERFACE_HUB_V2; 524 525typedef struct _USB_BUS_INTERFACE_HUB_V3 { 526 USHORT Size; 527 USHORT Version; 528 PVOID BusContext; 529 PINTERFACE_REFERENCE InterfaceReference; 530 PINTERFACE_DEREFERENCE InterfaceDereference; 531 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice; 532 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice; 533 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors; 534 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice; 535 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice; 536 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags; 537 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation; 538 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation; 539 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend; 540 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation; 541 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName; 542 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext; 543 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub; 544 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification; 545} USB_BUS_INTERFACE_HUB_V3, *PUSB_BUS_INTERFACE_HUB_V3; 546 547typedef struct _USB_BUS_INTERFACE_HUB_V4 { 548 USHORT Size; 549 USHORT Version; 550 PVOID BusContext; 551 PINTERFACE_REFERENCE InterfaceReference; 552 PINTERFACE_DEREFERENCE InterfaceDereference; 553 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice; 554 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice; 555 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors; 556 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice; 557 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice; 558 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags; 559 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation; 560 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation; 561 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend; 562 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation; 563 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName; 564 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext; 565 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub; 566 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification; 567 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers; 568} USB_BUS_INTERFACE_HUB_V4, *PUSB_BUS_INTERFACE_HUB_V4; 569 570typedef struct _USB_BUS_INTERFACE_HUB_V5 { 571 USHORT Size; 572 USHORT Version; 573 PVOID BusContext; 574 PINTERFACE_REFERENCE InterfaceReference; 575 PINTERFACE_DEREFERENCE InterfaceDereference; 576 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice; 577 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice; 578 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors; 579 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice; 580 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice; 581 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags; 582 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation; 583 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation; 584 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend; 585 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation; 586 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName; 587 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext; 588 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub; 589 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification; 590 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers; 591 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData; 592} USB_BUS_INTERFACE_HUB_V5, *PUSB_BUS_INTERFACE_HUB_V5; 593 594typedef struct _USB_BUS_INTERFACE_HUB_V6 { 595 USHORT Size; 596 USHORT Version; 597 PVOID BusContext; 598 PINTERFACE_REFERENCE InterfaceReference; 599 PINTERFACE_DEREFERENCE InterfaceDereference; 600 PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice; 601 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice; 602 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors; 603 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice; 604 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice; 605 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags; 606 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation; 607 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation; 608 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend; 609 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation; 610 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName; 611 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext; 612 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub; 613 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification; 614 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers; 615 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData; 616 PUSB_BUSIFFN_IS_ROOT HubIsRoot; 617 PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore; 618 PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore; 619 PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth; 620 PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode; 621 PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag; 622 PUSB_BUSIFFN_TEST_POINT HubTestPoint; 623 PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo; 624 PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp; 625 PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress; 626 PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle; 627 PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle; 628 PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState; 629} USB_BUS_INTERFACE_HUB_V6, *PUSB_BUS_INTERFACE_HUB_V6; 630 631typedef struct _USB_BUS_INTERFACE_HUB_V7 { 632 USHORT Size; 633 USHORT Version; 634 PVOID BusContext; 635 PINTERFACE_REFERENCE InterfaceReference; 636 PINTERFACE_DEREFERENCE InterfaceDereference; 637 PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice; 638 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice; 639 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors; 640 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice; 641 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice; 642 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags; 643 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation; 644 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation; 645 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend; 646 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation; 647 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName; 648 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext; 649 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub; 650 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification; 651 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers; 652 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData; 653 PUSB_BUSIFFN_IS_ROOT HubIsRoot; 654 PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore; 655 PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore; 656 PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth; 657 PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode; 658 PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag; 659 PUSB_BUSIFFN_TEST_POINT HubTestPoint; 660 PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo; 661 PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp; 662 PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress; 663 PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle; 664 PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle; 665 PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState; 666 PUSB_BUSIFFN_CREATE_USB_DEVICE_V7 CreateUsbDeviceV7; 667 PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT GetContainerIdForPort; 668 PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT SetContainerIdForPort; 669 PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES AbortAllDevicePipes; 670 PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG SetDeviceErrataFlag; 671} USB_BUS_INTERFACE_HUB_V7, *PUSB_BUS_INTERFACE_HUB_V7; 672 673DEFINE_GUID(USB_BUS_INTERFACE_HUB_MINIDUMP_GUID, 674 0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38); 675 676typedef VOID 677(USB_BUSIFFN *PUSB_BUSIFFN_SET_MINIDUMP_FLAGS) ( 678 IN PVOID); 679 680typedef struct _USB_BUS_INTERFACE_HUB_MINIDUMP { 681 USHORT Size; 682 USHORT Version; 683 PVOID BusContext; 684 PINTERFACE_REFERENCE InterfaceReference; 685 PINTERFACE_DEREFERENCE InterfaceDereference; 686 PUSB_BUSIFFN_SET_MINIDUMP_FLAGS SetUsbPortMiniDumpFlags; 687} USB_BUS_INTERFACE_HUB_MINIDUMP, *PUSB_BUS_INTERFACE_HUB_MINIDUMP; 688 689DEFINE_GUID(USB_BUS_INTERFACE_HUB_SS_GUID, 690 0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f); 691 692typedef NTSTATUS 693(USB_BUSIFFN *PUSB_BUSIFFN_SUSPEND_HUB) ( 694 PDEVICE_OBJECT Pdo); 695 696typedef NTSTATUS 697(USB_BUSIFFN *PUSB_BUSIFFN_RESUME_HUB) ( 698 PDEVICE_OBJECT Pdo); 699 700typedef struct _USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND { 701 USHORT Size; 702 USHORT Version; 703 PVOID BusContext; 704 PINTERFACE_REFERENCE InterfaceReference; 705 PINTERFACE_DEREFERENCE InterfaceDereference; 706 PUSB_BUSIFFN_SUSPEND_HUB SuspendHub; 707 PUSB_BUSIFFN_RESUME_HUB ResumeHub; 708} USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND, *PUSB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND; 709 710#include <pshpack1.h> 711 712typedef struct _USB_PIPE_INFORMATION_0 { 713 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; 714 UCHAR ED_Pad[1]; 715 ULONG ScheduleOffset; 716} USB_PIPE_INFORMATION_0, *PUSB_PIPE_INFORMATION_0; 717 718typedef struct _USB_LEVEL_INFORMATION { 719 ULONG InformationLevel; 720 ULONG ActualLength; 721} USB_LEVEL_INFORMATION, *PUSB_LEVEL_INFORMATION; 722 723typedef struct _USB_DEVICE_INFORMATION_0 { 724 ULONG InformationLevel; 725 ULONG ActualLength; 726 ULONG PortNumber; 727 USB_DEVICE_DESCRIPTOR DeviceDescriptor; 728 UCHAR DD_pad[2]; 729 UCHAR CurrentConfigurationValue; 730 UCHAR ReservedMBZ; 731 USHORT DeviceAddress; 732 ULONG HubAddress; 733 USB_DEVICE_SPEED DeviceSpeed; 734 USB_DEVICE_TYPE DeviceType; 735 ULONG NumberOfOpenPipes; 736 USB_PIPE_INFORMATION_0 PipeList[1]; 737} USB_DEVICE_INFORMATION_0, *PUSB_DEVICE_INFORMATION_0; 738 739typedef struct _USB_CONTROLLER_INFORMATION_0 { 740 ULONG InformationLevel; 741 ULONG ActualLength; 742 BOOLEAN SelectiveSuspendEnabled; 743 BOOLEAN IsHighSpeedController; 744} USB_CONTROLLER_INFORMATION_0, *PUSB_CONTROLLER_INFORMATION_0; 745 746typedef struct _USB_CONTROLLER_INFORMATION_1 { 747 ULONG InformationLevel; 748 ULONG ActualLength; 749 BOOLEAN SelectiveSuspendEnabled; 750 BOOLEAN IsHighSpeedController; 751 ULONG HcBusNumber; 752 ULONG HcBusDevice; 753 ULONG HcBusFunction; 754} USB_CONTROLLER_INFORMATION_1, *PUSB_CONTROLLER_INFORMATION_1; 755 756typedef struct _USB_EXTPORT_INFORMATION_0 { 757 ULONG PhysicalPortNumber; 758 ULONG PortLabelNumber; 759 USHORT VidOverride; 760 USHORT PidOverride; 761 ULONG PortAttributes; 762} USB_EXTPORT_INFORMATION_0, *PUSB_EXTPORT_INFORMATION; 763 764typedef struct _USB_EXTHUB_INFORMATION_0 { 765 ULONG InformationLevel; 766 ULONG NumberOfPorts; 767 USB_EXTPORT_INFORMATION_0 Port[255]; 768} USB_EXTHUB_INFORMATION_0, *PUSB_EXTHUB_INFORMATION_0; 769 770typedef struct _USB_DEVICE_PERFORMANCE_INFO_0 { 771 ULONG InformationLevel; 772 ULONG ActualLength; 773 ULONG BulkBytes; 774 ULONG BulkUrbCount; 775 ULONG ControlDataBytes; 776 ULONG ControlUrbCount; 777 ULONG IsoBytes; 778 ULONG IsoUrbCount; 779 ULONG InterruptBytes; 780 ULONG InterruptUrbCount; 781 ULONG AllocedInterrupt[6]; 782 ULONG AllocedIso; 783 ULONG Total32secBandwidth; 784 ULONG TotalTtBandwidth; 785 ULONG TotalIsoLatency; 786 ULONG DroppedIsoPackets; 787 ULONG TransferErrors; 788} USB_DEVICE_PERFORMANCE_INFO_0, *PUSB_DEVICE_PERFORMANCE_INFO_0; 789 790#include <poppack.h> 791 792#endif /* NTDDI_VERSION >= NTDDI_WINXP */ 793 794