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 (at) 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 89 typedef 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 107 typedef 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 214 typedef enum _USB_HUB_NODE { 215 UsbHub, 216 UsbMIParent 217 } USB_HUB_NODE; 218 219 typedef struct _USB_HUB_INFORMATION { 220 USB_HUB_DESCRIPTOR HubDescriptor; 221 BOOLEAN HubIsBusPowered; 222 } USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION; 223 224 typedef struct _USB_MI_PARENT_INFORMATION { 225 ULONG NumberOfInterfaces; 226 } USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION; 227 228 typedef 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 236 typedef 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 243 typedef 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 259 typedef 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 273 typedef 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 285 typedef 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 297 typedef 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 303 typedef 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 309 typedef struct _USB_HUB_NAME { 310 ULONG ActualLength; 311 WCHAR HubName[1]; 312 } USB_HUB_NAME, *PUSB_HUB_NAME; 313 314 typedef struct _USB_ROOT_HUB_NAME { 315 ULONG ActualLength; 316 WCHAR RootHubName[1]; 317 } USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME; 318 319 typedef struct _USB_HCD_DRIVERKEY_NAME { 320 ULONG ActualLength; 321 WCHAR DriverKeyName[1]; 322 } USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME; 323 324 typedef 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 338 typedef struct _USB_HUB_CAPABILITIES { 339 ULONG HubIs2xCapable:1; 340 } USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES; 341 342 typedef 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 348 typedef 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 360 C_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 366 typedef 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 380 C_ASSERT(sizeof(USB_HUB_CAP_FLAGS) == sizeof(ULONG)); 381 382 typedef struct _USB_HUB_CAPABILITIES_EX { 383 USB_HUB_CAP_FLAGS CapabilityFlags; 384 } USB_HUB_CAPABILITIES_EX, *PUSB_HUB_CAPABILITIES_EX; 385 386 typedef struct _USB_CYCLE_PORT_PARAMS { 387 ULONG ConnectionIndex; 388 ULONG StatusReturned; 389 } USB_CYCLE_PORT_PARAMS, *PUSB_CYCLE_PORT_PARAMS; 390 391 typedef struct _USB_ID_STRING { 392 USHORT LanguageId; 393 USHORT Pad; 394 ULONG LengthInBytes; 395 PWCHAR Buffer; 396 } USB_ID_STRING, *PUSB_ID_STRING; 397 398 typedef 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 408 typedef 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 421 typedef 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 444 typedef 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 458 typedef 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 466 typedef 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 486 typedef 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 503 typedef 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 518 typedef struct _USB_NOTIFICATION { 519 USB_NOTIFICATION_TYPE NotificationType; 520 } USB_NOTIFICATION, *PUSB_NOTIFICATION; 521 522 typedef 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 531 typedef 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 538 typedef 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 548 typedef 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 555 typedef struct _USB_DEVICE_STATE { 556 ULONG DeviceConnected:1; 557 ULONG DeviceStarted:1; 558 } USB_DEVICE_STATE, *PUSB_DEVICE_STATE; 559 560 typedef 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 568 typedef 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 579 typedef 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 586 typedef 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 594 typedef 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 602 typedef 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 619 typedef 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 634 typedef 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