1/* 2 * usbioctl.h 3 * 4 * USB IOCTL interface. 5 * 6 * This file is part of the ReactOS PSDK package. 7 * 8 * Contributors: 9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 10 * 11 * THIS SOFTWARE IS NOT COPYRIGHTED 12 * 13 * This source code is offered for use in the public domain. You may 14 * use, modify or distribute it freely. 15 * 16 * This code is distributed in the hope that it will be useful but 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 18 * DISCLAIMED. This includes but is not limited to warranties of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 20 * 21 */ 22 23#pragma once 24 25#include "usb100.h" 26#include "usbiodef.h" 27 28#define IOCTL_INTERNAL_USB_SUBMIT_URB \ 29 CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS) 30 31#define IOCTL_INTERNAL_USB_RESET_PORT \ 32 CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) 33 34#define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \ 35 CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS) 36 37#define USBD_PORT_ENABLED 1 38#define USBD_PORT_CONNECTED 2 39 40#define IOCTL_INTERNAL_USB_GET_PORT_STATUS \ 41 CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS) 42 43#define IOCTL_INTERNAL_USB_ENABLE_PORT \ 44 CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) 45 46#define IOCTL_INTERNAL_USB_GET_HUB_COUNT \ 47 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS) 48 49#define IOCTL_INTERNAL_USB_CYCLE_PORT \ 50 CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) 51 52#define IOCTL_INTERNAL_USB_GET_HUB_NAME \ 53 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 54 55#define IOCTL_INTERNAL_USB_GET_BUS_INFO \ 56 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) 57 58#define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \ 59 CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 60 61#define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \ 62 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) 63 64#define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \ 65 CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) 66 67#if (_WIN32_WINNT >= 0x0501) 68 69#define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \ 70 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS) 71 72#define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \ 73 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS) 74 75#endif 76 77#if (_WIN32_WINNT >= 0x0600) 78 79#define IOCTL_INTERNAL_USB_NOTIFY_IDLE_READY \ 80 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION_EX, METHOD_NEITHER, FILE_ANY_ACCESS) 81 82#define IOCTL_INTERNAL_USB_REQ_GLOBAL_SUSPEND \ 83 CTL_CODE(FILE_DEVICE_USB, USB_REQ_GLOBAL_SUSPEND, METHOD_NEITHER, FILE_ANY_ACCESS) 84 85#define IOCTL_INTERNAL_USB_REQ_GLOBAL_RESUME \ 86 CTL_CODE(FILE_DEVICE_USB, USB_REQ_GLOBAL_RESUME, METHOD_NEITHER, FILE_ANY_ACCESS) 87 88#ifdef USB20_API 89typedef struct _USB_START_FAILDATA { 90 ULONG LengthInBytes; 91 NTSTATUS NtStatus; 92 USBD_STATUS UsbdStatus; 93 ULONG ConnectStatus; 94 UCHAR DriverData[4]; 95} USB_START_FAILDATA, *PUSB_START_FAILDATA; 96#endif 97 98#define IOCTL_INTERNAL_USB_RECORD_FAILURE \ 99 CTL_CODE(FILE_DEVICE_USB, USB_RECORD_FAILURE, METHOD_NEITHER, FILE_ANY_ACCESS) 100 101#define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE_EX \ 102 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE_EX, METHOD_NEITHER, FILE_ANY_ACCESS) 103 104#define IOCTL_INTERNAL_USB_GET_TT_DEVICE_HANDLE \ 105 CTL_CODE(FILE_DEVICE_USB, USB_GET_TT_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS) 106 107typedef struct _USB_TOPOLOGY_ADDRESS { 108 ULONG PciBusNumber; 109 ULONG PciDeviceNumber; 110 ULONG PciFunctionNumber; 111 ULONG Reserved; 112 USHORT RootHubPortNumber; 113 USHORT HubPortNumber[5]; 114 USHORT Reserved2; 115} USB_TOPOLOGY_ADDRESS, *PUSB_TOPOLOGY_ADDRESS; 116 117#define IOCTL_INTERNAL_USB_GET_TOPOLOGY_ADDRESS \ 118 CTL_CODE(FILE_DEVICE_USB, USB_GET_TOPOLOGY_ADDRESS, METHOD_NEITHER, FILE_ANY_ACCESS) 119 120#define IOCTL_INTERNAL_USB_GET_DEVICE_CONFIG_INFO \ 121 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CONFIG_INFO, METHOD_NEITHER, FILE_ANY_ACCESS) 122 123#endif /* _WIN32_WINNT >= 0x0600 */ 124 125#ifndef USB_KERNEL_IOCTL 126 127#define IOCTL_USB_HCD_GET_STATS_1 \ 128 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS) 129 130#define IOCTL_USB_HCD_GET_STATS_2 \ 131 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS) 132 133#define IOCTL_USB_HCD_DISABLE_PORT \ 134 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) 135 136#define IOCTL_USB_HCD_ENABLE_PORT \ 137 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) 138 139#define IOCTL_USB_HCD_DISABLE_PORT \ 140 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) 141 142#define IOCTL_USB_HCD_ENABLE_PORT \ 143 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) 144 145#ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF 146#define IOCTL_USB_DIAGNOSTIC_MODE_OFF \ 147 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS) 148#endif 149 150#ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON 151#define IOCTL_USB_DIAGNOSTIC_MODE_ON \ 152 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS) 153#endif 154 155#ifndef IOCTL_USB_GET_ROOT_HUB_NAME 156#define IOCTL_USB_GET_ROOT_HUB_NAME \ 157 CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 158#endif 159 160#ifndef IOCTL_GET_HCD_DRIVERKEY_NAME 161#define IOCTL_GET_HCD_DRIVERKEY_NAME \ 162 CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 163#endif 164 165#define IOCTL_USB_GET_NODE_INFORMATION \ 166 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) 167 168#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \ 169 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) 170 171#define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \ 172 CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS) 173 174#define IOCTL_USB_GET_NODE_CONNECTION_NAME \ 175 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 176 177#define IOCTL_USB_DIAG_IGNORE_HUBS_ON \ 178 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS) 179 180#define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \ 181 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS) 182 183#define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \ 184 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 185 186#if (_WIN32_WINNT >= 0x0501) 187 188#define IOCTL_USB_GET_HUB_CAPABILITIES \ 189 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS) 190 191#define IOCTL_USB_HUB_CYCLE_PORT \ 192 CTL_CODE(FILE_DEVICE_USB, USB_HUB_CYCLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) 193 194#define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \ 195 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS) 196 197#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \ 198 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS) 199 200#endif /* _WIN32_WINNT >= 0x0501 */ 201 202#if (_WIN32_WINNT >= 0x0600) 203 204#define IOCTL_USB_RESET_HUB \ 205 CTL_CODE(FILE_DEVICE_USB, USB_RESET_HUB, METHOD_BUFFERED, FILE_ANY_ACCESS) 206 207#define IOCTL_USB_GET_HUB_CAPABILITIES_EX \ 208 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, METHOD_BUFFERED, FILE_ANY_ACCESS) 209 210#endif /* _WIN32_WINNT >= 0x0600 */ 211 212#include <pshpack1.h> 213 214typedef enum _USB_HUB_NODE { 215 UsbHub, 216 UsbMIParent 217} USB_HUB_NODE; 218 219typedef struct _USB_HUB_INFORMATION { 220 USB_HUB_DESCRIPTOR HubDescriptor; 221 BOOLEAN HubIsBusPowered; 222} USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION; 223 224typedef struct _USB_MI_PARENT_INFORMATION { 225 ULONG NumberOfInterfaces; 226} USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION; 227 228typedef struct _USB_NODE_INFORMATION { 229 USB_HUB_NODE NodeType; 230 union { 231 USB_HUB_INFORMATION HubInformation; 232 USB_MI_PARENT_INFORMATION MiParentInformation; 233 } u; 234} USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION; 235 236typedef struct _USB_PIPE_INFO { 237 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; 238 ULONG ScheduleOffset; 239} USB_PIPE_INFO, *PUSB_PIPE_INFO; 240 241#if (_WIN32_WINNT >= 0x0600) 242 243typedef enum _USB_CONNECTION_STATUS { 244 NoDeviceConnected, 245 DeviceConnected, 246 DeviceFailedEnumeration, 247 DeviceGeneralFailure, 248 DeviceCausedOvercurrent, 249 DeviceNotEnoughPower, 250 DeviceNotEnoughBandwidth, 251 DeviceHubNestedTooDeeply, 252 DeviceInLegacyHub, 253 DeviceEnumerating, 254 DeviceReset 255} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS; 256 257#elif (_WIN32_WINNT >= 0x0501) 258 259typedef enum _USB_CONNECTION_STATUS { 260 NoDeviceConnected, 261 DeviceConnected, 262 DeviceFailedEnumeration, 263 DeviceGeneralFailure, 264 DeviceCausedOvercurrent, 265 DeviceNotEnoughPower, 266 DeviceNotEnoughBandwidth, 267 DeviceHubNestedTooDeeply, 268 DeviceInLegacyHub 269} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS; 270 271#else /* _WIN32_WINNT >= 0x0501 */ 272 273typedef enum _USB_CONNECTION_STATUS { 274 NoDeviceConnected, 275 DeviceConnected, 276 DeviceFailedEnumeration, 277 DeviceGeneralFailure, 278 DeviceCausedOvercurrent, 279 DeviceNotEnoughPower, 280 DeviceNotEnoughBandwidth 281} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS; 282 283#endif /* _WIN32_WINNT >= 0x0501 */ 284 285typedef struct _USB_NODE_CONNECTION_INFORMATION { 286 ULONG ConnectionIndex; 287 USB_DEVICE_DESCRIPTOR DeviceDescriptor; 288 UCHAR CurrentConfigurationValue; 289 BOOLEAN LowSpeed; 290 BOOLEAN DeviceIsHub; 291 USHORT DeviceAddress; 292 ULONG NumberOfOpenPipes; 293 USB_CONNECTION_STATUS ConnectionStatus; 294 USB_PIPE_INFO PipeList[0]; 295} USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION; 296 297typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME { 298 ULONG ConnectionIndex; 299 ULONG ActualLength; 300 WCHAR DriverKeyName[1]; 301} USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME; 302 303typedef struct _USB_NODE_CONNECTION_NAME { 304 ULONG ConnectionIndex; 305 ULONG ActualLength; 306 WCHAR NodeName[1]; 307} USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME; 308 309typedef struct _USB_HUB_NAME { 310 ULONG ActualLength; 311 WCHAR HubName[1]; 312} USB_HUB_NAME, *PUSB_HUB_NAME; 313 314typedef struct _USB_ROOT_HUB_NAME { 315 ULONG ActualLength; 316 WCHAR RootHubName[1]; 317} USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME; 318 319typedef struct _USB_HCD_DRIVERKEY_NAME { 320 ULONG ActualLength; 321 WCHAR DriverKeyName[1]; 322} USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME; 323 324typedef struct _USB_DESCRIPTOR_REQUEST { 325 ULONG ConnectionIndex; 326 struct { 327 UCHAR bmRequest; 328 UCHAR bRequest; 329 USHORT wValue; 330 USHORT wIndex; 331 USHORT wLength; 332 } SetupPacket; 333 UCHAR Data[0]; 334} USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST; 335 336#if (_WIN32_WINNT >= 0x0501) 337 338typedef struct _USB_HUB_CAPABILITIES { 339 ULONG HubIs2xCapable:1; 340} USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES; 341 342typedef struct _USB_NODE_CONNECTION_ATTRIBUTES { 343 ULONG ConnectionIndex; 344 USB_CONNECTION_STATUS ConnectionStatus; 345 ULONG PortAttributes; 346} USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES; 347 348typedef struct _USB_NODE_CONNECTION_INFORMATION_EX { 349 ULONG ConnectionIndex; 350 USB_DEVICE_DESCRIPTOR DeviceDescriptor; 351 UCHAR CurrentConfigurationValue; 352 UCHAR Speed; 353 BOOLEAN DeviceIsHub; 354 USHORT DeviceAddress; 355 ULONG NumberOfOpenPipes; 356 USB_CONNECTION_STATUS ConnectionStatus; 357 USB_PIPE_INFO PipeList[0]; 358} USB_NODE_CONNECTION_INFORMATION_EX, *PUSB_NODE_CONNECTION_INFORMATION_EX; 359 360C_ASSERT(sizeof(USB_NODE_CONNECTION_INFORMATION_EX) == sizeof(USB_NODE_CONNECTION_INFORMATION)); 361 362#endif /* _WIN32_WINNT >= 0x0501 */ 363 364#if (_WIN32_WINNT >= 0x0600) 365 366typedef union _USB_HUB_CAP_FLAGS { 367 ULONG ul; 368 __C89_NAMELESS struct { 369 ULONG HubIsHighSpeedCapable:1; 370 ULONG HubIsHighSpeed:1; 371 ULONG HubIsMultiTtCapable:1; 372 ULONG HubIsMultiTt:1; 373 ULONG HubIsRoot:1; 374 ULONG HubIsArmedWakeOnConnect:1; 375 ULONG HubIsBusPowered:1; 376 ULONG ReservedMBZ:25; 377 }; 378} USB_HUB_CAP_FLAGS, *PUSB_HUB_CAP_FLAGS; 379 380C_ASSERT(sizeof(USB_HUB_CAP_FLAGS) == sizeof(ULONG)); 381 382typedef struct _USB_HUB_CAPABILITIES_EX { 383 USB_HUB_CAP_FLAGS CapabilityFlags; 384} USB_HUB_CAPABILITIES_EX, *PUSB_HUB_CAPABILITIES_EX; 385 386typedef struct _USB_CYCLE_PORT_PARAMS { 387 ULONG ConnectionIndex; 388 ULONG StatusReturned; 389} USB_CYCLE_PORT_PARAMS, *PUSB_CYCLE_PORT_PARAMS; 390 391typedef struct _USB_ID_STRING { 392 USHORT LanguageId; 393 USHORT Pad; 394 ULONG LengthInBytes; 395 PWCHAR Buffer; 396} USB_ID_STRING, *PUSB_ID_STRING; 397 398typedef struct _USB_HUB_DEVICE_UXD_SETTINGS { 399 ULONG Version; 400 GUID PnpGuid; 401 GUID OwnerGuid; 402 ULONG DeleteOnShutdown; 403 ULONG DeleteOnReload; 404 ULONG DeleteOnDisconnect; 405 ULONG Reserved[5]; 406} USB_HUB_DEVICE_UXD_SETTINGS, *PUSB_HUB_DEVICE_UXD_SETTINGS; 407 408typedef struct _HUB_DEVICE_CONFIG_INFO_V1 { 409 ULONG Version; 410 ULONG Length; 411 USB_HUB_CAP_FLAGS HubFlags; 412 USB_ID_STRING HardwareIds; 413 USB_ID_STRING CompatibleIds; 414 USB_ID_STRING DeviceDescription; 415 ULONG Reserved[19]; 416 USB_HUB_DEVICE_UXD_SETTINGS UxdSettings; 417} HUB_DEVICE_CONFIG_INFO, *PHUB_DEVICE_CONFIG_INFO; 418 419#endif /* _WIN32_WINNT >= 0x0600 */ 420 421typedef struct _HCD_ISO_STAT_COUNTERS { 422 USHORT LateUrbs; 423 USHORT DoubleBufferedPackets; 424 USHORT TransfersCF_5ms; 425 USHORT TransfersCF_2ms; 426 USHORT TransfersCF_1ms; 427 USHORT MaxInterruptLatency; 428 USHORT BadStartFrame; 429 USHORT StaleUrbs; 430 USHORT IsoPacketNotAccesed; 431 USHORT IsoPacketHWError; 432 USHORT SmallestUrbPacketCount; 433 USHORT LargestUrbPacketCount; 434 USHORT IsoCRC_Error; 435 USHORT IsoOVERRUN_Error; 436 USHORT IsoINTERNAL_Error; 437 USHORT IsoUNKNOWN_Error; 438 ULONG IsoBytesTransferred; 439 USHORT LateMissedCount; 440 USHORT HWIsoMissedCount; 441 ULONG Reserved7[8]; 442} HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS; 443 444typedef struct _HCD_STAT_COUNTERS { 445 ULONG BytesTransferred; 446 USHORT IsoMissedCount; 447 USHORT DataOverrunErrorCount; 448 USHORT CrcErrorCount; 449 USHORT ScheduleOverrunCount; 450 USHORT TimeoutErrorCount; 451 USHORT InternalHcErrorCount; 452 USHORT BufferOverrunErrorCount; 453 USHORT SWErrorCount; 454 USHORT StallPidCount; 455 USHORT PortDisableCount; 456} HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS; 457 458typedef struct _HCD_STAT_INFORMATION_1 { 459 ULONG Reserved1; 460 ULONG Reserved2; 461 ULONG ResetCounters; 462 LARGE_INTEGER TimeRead; 463 HCD_STAT_COUNTERS Counters; 464} HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1; 465 466typedef struct _HCD_STAT_INFORMATION_2 { 467 ULONG Reserved1; 468 ULONG Reserved2; 469 ULONG ResetCounters; 470 LARGE_INTEGER TimeRead; 471 LONG LockedMemoryUsed; 472 HCD_STAT_COUNTERS Counters; 473 HCD_ISO_STAT_COUNTERS IsoCounters; 474} HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2; 475 476#define WMI_USB_DRIVER_INFORMATION 0 477#define WMI_USB_DRIVER_NOTIFICATION 1 478#define WMI_USB_POWER_DEVICE_ENABLE 2 479#define WMI_USB_HUB_NODE_INFORMATION 4 480 481#define WMI_USB_PERFORMANCE_INFORMATION 1 482#define WMI_USB_DEVICE_NODE_INFORMATION 2 483 484#if (_WIN32_WINNT >= 0x0501) 485 486typedef enum _USB_NOTIFICATION_TYPE { 487 EnumerationFailure = 0, 488 InsufficentBandwidth, 489 InsufficentPower, 490 OverCurrent, 491 ResetOvercurrent, 492 AcquireBusInfo, 493 AcquireHubName, 494 AcquireControllerName, 495 HubOvercurrent, 496 HubPowerChange, 497 HubNestedTooDeeply, 498 ModernDeviceInLegacyHub 499} USB_NOTIFICATION_TYPE; 500 501#else /* _WIN32_WINNT >= 0x0501 */ 502 503typedef enum _USB_NOTIFICATION_TYPE { 504 EnumerationFailure = 0, 505 InsufficentBandwidth, 506 InsufficentPower, 507 OverCurrent, 508 ResetOvercurrent, 509 AcquireBusInfo, 510 AcquireHubName, 511 AcquireControllerName, 512 HubOvercurrent, 513 HubPowerChange 514} USB_NOTIFICATION_TYPE; 515 516#endif /* _WIN32_WINNT >= 0x0501 */ 517 518typedef struct _USB_NOTIFICATION { 519 USB_NOTIFICATION_TYPE NotificationType; 520} USB_NOTIFICATION, *PUSB_NOTIFICATION; 521 522typedef struct _USB_CONNECTION_NOTIFICATION { 523 USB_NOTIFICATION_TYPE NotificationType; 524 ULONG ConnectionNumber; 525 ULONG RequestedBandwidth; 526 ULONG EnumerationFailReason; 527 ULONG PowerRequested; 528 ULONG HubNameLength; 529} USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION; 530 531typedef struct _USB_BUS_NOTIFICATION { 532 USB_NOTIFICATION_TYPE NotificationType; 533 ULONG TotalBandwidth; 534 ULONG ConsumedBandwidth; 535 ULONG ControllerNameLength; 536} USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION; 537 538typedef struct _USB_ACQUIRE_INFO { 539 USB_NOTIFICATION_TYPE NotificationType; 540 ULONG TotalSize; 541 WCHAR Buffer[1]; 542} USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO; 543 544#if (_WIN32_WINNT >= 0x0600) 545 546#define USB_NODE_INFO_SIG 'USBN' 547 548typedef enum _USB_WMI_DEVICE_NODE_TYPE { 549 UsbDevice, 550 HubDevice, 551 CompositeDevice, 552 UsbController 553} USB_WMI_DEVICE_NODE_TYPE, *PUSB_WMI_DEVICE_NODE_TYPE; 554 555typedef struct _USB_DEVICE_STATE { 556 ULONG DeviceConnected:1; 557 ULONG DeviceStarted:1; 558} USB_DEVICE_STATE, *PUSB_DEVICE_STATE; 559 560typedef struct _USB_HUB_PORT_INFORMATION { 561 USB_DEVICE_STATE DeviceState; 562 USHORT PortNumber; 563 USHORT DeviceAddress; 564 ULONG ConnectionIndex; 565 USB_CONNECTION_STATUS ConnectionStatus; 566} USB_HUB_PORT_INFORMATION, *PUSB_HUB_PORT_INFORMATION; 567 568typedef struct _USB_HUB_DEVICE_INFO { 569 USB_HUB_DESCRIPTOR HubDescriptor; 570 ULONG HubNumber; 571 USHORT DeviceAddress; 572 BOOLEAN HubIsSelfPowered; 573 BOOLEAN HubIsRootHub; 574 USB_HUB_CAPABILITIES HubCapabilities; 575 ULONG NumberOfHubPorts; 576 USB_HUB_PORT_INFORMATION PortInfo[1]; 577} USB_HUB_DEVICE_INFO, *PUSB_HUB_DEVICE_INFO; 578 579typedef struct _USB_COMPOSITE_FUNCTION_INFO { 580 UCHAR FunctionNumber; 581 UCHAR BaseInterfaceNumber; 582 UCHAR NumberOfInterfaces; 583 BOOLEAN FunctionIsIdle; 584} USB_COMPOSITE_FUNCTION_INFO, *PUSB_COMPOSITE_FUNCTION_INFO; 585 586typedef struct _USB_COMPOSITE_DEVICE_INFO { 587 USB_DEVICE_DESCRIPTOR DeviceDescriptor; 588 USB_CONFIGURATION_DESCRIPTOR CurrentConfigDescriptor; 589 UCHAR CurrentConfigurationValue; 590 UCHAR NumberOfFunctions; 591 USB_COMPOSITE_FUNCTION_INFO FunctionInfo[1]; 592} USB_COMPOSITE_DEVICE_INFO, *PUSB_COMPOSITE_DEVICE_INFO; 593 594typedef struct _USB_CONTROLLER_DEVICE_INFO { 595 ULONG PciVendorId; 596 ULONG PciDeviceId; 597 ULONG PciRevision; 598 ULONG NumberOfRootPorts; 599 ULONG HcFeatureFlags; 600} USB_CONTROLLER_DEVICE_INFO, *PUSB_CONTROLLER_DEVICE_INFO; 601 602typedef struct _USB_DEVICE_INFO { 603 USB_DEVICE_STATE DeviceState; 604 USHORT PortNumber; 605 USB_DEVICE_DESCRIPTOR DeviceDescriptor; 606 UCHAR CurrentConfigurationValue; 607 USB_DEVICE_SPEED Speed; 608 USHORT DeviceAddress; 609 ULONG ConnectionIndex; 610 USB_CONNECTION_STATUS ConnectionStatus; 611 WCHAR PnpHardwareId[128]; 612 WCHAR PnpCompatibleId[128]; 613 WCHAR SerialNumberId[128]; 614 WCHAR PnpDeviceDescription[128]; 615 ULONG NumberOfOpenPipes; 616 USB_PIPE_INFO PipeList[1]; 617} USB_DEVICE_INFO, *PUSB_DEVICE_INFO; 618 619typedef struct _USB_DEVICE_NODE_INFO { 620 ULONG Sig; 621 ULONG LengthInBytes; 622 WCHAR DeviceDescription[40]; 623 USB_WMI_DEVICE_NODE_TYPE NodeType; 624 USB_TOPOLOGY_ADDRESS BusAddress; 625 __C89_NAMELESS union { 626 USB_DEVICE_INFO UsbDeviceInfo; 627 USB_HUB_DEVICE_INFO HubDeviceInfo; 628 USB_COMPOSITE_DEVICE_INFO CompositeDeviceInfo; 629 USB_CONTROLLER_DEVICE_INFO ControllerDeviceInfo; 630 UCHAR DeviceInformation[4]; 631 }; 632} USB_DEVICE_NODE_INFO, *PUSB_DEVICE_NODE_INFO; 633 634typedef struct _USB_DEVICE_PERFORMANCE_INFO { 635 ULONG BulkBytes; 636 ULONG ControlDataBytes; 637 ULONG IsoBytes; 638 ULONG InterruptBytes; 639 ULONG BulkUrbCount; 640 ULONG ControlUrbCount; 641 ULONG IsoUrbCount; 642 ULONG InterruptUrbCount; 643 ULONG AllocedInterrupt[6]; 644 ULONG AllocedIso; 645 ULONG Total32secBandwidth; 646 ULONG TotalTtBandwidth; 647 WCHAR DeviceDescription[60]; 648 USB_DEVICE_SPEED DeviceSpeed; 649 ULONG TotalIsoLatency; 650 ULONG DroppedIsoPackets; 651 ULONG TransferErrors; 652 ULONG PciInterruptCount; 653 ULONG HcIdleState; 654 ULONG HcAsyncIdleState; 655 ULONG HcAsyncCacheFlushCount; 656 ULONG HcPeriodicIdleState; 657 ULONG HcPeriodicCacheFlushCount; 658} USB_DEVICE_PERFORMANCE_INFO, *PUSB_DEVICE_PERFORMANCE_INFO; 659 660#endif /* _WIN32_WINNT >= 0x0600 */ 661 662#include <poppack.h> 663 664#endif /* USB_KERNEL_IOCTL */ 665 666