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