usbioctl.h 20 KB

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