| /** |
| * 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 |