hubbusif.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793
  1. #pragma once
  2. #define _HUBBUSIF_
  3. #include "usbdi.h"
  4. #if (NTDDI_VERSION >= NTDDI_WINXP)
  5. #if !defined(_USBBUSIF_)
  6. typedef PVOID PUSB_DEVICE_HANDLE;
  7. #endif
  8. typedef struct _ROOTHUB_PDO_EXTENSION {
  9. ULONG Signature;
  10. } ROOTHUB_PDO_EXTENSION, *PROOTHUB_PDO_EXTENSION;
  11. #define USBD_DEVHACK_SLOW_ENUMERATION 0x00000001
  12. #define USBD_DEVHACK_DISABLE_SN 0x00000002
  13. #define USBD_DEVHACK_SET_DIAG_ID 0x00000004
  14. #ifndef USB_BUSIFFN
  15. #if defined(_ARM_)
  16. #define USB_BUSIFFN
  17. #else
  18. #define USB_BUSIFFN __stdcall
  19. #endif
  20. #endif
  21. #define CD_ERR_V1 0x00000001
  22. #define ID_ERR_V1 0x00000001
  23. #define USBD_KEEP_DEVICE_DATA 0x00000001
  24. #define USBD_MARK_DEVICE_BUSY 0x00000002
  25. #define USB_IDLE_NOT_READY 0
  26. #define USB_IDLE_READY 1
  27. typedef
  28. NTSTATUS
  29. USB_BUSIFFN
  30. USB_BUSIFFN_CREATE_USB_DEVICE (
  31. IN PVOID BusContext,
  32. OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
  33. IN PUSB_DEVICE_HANDLE HubDeviceHandle,
  34. IN USHORT PortStatus,
  35. IN USHORT PortNumber);
  36. typedef USB_BUSIFFN_CREATE_USB_DEVICE *PUSB_BUSIFFN_CREATE_USB_DEVICE;
  37. typedef enum _USBPORT_CREATEDEV_ERROR {
  38. CreateDevErrNotSet = 0,
  39. CreateDevBadHubDevHandle,
  40. CreateDevFailedAllocDevHandle,
  41. CreateDevFailedOpenEndpoint,
  42. CreateDevFailedAllocDsBuff,
  43. CreateDevFailedGetDs,
  44. CreateDevTtNotFound,
  45. CreateDevBadDevHandlePtr
  46. } USBPORT_CREATEDEV_ERROR;
  47. typedef struct _USB_CD_ERROR_INFORMATION {
  48. ULONG Version;
  49. USBPORT_CREATEDEV_ERROR PathError;
  50. ULONG UlongArg1;
  51. ULONG UlongArg2;
  52. NTSTATUS NtStatus;
  53. UCHAR XtraInfo[64];
  54. } USB_CD_ERROR_INFORMATION, *PUSB_CD_ERROR_INFORMATION;
  55. typedef
  56. NTSTATUS
  57. USB_BUSIFFN
  58. USB_BUSIFFN_CREATE_USB_DEVICE_EX (
  59. IN PVOID BusContext,
  60. OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
  61. IN PUSB_DEVICE_HANDLE HsHubDeviceHandle,
  62. IN USHORT PortStatus,
  63. IN USHORT PortNumber,
  64. OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo,
  65. IN USHORT TtPortNumber);
  66. typedef USB_BUSIFFN_CREATE_USB_DEVICE_EX *PUSB_BUSIFFN_CREATE_USB_DEVICE_EX;
  67. typedef struct _USB_PORT_PATH {
  68. ULONG PortPathDepth;
  69. ULONG PortPath[6];
  70. } USB_PORT_PATH, *PUSB_PORT_PATH;
  71. typedef
  72. NTSTATUS
  73. USB_BUSIFFN
  74. USB_BUSIFFN_CREATE_USB_DEVICE_V7 (
  75. IN PVOID BusContext,
  76. OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
  77. IN PUSB_DEVICE_HANDLE HsHubDeviceHandle,
  78. IN USHORT PortStatus,
  79. IN PUSB_PORT_PATH PortPath,
  80. OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo,
  81. IN USHORT TtPortNumber,
  82. IN PDEVICE_OBJECT PdoDeviceObject,
  83. IN PUNICODE_STRING PhysicalDeviceObjectName);
  84. typedef USB_BUSIFFN_CREATE_USB_DEVICE_V7 *PUSB_BUSIFFN_CREATE_USB_DEVICE_V7;
  85. typedef enum _USBPORT_INITDEV_ERROR {
  86. InitDevErrNotSet = 0,
  87. InitDevFailedSetAddress,
  88. InitDevFailedPokeEndpoint,
  89. InitDevBadDeviceDescriptor
  90. } USBPORT_INITDEV_ERROR;
  91. typedef struct _USB_ID_ERROR_INFORMATION {
  92. ULONG Version;
  93. USBPORT_INITDEV_ERROR PathError;
  94. ULONG Arg1;
  95. ULONG UsbAddress;
  96. NTSTATUS NtStatus;
  97. USBD_STATUS UsbdStatus;
  98. UCHAR XtraInfo[64];
  99. } USB_ID_ERROR_INFORMATION, *PUSB_ID_ERROR_INFORMATION;
  100. typedef
  101. NTSTATUS
  102. USB_BUSIFFN
  103. USB_BUSIFFN_INITIALIZE_USB_DEVICE (
  104. IN PVOID BusContext,
  105. IN OUT PUSB_DEVICE_HANDLE DeviceHandle);
  106. typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE;
  107. typedef
  108. NTSTATUS
  109. USB_BUSIFFN
  110. USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX (
  111. IN PVOID BusContext,
  112. IN OUT PUSB_DEVICE_HANDLE DeviceHandle,
  113. OUT PUSB_ID_ERROR_INFORMATION IdErrInfo);
  114. typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX;
  115. typedef
  116. NTSTATUS
  117. USB_BUSIFFN
  118. USB_BUSIFFN_REMOVE_USB_DEVICE (
  119. IN PVOID BusContext,
  120. IN OUT PUSB_DEVICE_HANDLE DeviceHandle,
  121. IN ULONG Flags);
  122. typedef USB_BUSIFFN_REMOVE_USB_DEVICE *PUSB_BUSIFFN_REMOVE_USB_DEVICE;
  123. typedef
  124. NTSTATUS
  125. USB_BUSIFFN
  126. USB_BUSIFFN_GET_USB_DESCRIPTORS (
  127. IN PVOID BusContext,
  128. IN OUT PUSB_DEVICE_HANDLE DeviceHandle,
  129. OUT PUCHAR DeviceDescriptorBuffer,
  130. IN OUT PULONG DeviceDescriptorBufferLength,
  131. OUT PUCHAR ConfigDescriptorBuffer,
  132. IN OUT PULONG ConfigDescriptorBufferLength);
  133. typedef USB_BUSIFFN_GET_USB_DESCRIPTORS *PUSB_BUSIFFN_GET_USB_DESCRIPTORS;
  134. typedef
  135. NTSTATUS
  136. USB_BUSIFFN
  137. USB_BUSIFFN_RESTORE_DEVICE (
  138. IN PVOID BusContext,
  139. IN OUT PUSB_DEVICE_HANDLE OldDeviceHandle,
  140. IN OUT PUSB_DEVICE_HANDLE NewDeviceHandle);
  141. typedef USB_BUSIFFN_RESTORE_DEVICE *PUSB_BUSIFFN_RESTORE_DEVICE;
  142. typedef
  143. NTSTATUS
  144. USB_BUSIFFN
  145. USB_BUSIFFN_GET_POTRTHACK_FLAGS (
  146. IN PVOID BusContext,
  147. IN OUT PULONG Flags);
  148. typedef USB_BUSIFFN_GET_POTRTHACK_FLAGS *PUSB_BUSIFFN_GET_POTRTHACK_FLAGS;
  149. typedef
  150. NTSTATUS
  151. USB_BUSIFFN
  152. USB_BUSIFFN_GET_DEVICE_INFORMATION (
  153. IN PVOID BusContext,
  154. IN PUSB_DEVICE_HANDLE DeviceHandle,
  155. OUT PVOID DeviceInformationBuffer,
  156. IN ULONG DeviceInformationBufferLength,
  157. IN OUT PULONG LengthOfDataCopied);
  158. typedef USB_BUSIFFN_GET_DEVICE_INFORMATION *PUSB_BUSIFFN_GET_DEVICE_INFORMATION;
  159. typedef
  160. NTSTATUS
  161. USB_BUSIFFN
  162. USB_BUSIFFN_GET_CONTROLLER_INFORMATION (
  163. IN PVOID BusContext,
  164. IN OUT PVOID ControllerInformationBuffer,
  165. IN ULONG ControllerInformationBufferLength,
  166. IN OUT PULONG LengthOfDataCopied);
  167. typedef USB_BUSIFFN_GET_CONTROLLER_INFORMATION *PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION;
  168. typedef
  169. NTSTATUS
  170. USB_BUSIFFN
  171. USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND (
  172. IN PVOID BusContext,
  173. IN BOOLEAN Enable);
  174. typedef USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND *PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND;
  175. typedef
  176. NTSTATUS
  177. USB_BUSIFFN
  178. USB_BUSIFFN_GET_EXTENDED_HUB_INFO (
  179. IN PVOID BusContext,
  180. IN PDEVICE_OBJECT HubPhysicalDeviceObject,
  181. IN PVOID HubInformationBuffer,
  182. IN ULONG HubInformationBufferLength,
  183. OUT PULONG LengthOfDataCopied);
  184. typedef USB_BUSIFFN_GET_EXTENDED_HUB_INFO *PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO;
  185. typedef
  186. NTSTATUS
  187. USB_BUSIFFN
  188. USB_BUSIFFN_GET_ROOTHUB_SYM_NAME (
  189. IN PVOID BusContext,
  190. IN PVOID HubSymNameBuffer,
  191. IN ULONG HubSymNameBufferLength,
  192. OUT PULONG HubSymNameActualLength);
  193. typedef USB_BUSIFFN_GET_ROOTHUB_SYM_NAME *PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME;
  194. typedef
  195. PVOID
  196. USB_BUSIFFN
  197. USB_BUSIFFN_GET_DEVICE_BUSCONTEXT (
  198. IN PVOID HubBusContext,
  199. IN PVOID DeviceHandle);
  200. typedef USB_BUSIFFN_GET_DEVICE_BUSCONTEXT *PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT;
  201. typedef
  202. NTSTATUS
  203. USB_BUSIFFN
  204. USB_BUSIFFN_INITIALIZE_20HUB (
  205. IN PVOID BusContext,
  206. IN PUSB_DEVICE_HANDLE HubDeviceHandle,
  207. IN ULONG TtCount);
  208. typedef USB_BUSIFFN_INITIALIZE_20HUB *PUSB_BUSIFFN_INITIALIZE_20HUB;
  209. typedef
  210. BOOLEAN
  211. USB_BUSIFFN
  212. USB_BUSIFFN_IS_ROOT (
  213. IN PVOID BusContext,
  214. IN PVOID DeviceObject);
  215. typedef USB_BUSIFFN_IS_ROOT *PUSB_BUSIFFN_IS_ROOT;
  216. typedef
  217. VOID
  218. USB_BUSIFFN
  219. USB_BUSIFFN_ACQUIRE_SEMAPHORE (
  220. IN PVOID BusContext);
  221. typedef USB_BUSIFFN_ACQUIRE_SEMAPHORE *PUSB_BUSIFFN_ACQUIRE_SEMAPHORE;
  222. typedef
  223. VOID
  224. USB_BUSIFFN
  225. USB_BUSIFFN_RELEASE_SEMAPHORE (
  226. IN PVOID BusContext);
  227. typedef USB_BUSIFFN_RELEASE_SEMAPHORE *PUSB_BUSIFFN_RELEASE_SEMAPHORE;
  228. typedef
  229. VOID
  230. __stdcall
  231. RH_INIT_CALLBACK (
  232. IN PVOID CallBackContext);
  233. typedef RH_INIT_CALLBACK *PRH_INIT_CALLBACK;
  234. typedef
  235. NTSTATUS
  236. USB_BUSIFFN
  237. USB_BUSIFFN_ROOTHUB_INIT_NOTIFY (
  238. IN PVOID BusContext,
  239. IN PVOID CallbackContext,
  240. IN PRH_INIT_CALLBACK CallbackRoutine);
  241. typedef USB_BUSIFFN_ROOTHUB_INIT_NOTIFY *PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY;
  242. typedef
  243. VOID
  244. USB_BUSIFFN
  245. USB_BUSIFFN_FLUSH_TRANSFERS (
  246. IN PVOID BusContext,
  247. IN PVOID DeviceHandle);
  248. typedef USB_BUSIFFN_FLUSH_TRANSFERS *PUSB_BUSIFFN_FLUSH_TRANSFERS;
  249. typedef
  250. ULONG
  251. USB_BUSIFFN
  252. USB_BUSIFFN_CALC_PIPE_BANDWIDTH (
  253. IN PVOID BusContext,
  254. IN PUSBD_PIPE_INFORMATION PipeInfo,
  255. IN USB_DEVICE_SPEED DeviceSpeed);
  256. typedef USB_BUSIFFN_CALC_PIPE_BANDWIDTH *PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH;
  257. typedef
  258. VOID
  259. USB_BUSIFFN
  260. USB_BUSIFFN_SET_BUS_WAKE_MODE (
  261. IN PVOID BusContext,
  262. IN ULONG Mode);
  263. typedef USB_BUSIFFN_SET_BUS_WAKE_MODE *PUSB_BUSIFFN_SET_BUS_WAKE_MODE;
  264. typedef
  265. VOID
  266. USB_BUSIFFN
  267. USB_BUSIFFN_SET_DEVICE_FLAG (
  268. IN PVOID BusContext,
  269. IN GUID *DeviceFlagGuid,
  270. IN PVOID ValueData,
  271. IN ULONG ValueLength);
  272. typedef USB_BUSIFFN_SET_DEVICE_FLAG *PUSB_BUSIFFN_SET_DEVICE_FLAG;
  273. typedef
  274. VOID
  275. USB_BUSIFFN
  276. USB_BUSIFFN_SET_DEVHANDLE_DATA (
  277. IN PVOID BusContext,
  278. IN PVOID DeviceHandle,
  279. IN PDEVICE_OBJECT UsbDevicePdo);
  280. typedef USB_BUSIFFN_SET_DEVHANDLE_DATA *PUSB_BUSIFFN_SET_DEVHANDLE_DATA;
  281. typedef
  282. NTSTATUS
  283. USB_BUSIFFN
  284. USB_BUSIFFN_TEST_POINT (
  285. IN PVOID BusContext,
  286. IN PVOID DeviceHandle,
  287. IN ULONG Opcode,
  288. IN PVOID TestData);
  289. typedef USB_BUSIFFN_TEST_POINT *PUSB_BUSIFFN_TEST_POINT;
  290. typedef
  291. NTSTATUS
  292. USB_BUSIFFN
  293. USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO (
  294. IN PVOID BusContext,
  295. IN PUSB_DEVICE_HANDLE DeviceHandle,
  296. OUT PVOID DeviceInformationBuffer,
  297. IN ULONG DeviceInformationBufferLength,
  298. IN OUT PULONG LengthOfDataCopied);
  299. typedef USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO *PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO;
  300. typedef
  301. NTSTATUS
  302. USB_BUSIFFN
  303. USB_BUSIFFN_WAIT_ASYNC_POWERUP (
  304. IN PVOID BusContext);
  305. typedef USB_BUSIFFN_WAIT_ASYNC_POWERUP *PUSB_BUSIFFN_WAIT_ASYNC_POWERUP;
  306. typedef
  307. NTSTATUS
  308. USB_BUSIFFN
  309. USB_BUSIFFN_GET_DEVICE_ADDRESS (
  310. IN PVOID BusContext,
  311. IN PUSB_DEVICE_HANDLE DeviceHandle,
  312. OUT PUSHORT DeviceAddress);
  313. typedef USB_BUSIFFN_GET_DEVICE_ADDRESS *PUSB_BUSIFFN_GET_DEVICE_ADDRESS;
  314. typedef
  315. VOID
  316. USB_BUSIFFN
  317. USB_BUSIFFN_DEREF_DEVICE_HANDLE (
  318. IN PVOID BusContext,
  319. IN PUSB_DEVICE_HANDLE DeviceHandle,
  320. IN PVOID Object,
  321. IN ULONG Tag);
  322. typedef USB_BUSIFFN_DEREF_DEVICE_HANDLE *PUSB_BUSIFFN_DEREF_DEVICE_HANDLE;
  323. typedef
  324. NTSTATUS
  325. USB_BUSIFFN
  326. USB_BUSIFFN_REF_DEVICE_HANDLE (
  327. IN PVOID BusContext,
  328. IN PUSB_DEVICE_HANDLE DeviceHandle,
  329. IN PVOID Object,
  330. IN ULONG Tag);
  331. typedef USB_BUSIFFN_REF_DEVICE_HANDLE *PUSB_BUSIFFN_REF_DEVICE_HANDLE;
  332. typedef
  333. ULONG
  334. USB_BUSIFFN
  335. USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE (
  336. IN PVOID BusContext,
  337. IN PUSB_DEVICE_HANDLE DeviceHandle,
  338. IN ULONG NewIdleReadyState);
  339. typedef USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE *PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE;
  340. typedef
  341. NTSTATUS
  342. USB_BUSIFFN
  343. USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT (
  344. IN PVOID BusContext,
  345. IN USHORT PortNumber,
  346. OUT LPGUID ContainerId);
  347. typedef USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT;
  348. typedef
  349. VOID
  350. USB_BUSIFFN
  351. USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT (
  352. IN PVOID BusContext,
  353. IN USHORT PortNumber,
  354. IN LPGUID ContainerId);
  355. typedef USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT;
  356. typedef
  357. NTSTATUS
  358. USB_BUSIFFN
  359. USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES (
  360. IN PVOID BusContext,
  361. IN PUSB_DEVICE_HANDLE DeviceHandle);
  362. typedef USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES *PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES;
  363. #define ERRATA_FLAG_RESET_TT_ON_CANCEL 1
  364. #define ERRATA_FLAG_NO_CLEAR_TT_BUFFER_ON_CANCEL 2
  365. #define USB_BUSIF_HUB_VERSION_0 0x0000
  366. #define USB_BUSIF_HUB_VERSION_1 0x0001
  367. #define USB_BUSIF_HUB_VERSION_2 0x0002
  368. #define USB_BUSIF_HUB_VERSION_3 0x0003
  369. #define USB_BUSIF_HUB_VERSION_4 0x0004
  370. #define USB_BUSIF_HUB_VERSION_5 0x0005
  371. #define USB_BUSIF_HUB_VERSION_6 0x0006
  372. #define USB_BUSIF_HUB_VERSION_7 0x0007
  373. #define USB_BUSIF_HUB_MIDUMP_VERSION_0 0x0000
  374. #define USB_BUSIF_HUB_SS_VERSION_0 0x0000
  375. typedef
  376. VOID
  377. USB_BUSIFFN
  378. USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG (
  379. IN PVOID BusContext,
  380. IN PUSB_DEVICE_HANDLE DeviceHandle,
  381. IN ULONG DeviceErrataFlag);
  382. typedef USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG *PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG;
  383. DEFINE_GUID(USB_BUS_INTERFACE_HUB_GUID,
  384. 0xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a);
  385. typedef struct _USB_BUS_INTERFACE_HUB_V0 {
  386. USHORT Size;
  387. USHORT Version;
  388. PVOID BusContext;
  389. PINTERFACE_REFERENCE InterfaceReference;
  390. PINTERFACE_DEREFERENCE InterfaceDereference;
  391. } USB_BUS_INTERFACE_HUB_V0, *PUSB_BUS_INTERFACE_HUB_V0;
  392. typedef struct _USB_BUS_INTERFACE_HUB_V1 {
  393. USHORT Size;
  394. USHORT Version;
  395. PVOID BusContext;
  396. PINTERFACE_REFERENCE InterfaceReference;
  397. PINTERFACE_DEREFERENCE InterfaceDereference;
  398. PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
  399. PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
  400. PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
  401. PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
  402. PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
  403. PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
  404. PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
  405. } USB_BUS_INTERFACE_HUB_V1, *PUSB_BUS_INTERFACE_HUB_V1;
  406. typedef struct _USB_BUS_INTERFACE_HUB_V2 {
  407. USHORT Size;
  408. USHORT Version;
  409. PVOID BusContext;
  410. PINTERFACE_REFERENCE InterfaceReference;
  411. PINTERFACE_DEREFERENCE InterfaceDereference;
  412. PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
  413. PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
  414. PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
  415. PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
  416. PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
  417. PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
  418. PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
  419. PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
  420. PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
  421. PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
  422. PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
  423. PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
  424. PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
  425. } USB_BUS_INTERFACE_HUB_V2, *PUSB_BUS_INTERFACE_HUB_V2;
  426. typedef struct _USB_BUS_INTERFACE_HUB_V3 {
  427. USHORT Size;
  428. USHORT Version;
  429. PVOID BusContext;
  430. PINTERFACE_REFERENCE InterfaceReference;
  431. PINTERFACE_DEREFERENCE InterfaceDereference;
  432. PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
  433. PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
  434. PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
  435. PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
  436. PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
  437. PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
  438. PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
  439. PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
  440. PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
  441. PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
  442. PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
  443. PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
  444. PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
  445. PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
  446. } USB_BUS_INTERFACE_HUB_V3, *PUSB_BUS_INTERFACE_HUB_V3;
  447. typedef struct _USB_BUS_INTERFACE_HUB_V4 {
  448. USHORT Size;
  449. USHORT Version;
  450. PVOID BusContext;
  451. PINTERFACE_REFERENCE InterfaceReference;
  452. PINTERFACE_DEREFERENCE InterfaceDereference;
  453. PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
  454. PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
  455. PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
  456. PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
  457. PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
  458. PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
  459. PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
  460. PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
  461. PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
  462. PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
  463. PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
  464. PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
  465. PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
  466. PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
  467. PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
  468. } USB_BUS_INTERFACE_HUB_V4, *PUSB_BUS_INTERFACE_HUB_V4;
  469. typedef struct _USB_BUS_INTERFACE_HUB_V5 {
  470. USHORT Size;
  471. USHORT Version;
  472. PVOID BusContext;
  473. PINTERFACE_REFERENCE InterfaceReference;
  474. PINTERFACE_DEREFERENCE InterfaceDereference;
  475. PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
  476. PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
  477. PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
  478. PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
  479. PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
  480. PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
  481. PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
  482. PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
  483. PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
  484. PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
  485. PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
  486. PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
  487. PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
  488. PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
  489. PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
  490. PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData;
  491. } USB_BUS_INTERFACE_HUB_V5, *PUSB_BUS_INTERFACE_HUB_V5;
  492. typedef struct _USB_BUS_INTERFACE_HUB_V6 {
  493. USHORT Size;
  494. USHORT Version;
  495. PVOID BusContext;
  496. PINTERFACE_REFERENCE InterfaceReference;
  497. PINTERFACE_DEREFERENCE InterfaceDereference;
  498. PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice;
  499. PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice;
  500. PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
  501. PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
  502. PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
  503. PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
  504. PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
  505. PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
  506. PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
  507. PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
  508. PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
  509. PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
  510. PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
  511. PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
  512. PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
  513. PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData;
  514. PUSB_BUSIFFN_IS_ROOT HubIsRoot;
  515. PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore;
  516. PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore;
  517. PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth;
  518. PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode;
  519. PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag;
  520. PUSB_BUSIFFN_TEST_POINT HubTestPoint;
  521. PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo;
  522. PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp;
  523. PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress;
  524. PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle;
  525. PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle;
  526. PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState;
  527. } USB_BUS_INTERFACE_HUB_V6, *PUSB_BUS_INTERFACE_HUB_V6;
  528. typedef struct _USB_BUS_INTERFACE_HUB_V7 {
  529. USHORT Size;
  530. USHORT Version;
  531. PVOID BusContext;
  532. PINTERFACE_REFERENCE InterfaceReference;
  533. PINTERFACE_DEREFERENCE InterfaceDereference;
  534. PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice;
  535. PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice;
  536. PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
  537. PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
  538. PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
  539. PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
  540. PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
  541. PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
  542. PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
  543. PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
  544. PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
  545. PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
  546. PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
  547. PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
  548. PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
  549. PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData;
  550. PUSB_BUSIFFN_IS_ROOT HubIsRoot;
  551. PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore;
  552. PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore;
  553. PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth;
  554. PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode;
  555. PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag;
  556. PUSB_BUSIFFN_TEST_POINT HubTestPoint;
  557. PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo;
  558. PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp;
  559. PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress;
  560. PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle;
  561. PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle;
  562. PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState;
  563. PUSB_BUSIFFN_CREATE_USB_DEVICE_V7 CreateUsbDeviceV7;
  564. PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT GetContainerIdForPort;
  565. PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT SetContainerIdForPort;
  566. PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES AbortAllDevicePipes;
  567. PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG SetDeviceErrataFlag;
  568. } USB_BUS_INTERFACE_HUB_V7, *PUSB_BUS_INTERFACE_HUB_V7;
  569. DEFINE_GUID(USB_BUS_INTERFACE_HUB_MINIDUMP_GUID,
  570. 0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38);
  571. typedef VOID
  572. (USB_BUSIFFN *PUSB_BUSIFFN_SET_MINIDUMP_FLAGS) (
  573. IN PVOID);
  574. typedef struct _USB_BUS_INTERFACE_HUB_MINIDUMP {
  575. USHORT Size;
  576. USHORT Version;
  577. PVOID BusContext;
  578. PINTERFACE_REFERENCE InterfaceReference;
  579. PINTERFACE_DEREFERENCE InterfaceDereference;
  580. PUSB_BUSIFFN_SET_MINIDUMP_FLAGS SetUsbPortMiniDumpFlags;
  581. } USB_BUS_INTERFACE_HUB_MINIDUMP, *PUSB_BUS_INTERFACE_HUB_MINIDUMP;
  582. DEFINE_GUID(USB_BUS_INTERFACE_HUB_SS_GUID,
  583. 0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f);
  584. typedef NTSTATUS
  585. (USB_BUSIFFN *PUSB_BUSIFFN_SUSPEND_HUB) (
  586. PDEVICE_OBJECT Pdo);
  587. typedef NTSTATUS
  588. (USB_BUSIFFN *PUSB_BUSIFFN_RESUME_HUB) (
  589. PDEVICE_OBJECT Pdo);
  590. typedef struct _USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND {
  591. USHORT Size;
  592. USHORT Version;
  593. PVOID BusContext;
  594. PINTERFACE_REFERENCE InterfaceReference;
  595. PINTERFACE_DEREFERENCE InterfaceDereference;
  596. PUSB_BUSIFFN_SUSPEND_HUB SuspendHub;
  597. PUSB_BUSIFFN_RESUME_HUB ResumeHub;
  598. } USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND, *PUSB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND;
  599. #include <pshpack1.h>
  600. typedef struct _USB_PIPE_INFORMATION_0 {
  601. USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
  602. UCHAR ED_Pad[1];
  603. ULONG ScheduleOffset;
  604. } USB_PIPE_INFORMATION_0, *PUSB_PIPE_INFORMATION_0;
  605. typedef struct _USB_LEVEL_INFORMATION {
  606. ULONG InformationLevel;
  607. ULONG ActualLength;
  608. } USB_LEVEL_INFORMATION, *PUSB_LEVEL_INFORMATION;
  609. typedef struct _USB_DEVICE_INFORMATION_0 {
  610. ULONG InformationLevel;
  611. ULONG ActualLength;
  612. ULONG PortNumber;
  613. USB_DEVICE_DESCRIPTOR DeviceDescriptor;
  614. UCHAR DD_pad[2];
  615. UCHAR CurrentConfigurationValue;
  616. UCHAR ReservedMBZ;
  617. USHORT DeviceAddress;
  618. ULONG HubAddress;
  619. USB_DEVICE_SPEED DeviceSpeed;
  620. USB_DEVICE_TYPE DeviceType;
  621. ULONG NumberOfOpenPipes;
  622. USB_PIPE_INFORMATION_0 PipeList[1];
  623. } USB_DEVICE_INFORMATION_0, *PUSB_DEVICE_INFORMATION_0;
  624. typedef struct _USB_CONTROLLER_INFORMATION_0 {
  625. ULONG InformationLevel;
  626. ULONG ActualLength;
  627. BOOLEAN SelectiveSuspendEnabled;
  628. BOOLEAN IsHighSpeedController;
  629. } USB_CONTROLLER_INFORMATION_0, *PUSB_CONTROLLER_INFORMATION_0;
  630. typedef struct _USB_CONTROLLER_INFORMATION_1 {
  631. ULONG InformationLevel;
  632. ULONG ActualLength;
  633. BOOLEAN SelectiveSuspendEnabled;
  634. BOOLEAN IsHighSpeedController;
  635. ULONG HcBusNumber;
  636. ULONG HcBusDevice;
  637. ULONG HcBusFunction;
  638. } USB_CONTROLLER_INFORMATION_1, *PUSB_CONTROLLER_INFORMATION_1;
  639. typedef struct _USB_EXTPORT_INFORMATION_0 {
  640. ULONG PhysicalPortNumber;
  641. ULONG PortLabelNumber;
  642. USHORT VidOverride;
  643. USHORT PidOverride;
  644. ULONG PortAttributes;
  645. } USB_EXTPORT_INFORMATION_0, *PUSB_EXTPORT_INFORMATION;
  646. typedef struct _USB_EXTHUB_INFORMATION_0 {
  647. ULONG InformationLevel;
  648. ULONG NumberOfPorts;
  649. USB_EXTPORT_INFORMATION_0 Port[255];
  650. } USB_EXTHUB_INFORMATION_0, *PUSB_EXTHUB_INFORMATION_0;
  651. typedef struct _USB_DEVICE_PERFORMANCE_INFO_0 {
  652. ULONG InformationLevel;
  653. ULONG ActualLength;
  654. ULONG BulkBytes;
  655. ULONG BulkUrbCount;
  656. ULONG ControlDataBytes;
  657. ULONG ControlUrbCount;
  658. ULONG IsoBytes;
  659. ULONG IsoUrbCount;
  660. ULONG InterruptBytes;
  661. ULONG InterruptUrbCount;
  662. ULONG AllocedInterrupt[6];
  663. ULONG AllocedIso;
  664. ULONG Total32secBandwidth;
  665. ULONG TotalTtBandwidth;
  666. ULONG TotalIsoLatency;
  667. ULONG DroppedIsoPackets;
  668. ULONG TransferErrors;
  669. } USB_DEVICE_PERFORMANCE_INFO_0, *PUSB_DEVICE_PERFORMANCE_INFO_0;
  670. #include <poppack.h>
  671. #endif /* NTDDI_VERSION >= NTDDI_WINXP */