|  | /** | 
|  | * usbioctl.h | 
|  | * | 
|  | * USB IOCTL interface.#ifndef __USBIOCTL_H__ | 
|  | * | 
|  | * This file is part of the mingw-w64 runtime package. | 
|  | * No warranty is given; refer to the file DISCLAIMER within this package. | 
|  | * | 
|  | * This file is based on the ReactOS PSDK file usbdi.h header. | 
|  | * Original contributed by Casper S. Hornstrup <chorns@users.sourceforge.net> | 
|  | * | 
|  | * Added winapi-family check, Windows 8 additions by Kai Tietz. | 
|  | */ | 
|  |  | 
|  | #ifndef __USBIOCTL_H__ | 
|  | #define __USBIOCTL_H__ | 
|  |  | 
|  | #include <minwindef.h> | 
|  | #include <winapifamily.h> | 
|  |  | 
|  | #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) | 
|  |  | 
|  | #ifndef FAR | 
|  | #define FAR | 
|  | #endif | 
|  |  | 
|  | #include "usb200.h" | 
|  | #include "usbiodef.h" | 
|  |  | 
|  | #define IOCTL_INTERNAL_USB_SUBMIT_URB CTL_CODE (FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_RESET_PORT CTL_CODE (FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO CTL_CODE (FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  |  | 
|  | #define USBD_PORT_ENABLED 0x00000001 | 
|  | #define USBD_PORT_CONNECTED 0x00000002 | 
|  |  | 
|  | #define IOCTL_INTERNAL_USB_GET_PORT_STATUS CTL_CODE (FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_ENABLE_PORT CTL_CODE (FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_HUB_COUNT CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_CYCLE_PORT CTL_CODE (FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_HUB_NAME CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_BUS_INFO CTL_CODE (FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME CTL_CODE (FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO CTL_CODE (FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO CTL_CODE (FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION CTL_CODE (FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE CTL_CODE (FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  |  | 
|  | #if _WIN32_WINNT >= 0x0600 | 
|  | #define IOCTL_INTERNAL_USB_NOTIFY_IDLE_READY CTL_CODE (FILE_DEVICE_USB, USB_IDLE_NOTIFICATION_EX, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_REQ_GLOBAL_SUSPEND CTL_CODE (FILE_DEVICE_USB, USB_REQ_GLOBAL_SUSPEND, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_REQ_GLOBAL_RESUME CTL_CODE (FILE_DEVICE_USB, USB_REQ_GLOBAL_RESUME, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  |  | 
|  | #ifdef USB20_API | 
|  | typedef struct _USB_START_FAILDATA { | 
|  | ULONG LengthInBytes; | 
|  | NTSTATUS NtStatus; | 
|  | USBD_STATUS UsbdStatus; | 
|  | ULONG ConnectStatus; | 
|  | UCHAR DriverData[4]; | 
|  | } USB_START_FAILDATA,*PUSB_START_FAILDATA; | 
|  | #endif | 
|  |  | 
|  | #define IOCTL_INTERNAL_USB_RECORD_FAILURE CTL_CODE (FILE_DEVICE_USB, USB_RECORD_FAILURE, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE_EX CTL_CODE (FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE_EX, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_TT_DEVICE_HANDLE CTL_CODE (FILE_DEVICE_USB, USB_GET_TT_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  |  | 
|  | typedef struct _USB_TOPOLOGY_ADDRESS { | 
|  | ULONG PciBusNumber; | 
|  | ULONG PciDeviceNumber; | 
|  | ULONG PciFunctionNumber; | 
|  | ULONG Reserved; | 
|  | USHORT RootHubPortNumber; | 
|  | USHORT HubPortNumber[5]; | 
|  | USHORT Reserved2; | 
|  | } USB_TOPOLOGY_ADDRESS,*PUSB_TOPOLOGY_ADDRESS; | 
|  |  | 
|  | #define IOCTL_INTERNAL_USB_GET_TOPOLOGY_ADDRESS CTL_CODE (FILE_DEVICE_USB, USB_GET_TOPOLOGY_ADDRESS, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_GET_DEVICE_CONFIG_INFO CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_CONFIG_INFO, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #endif | 
|  | #if NTDDI_VERSION >= 0x06020000 | 
|  | #define IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE CTL_CODE (FILE_DEVICE_USBEX, USB_REGISTER_COMPOSITE_DEVICE, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE CTL_CODE (FILE_DEVICE_USBEX, USB_UNREGISTER_COMPOSITE_DEVICE, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #define IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION CTL_CODE (FILE_DEVICE_USBEX, USB_REQUEST_REMOTE_WAKE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS) | 
|  | #endif | 
|  |  | 
|  | #ifndef USB_KERNEL_IOCTL | 
|  | #define IOCTL_USB_HCD_GET_STATS_1 CTL_CODE (FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_HCD_GET_STATS_2 CTL_CODE (FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_HCD_DISABLE_PORT CTL_CODE (FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_HCD_ENABLE_PORT CTL_CODE (FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON | 
|  | #define IOCTL_USB_DIAGNOSTIC_MODE_ON CTL_CODE (FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #endif | 
|  | #ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF | 
|  | #define IOCTL_USB_DIAGNOSTIC_MODE_OFF CTL_CODE (FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #endif | 
|  | #ifndef IOCTL_USB_GET_ROOT_HUB_NAME | 
|  | #define IOCTL_USB_GET_ROOT_HUB_NAME CTL_CODE (FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #endif | 
|  | #ifndef IOCTL_GET_HCD_DRIVERKEY_NAME | 
|  | #define IOCTL_GET_HCD_DRIVERKEY_NAME CTL_CODE (FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #endif | 
|  | #define IOCTL_USB_GET_NODE_INFORMATION CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION CTL_CODE (FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_GET_NODE_CONNECTION_NAME CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_DIAG_IGNORE_HUBS_ON CTL_CODE (FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF CTL_CODE (FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_GET_HUB_CAPABILITIES CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_HUB_CYCLE_PORT CTL_CODE (FILE_DEVICE_USB, USB_HUB_CYCLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #if _WIN32_WINNT >= 0x0600 | 
|  | #define IOCTL_USB_RESET_HUB CTL_CODE (FILE_DEVICE_USB, USB_RESET_HUB, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_GET_HUB_CAPABILITIES_EX CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #endif | 
|  | #if NTDDI_VERSION >= 0x06020000 | 
|  | #define IOCTL_USB_GET_HUB_INFORMATION_EX CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #define IOCTL_USB_GET_PORT_CONNECTOR_PROPERTIES CTL_CODE (FILE_DEVICE_USB, USB_GET_PORT_CONNECTOR_PROPERTIES, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
|  | #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) | 
|  | #endif | 
|  |  | 
|  | #include <pshpack1.h> | 
|  |  | 
|  | typedef enum _USB_HUB_NODE { | 
|  | UsbHub, | 
|  | UsbMIParent | 
|  | } USB_HUB_NODE; | 
|  |  | 
|  | typedef struct _USB_HUB_INFORMATION { | 
|  | USB_HUB_DESCRIPTOR HubDescriptor; | 
|  | BOOLEAN HubIsBusPowered; | 
|  | } USB_HUB_INFORMATION,*PUSB_HUB_INFORMATION; | 
|  |  | 
|  | typedef struct _USB_MI_PARENT_INFORMATION { | 
|  | ULONG NumberOfInterfaces; | 
|  | } USB_MI_PARENT_INFORMATION,*PUSB_MI_PARENT_INFORMATION; | 
|  |  | 
|  | typedef struct _USB_NODE_INFORMATION { | 
|  | USB_HUB_NODE NodeType; | 
|  | union { | 
|  | USB_HUB_INFORMATION HubInformation; | 
|  | USB_MI_PARENT_INFORMATION MiParentInformation; | 
|  | } u; | 
|  | } USB_NODE_INFORMATION,*PUSB_NODE_INFORMATION; | 
|  |  | 
|  | typedef struct _USB_PIPE_INFO { | 
|  | USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; | 
|  | ULONG ScheduleOffset; | 
|  | } USB_PIPE_INFO,*PUSB_PIPE_INFO; | 
|  |  | 
|  | #if _WIN32_WINNT >= 0x0600 | 
|  | typedef enum _USB_CONNECTION_STATUS { | 
|  | NoDeviceConnected, | 
|  | DeviceConnected, | 
|  | DeviceFailedEnumeration, | 
|  | DeviceGeneralFailure, | 
|  | DeviceCausedOvercurrent, | 
|  | DeviceNotEnoughPower, | 
|  | DeviceNotEnoughBandwidth, | 
|  | DeviceHubNestedTooDeeply, | 
|  | DeviceInLegacyHub, | 
|  | DeviceEnumerating, | 
|  | DeviceReset | 
|  | } USB_CONNECTION_STATUS,*PUSB_CONNECTION_STATUS; | 
|  | #else | 
|  | typedef enum _USB_CONNECTION_STATUS { | 
|  | NoDeviceConnected, | 
|  | DeviceConnected, | 
|  |  | 
|  | DeviceFailedEnumeration, | 
|  | DeviceGeneralFailure, | 
|  | DeviceCausedOvercurrent, | 
|  | DeviceNotEnoughPower, | 
|  | DeviceNotEnoughBandwidth, | 
|  | DeviceHubNestedTooDeeply, | 
|  | DeviceInLegacyHub | 
|  | } USB_CONNECTION_STATUS,*PUSB_CONNECTION_STATUS; | 
|  | #endif | 
|  |  | 
|  | typedef struct _USB_NODE_CONNECTION_INFORMATION { | 
|  | ULONG ConnectionIndex; | 
|  | USB_DEVICE_DESCRIPTOR DeviceDescriptor; | 
|  | UCHAR CurrentConfigurationValue; | 
|  | BOOLEAN LowSpeed; | 
|  | BOOLEAN DeviceIsHub; | 
|  | USHORT DeviceAddress; | 
|  | ULONG NumberOfOpenPipes; | 
|  | USB_CONNECTION_STATUS ConnectionStatus; | 
|  | USB_PIPE_INFO PipeList[0]; | 
|  | } USB_NODE_CONNECTION_INFORMATION,*PUSB_NODE_CONNECTION_INFORMATION; | 
|  |  | 
|  | typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME { | 
|  | ULONG ConnectionIndex; | 
|  | ULONG ActualLength; | 
|  | WCHAR DriverKeyName[1]; | 
|  | } USB_NODE_CONNECTION_DRIVERKEY_NAME,*PUSB_NODE_CONNECTION_DRIVERKEY_NAME; | 
|  |  | 
|  | typedef struct _USB_NODE_CONNECTION_NAME { | 
|  | ULONG ConnectionIndex; | 
|  | ULONG ActualLength; | 
|  | WCHAR NodeName[1]; | 
|  | } USB_NODE_CONNECTION_NAME,*PUSB_NODE_CONNECTION_NAME; | 
|  |  | 
|  | typedef struct _USB_HUB_NAME { | 
|  | ULONG ActualLength; | 
|  | WCHAR HubName[1]; | 
|  | } USB_HUB_NAME,*PUSB_HUB_NAME; | 
|  |  | 
|  | typedef struct _USB_ROOT_HUB_NAME { | 
|  | ULONG ActualLength; | 
|  | WCHAR RootHubName[1]; | 
|  | } USB_ROOT_HUB_NAME,*PUSB_ROOT_HUB_NAME; | 
|  |  | 
|  | typedef struct _USB_HCD_DRIVERKEY_NAME { | 
|  | ULONG ActualLength; | 
|  | WCHAR DriverKeyName[1]; | 
|  | } USB_HCD_DRIVERKEY_NAME,*PUSB_HCD_DRIVERKEY_NAME; | 
|  |  | 
|  | typedef struct _USB_DESCRIPTOR_REQUEST { | 
|  | ULONG ConnectionIndex; | 
|  | struct { | 
|  | UCHAR bmRequest; | 
|  | UCHAR bRequest; | 
|  | USHORT wValue; | 
|  | USHORT wIndex; | 
|  | USHORT wLength; | 
|  | } SetupPacket; | 
|  | UCHAR Data[0]; | 
|  | } USB_DESCRIPTOR_REQUEST,*PUSB_DESCRIPTOR_REQUEST; | 
|  |  | 
|  | typedef struct _USB_HUB_CAPABILITIES { | 
|  | ULONG HubIs2xCapable:1; | 
|  | } USB_HUB_CAPABILITIES,*PUSB_HUB_CAPABILITIES; | 
|  |  | 
|  | typedef struct _USB_NODE_CONNECTION_ATTRIBUTES { | 
|  | ULONG ConnectionIndex; | 
|  | USB_CONNECTION_STATUS ConnectionStatus; | 
|  | ULONG PortAttributes; | 
|  | } USB_NODE_CONNECTION_ATTRIBUTES,*PUSB_NODE_CONNECTION_ATTRIBUTES; | 
|  |  | 
|  | typedef struct _USB_NODE_CONNECTION_INFORMATION_EX { | 
|  | ULONG ConnectionIndex; | 
|  | USB_DEVICE_DESCRIPTOR DeviceDescriptor; | 
|  | UCHAR CurrentConfigurationValue; | 
|  | UCHAR Speed; | 
|  | BOOLEAN DeviceIsHub; | 
|  | USHORT DeviceAddress; | 
|  | ULONG NumberOfOpenPipes; | 
|  | USB_CONNECTION_STATUS ConnectionStatus; | 
|  | USB_PIPE_INFO PipeList[0]; | 
|  | } USB_NODE_CONNECTION_INFORMATION_EX,*PUSB_NODE_CONNECTION_INFORMATION_EX; | 
|  |  | 
|  | #if _WIN32_WINNT >= 0x0600 | 
|  | typedef union _USB_HUB_CAP_FLAGS { | 
|  | ULONG ul; | 
|  | __C89_NAMELESS struct { | 
|  | ULONG HubIsHighSpeedCapable:1; | 
|  | ULONG HubIsHighSpeed:1; | 
|  | ULONG HubIsMultiTtCapable:1; | 
|  | ULONG HubIsMultiTt:1; | 
|  | ULONG HubIsRoot:1; | 
|  | ULONG HubIsArmedWakeOnConnect:1; | 
|  | ULONG HubIsBusPowered:1; | 
|  | ULONG ReservedMBZ:25; | 
|  | }; | 
|  | } USB_HUB_CAP_FLAGS,*PUSB_HUB_CAP_FLAGS; | 
|  |  | 
|  | typedef struct _USB_HUB_CAPABILITIES_EX { | 
|  | USB_HUB_CAP_FLAGS CapabilityFlags; | 
|  | } USB_HUB_CAPABILITIES_EX,*PUSB_HUB_CAPABILITIES_EX; | 
|  |  | 
|  | typedef struct _USB_CYCLE_PORT_PARAMS { | 
|  | ULONG ConnectionIndex; | 
|  | ULONG StatusReturned; | 
|  | } USB_CYCLE_PORT_PARAMS,*PUSB_CYCLE_PORT_PARAMS; | 
|  |  | 
|  | typedef struct _USB_ID_STRING { | 
|  | USHORT LanguageId; | 
|  | USHORT Pad; | 
|  | ULONG LengthInBytes; | 
|  | PWCHAR Buffer; | 
|  | } USB_ID_STRING,*PUSB_ID_STRING; | 
|  |  | 
|  | typedef struct _USB_HUB_DEVICE_UXD_SETTINGS { | 
|  | ULONG Version; | 
|  | GUID PnpGuid; | 
|  | GUID OwnerGuid; | 
|  | ULONG DeleteOnShutdown; | 
|  | ULONG DeleteOnReload; | 
|  | ULONG DeleteOnDisconnect; | 
|  | ULONG Reserved[5]; | 
|  | } USB_HUB_DEVICE_UXD_SETTINGS,*PUSB_HUB_DEVICE_UXD_SETTINGS; | 
|  |  | 
|  | typedef struct _HUB_DEVICE_CONFIG_INFO_V1 { | 
|  | ULONG Version; | 
|  | ULONG Length; | 
|  | USB_HUB_CAP_FLAGS HubFlags; | 
|  | USB_ID_STRING HardwareIds; | 
|  | USB_ID_STRING CompatibleIds; | 
|  | USB_ID_STRING DeviceDescription; | 
|  | ULONG Reserved[19]; | 
|  | USB_HUB_DEVICE_UXD_SETTINGS UxdSettings; | 
|  | } HUB_DEVICE_CONFIG_INFO,*PHUB_DEVICE_CONFIG_INFO; | 
|  | #endif | 
|  |  | 
|  | typedef struct _HCD_STAT_COUNTERS { | 
|  | ULONG BytesTransferred; | 
|  | USHORT IsoMissedCount; | 
|  | USHORT DataOverrunErrorCount; | 
|  | USHORT CrcErrorCount; | 
|  | USHORT ScheduleOverrunCount; | 
|  | USHORT TimeoutErrorCount; | 
|  | USHORT InternalHcErrorCount; | 
|  | USHORT BufferOverrunErrorCount; | 
|  | USHORT SWErrorCount; | 
|  | USHORT StallPidCount; | 
|  | USHORT PortDisableCount; | 
|  | } HCD_STAT_COUNTERS,*PHCD_STAT_COUNTERS; | 
|  |  | 
|  | typedef struct _HCD_ISO_STAT_COUNTERS { | 
|  | USHORT LateUrbs; | 
|  | USHORT DoubleBufferedPackets; | 
|  | USHORT TransfersCF_5ms; | 
|  | USHORT TransfersCF_2ms; | 
|  | USHORT TransfersCF_1ms; | 
|  | USHORT MaxInterruptLatency; | 
|  | USHORT BadStartFrame; | 
|  | USHORT StaleUrbs; | 
|  | USHORT IsoPacketNotAccesed; | 
|  | USHORT IsoPacketHWError; | 
|  | USHORT SmallestUrbPacketCount; | 
|  | USHORT LargestUrbPacketCount; | 
|  | USHORT IsoCRC_Error; | 
|  | USHORT IsoOVERRUN_Error; | 
|  | USHORT IsoINTERNAL_Error; | 
|  | USHORT IsoUNKNOWN_Error; | 
|  | ULONG IsoBytesTransferred; | 
|  | USHORT LateMissedCount; | 
|  | USHORT HWIsoMissedCount; | 
|  | ULONG Reserved7[8]; | 
|  | } HCD_ISO_STAT_COUNTERS,*PHCD_ISO_STAT_COUNTERS; | 
|  |  | 
|  | typedef struct _HCD_STAT_INFORMATION_1 { | 
|  | ULONG Reserved1; | 
|  | ULONG Reserved2; | 
|  | ULONG ResetCounters; | 
|  | LARGE_INTEGER TimeRead; | 
|  | HCD_STAT_COUNTERS Counters; | 
|  | } HCD_STAT_INFORMATION_1,*PHCD_STAT_INFORMATION_1; | 
|  |  | 
|  | typedef struct _HCD_STAT_INFORMATION_2 { | 
|  | ULONG Reserved1; | 
|  | ULONG Reserved2; | 
|  | ULONG ResetCounters; | 
|  | LARGE_INTEGER TimeRead; | 
|  | LONG LockedMemoryUsed; | 
|  | HCD_STAT_COUNTERS Counters; | 
|  | HCD_ISO_STAT_COUNTERS IsoCounters; | 
|  | } HCD_STAT_INFORMATION_2,*PHCD_STAT_INFORMATION_2; | 
|  |  | 
|  | #define WMI_USB_DRIVER_INFORMATION 0 | 
|  | #define WMI_USB_DRIVER_NOTIFICATION 1 | 
|  | #define WMI_USB_POWER_DEVICE_ENABLE 2 | 
|  | #define WMI_USB_HUB_NODE_INFORMATION 4 | 
|  |  | 
|  | #define WMI_USB_PERFORMANCE_INFORMATION 1 | 
|  | #define WMI_USB_DEVICE_NODE_INFORMATION 2 | 
|  |  | 
|  | typedef enum _USB_NOTIFICATION_TYPE { | 
|  | EnumerationFailure = 0, | 
|  | InsufficentBandwidth, | 
|  | InsufficentPower, | 
|  | OverCurrent, | 
|  | ResetOvercurrent, | 
|  | AcquireBusInfo, | 
|  | AcquireHubName, | 
|  | AcquireControllerName, | 
|  | HubOvercurrent, | 
|  | HubPowerChange, | 
|  | HubNestedTooDeeply, | 
|  | ModernDeviceInLegacyHub | 
|  | } USB_NOTIFICATION_TYPE; | 
|  |  | 
|  | typedef struct _USB_NOTIFICATION { | 
|  | USB_NOTIFICATION_TYPE NotificationType; | 
|  | } USB_NOTIFICATION,*PUSB_NOTIFICATION; | 
|  |  | 
|  | typedef struct _USB_CONNECTION_NOTIFICATION { | 
|  | USB_NOTIFICATION_TYPE NotificationType; | 
|  | ULONG ConnectionNumber; | 
|  | ULONG RequestedBandwidth; | 
|  | ULONG EnumerationFailReason; | 
|  | ULONG PowerRequested; | 
|  | ULONG HubNameLength; | 
|  | } USB_CONNECTION_NOTIFICATION,*PUSB_CONNECTION_NOTIFICATION; | 
|  |  | 
|  | typedef struct _USB_BUS_NOTIFICATION { | 
|  | USB_NOTIFICATION_TYPE NotificationType; | 
|  | ULONG TotalBandwidth; | 
|  | ULONG ConsumedBandwidth; | 
|  | ULONG ControllerNameLength; | 
|  | } USB_BUS_NOTIFICATION,*PUSB_BUS_NOTIFICATION; | 
|  |  | 
|  | typedef struct _USB_ACQUIRE_INFO { | 
|  | USB_NOTIFICATION_TYPE NotificationType; | 
|  | ULONG TotalSize; | 
|  | WCHAR Buffer[1]; | 
|  | } USB_ACQUIRE_INFO,*PUSB_ACQUIRE_INFO; | 
|  |  | 
|  | #if _WIN32_WINNT >= 0x0600 | 
|  | #define USB_NODE_INFO_SIG 'USBN' | 
|  |  | 
|  | typedef enum _USB_WMI_DEVICE_NODE_TYPE { | 
|  | UsbDevice, | 
|  | HubDevice, | 
|  | CompositeDevice, | 
|  | UsbController | 
|  | } USB_WMI_DEVICE_NODE_TYPE,*PUSB_WMI_DEVICE_NODE_TYPE; | 
|  |  | 
|  | typedef struct _USB_DEVICE_STATE { | 
|  | ULONG DeviceConnected:1; | 
|  | ULONG DeviceStarted:1; | 
|  | } USB_DEVICE_STATE,*PUSB_DEVICE_STATE; | 
|  |  | 
|  | typedef struct _USB_HUB_PORT_INFORMATION { | 
|  | USB_DEVICE_STATE DeviceState; | 
|  | USHORT PortNumber; | 
|  | USHORT DeviceAddress; | 
|  | ULONG ConnectionIndex; | 
|  | USB_CONNECTION_STATUS ConnectionStatus; | 
|  | } USB_HUB_PORT_INFORMATION,*PUSB_HUB_PORT_INFORMATION; | 
|  |  | 
|  | typedef struct _USB_HUB_DEVICE_INFO { | 
|  | USB_HUB_DESCRIPTOR HubDescriptor; | 
|  | ULONG HubNumber; | 
|  | USHORT DeviceAddress; | 
|  | BOOLEAN HubIsSelfPowered; | 
|  | BOOLEAN HubIsRootHub; | 
|  | USB_HUB_CAPABILITIES HubCapabilities; | 
|  | ULONG NumberOfHubPorts; | 
|  | USB_HUB_PORT_INFORMATION PortInfo[1]; | 
|  | } USB_HUB_DEVICE_INFO,*PUSB_HUB_DEVICE_INFO; | 
|  |  | 
|  | typedef struct _USB_COMPOSITE_FUNCTION_INFO { | 
|  | UCHAR FunctionNumber; | 
|  | UCHAR BaseInterfaceNumber; | 
|  | UCHAR NumberOfInterfaces; | 
|  | BOOLEAN FunctionIsIdle; | 
|  | } USB_COMPOSITE_FUNCTION_INFO,*PUSB_COMPOSITE_FUNCTION_INFO; | 
|  |  | 
|  | typedef struct _USB_COMPOSITE_DEVICE_INFO { | 
|  | USB_DEVICE_DESCRIPTOR DeviceDescriptor; | 
|  | USB_CONFIGURATION_DESCRIPTOR CurrentConfigDescriptor; | 
|  | UCHAR CurrentConfigurationValue; | 
|  | UCHAR NumberOfFunctions; | 
|  | USB_COMPOSITE_FUNCTION_INFO FunctionInfo[1]; | 
|  | } USB_COMPOSITE_DEVICE_INFO,*PUSB_COMPOSITE_DEVICE_INFO; | 
|  |  | 
|  | typedef struct _USB_CONTROLLER_DEVICE_INFO { | 
|  | ULONG PciVendorId; | 
|  | ULONG PciDeviceId; | 
|  | ULONG PciRevision; | 
|  | ULONG NumberOfRootPorts; | 
|  | ULONG HcFeatureFlags; | 
|  | } USB_CONTROLLER_DEVICE_INFO,*PUSB_CONTROLLER_DEVICE_INFO; | 
|  |  | 
|  | typedef struct _USB_DEVICE_INFO { | 
|  | USB_DEVICE_STATE DeviceState; | 
|  | USHORT PortNumber; | 
|  | USB_DEVICE_DESCRIPTOR DeviceDescriptor; | 
|  | UCHAR CurrentConfigurationValue; | 
|  | USB_DEVICE_SPEED Speed; | 
|  | USHORT DeviceAddress; | 
|  | ULONG ConnectionIndex; | 
|  | USB_CONNECTION_STATUS ConnectionStatus; | 
|  | WCHAR PnpHardwareId[128]; | 
|  | WCHAR PnpCompatibleId[128]; | 
|  | WCHAR SerialNumberId[128]; | 
|  | WCHAR PnpDeviceDescription[128]; | 
|  | ULONG NumberOfOpenPipes; | 
|  | USB_PIPE_INFO PipeList[1]; | 
|  | } USB_DEVICE_INFO,*PUSB_DEVICE_INFO; | 
|  |  | 
|  | typedef struct _USB_DEVICE_NODE_INFO { | 
|  | ULONG Sig; | 
|  | ULONG LengthInBytes; | 
|  | WCHAR DeviceDescription[40]; | 
|  | USB_WMI_DEVICE_NODE_TYPE NodeType; | 
|  | USB_TOPOLOGY_ADDRESS BusAddress; | 
|  | __C89_NAMELESS union { | 
|  | USB_DEVICE_INFO UsbDeviceInfo; | 
|  | USB_HUB_DEVICE_INFO HubDeviceInfo; | 
|  | USB_COMPOSITE_DEVICE_INFO CompositeDeviceInfo; | 
|  | USB_CONTROLLER_DEVICE_INFO ControllerDeviceInfo; | 
|  | UCHAR DeviceInformation[4]; | 
|  | }; | 
|  | } USB_DEVICE_NODE_INFO,*PUSB_DEVICE_NODE_INFO; | 
|  |  | 
|  | typedef struct _USB_DEVICE_PERFORMANCE_INFO { | 
|  | ULONG BulkBytes; | 
|  | ULONG ControlDataBytes; | 
|  | ULONG IsoBytes; | 
|  | ULONG InterruptBytes; | 
|  | ULONG BulkUrbCount; | 
|  | ULONG ControlUrbCount; | 
|  | ULONG IsoUrbCount; | 
|  | ULONG InterruptUrbCount; | 
|  | ULONG AllocedInterrupt[6]; | 
|  | ULONG AllocedIso; | 
|  | ULONG Total32secBandwidth; | 
|  | ULONG TotalTtBandwidth; | 
|  | WCHAR DeviceDescription[60]; | 
|  | USB_DEVICE_SPEED DeviceSpeed; | 
|  | ULONG TotalIsoLatency; | 
|  | ULONG DroppedIsoPackets; | 
|  | ULONG TransferErrors; | 
|  | ULONG PciInterruptCount; | 
|  | ULONG HcIdleState; | 
|  | ULONG HcAsyncIdleState; | 
|  | ULONG HcAsyncCacheFlushCount; | 
|  | ULONG HcPeriodicIdleState; | 
|  | ULONG HcPeriodicCacheFlushCount; | 
|  | } USB_DEVICE_PERFORMANCE_INFO,*PUSB_DEVICE_PERFORMANCE_INFO; | 
|  | #endif | 
|  |  | 
|  | #if NTDDI_VERSION >= 0x06020000 | 
|  | typedef enum _USB_HUB_TYPE { | 
|  | UsbRootHub = 1, | 
|  | Usb20Hub = 2, | 
|  | Usb30Hub = 3 | 
|  | } USB_HUB_TYPE; | 
|  |  | 
|  | typedef struct _USB_HUB_INFORMATION_EX { | 
|  | USB_HUB_TYPE HubType; | 
|  | USHORT HighestPortNumber; | 
|  | union { | 
|  | USB_HUB_DESCRIPTOR UsbHubDescriptor; | 
|  | USB_30_HUB_DESCRIPTOR Usb30HubDescriptor; | 
|  | } u; | 
|  | } USB_HUB_INFORMATION_EX,*PUSB_HUB_INFORMATION_EX; | 
|  |  | 
|  | typedef union _USB_PORT_PROPERTIES { | 
|  | ULONG ul; | 
|  | __C89_NAMELESS struct { | 
|  | ULONG PortIsUserConnectable :1; | 
|  | ULONG PortIsDebugCapable :1; | 
|  | ULONG ReservedMBZ :30; | 
|  | }; | 
|  | } USB_PORT_PROPERTIES,*PUSB_PORT_PROPERTIES; | 
|  |  | 
|  | typedef struct _USB_PORT_CONNECTOR_PROPERTIES { | 
|  | ULONG ConnectionIndex; | 
|  | ULONG ActualLength; | 
|  | USB_PORT_PROPERTIES UsbPortProperties; | 
|  | USHORT CompanionIndex; | 
|  | USHORT CompanionPortNumber; | 
|  | WCHAR CompanionHubSymbolicLinkName[1]; | 
|  | } USB_PORT_CONNECTOR_PROPERTIES,*PUSB_PORT_CONNECTOR_PROPERTIES; | 
|  |  | 
|  | typedef union _USB_PROTOCOLS { | 
|  | ULONG ul; | 
|  | __C89_NAMELESS struct { | 
|  | ULONG Usb110 :1; | 
|  | ULONG Usb200 :1; | 
|  | ULONG Usb300 :1; | 
|  | ULONG ReservedMBZ :29; | 
|  | }; | 
|  | } USB_PROTOCOLS,*PUSB_PROTOCOLS; | 
|  |  | 
|  | typedef union _USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS { | 
|  | ULONG ul; | 
|  | __C89_NAMELESS struct { | 
|  | ULONG DeviceIsOperatingAtSuperSpeedOrHigher :1; | 
|  | ULONG DeviceIsSuperSpeedCapableOrHigher :1; | 
|  | ULONG DeviceIsOperatingAtSuperSpeedPlusOrHigher :1; | 
|  | ULONG DeviceIsSuperSpeedPlusCapableOrHigher :1; | 
|  | ULONG ReservedMBZ :28; | 
|  | }; | 
|  | } USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS,*PUSB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS; | 
|  |  | 
|  | typedef struct _USB_NODE_CONNECTION_INFORMATION_EX_V2 { | 
|  | ULONG ConnectionIndex; | 
|  | ULONG Length; | 
|  | USB_PROTOCOLS SupportedUsbProtocols; | 
|  | USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS Flags; | 
|  | } USB_NODE_CONNECTION_INFORMATION_EX_V2,*PUSB_NODE_CONNECTION_INFORMATION_EX_V2; | 
|  | #endif | 
|  |  | 
|  | #include <poppack.h> | 
|  |  | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  | #endif |