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