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