Advertisement
Guest User

PS4 USB OFFSETS/INFROMATION ?

a guest
Mar 1st, 2017
6,373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.67 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6.  
  7. namespace PS4SaveEditor
  8. {
  9. // Token: 0x02000029 RID: 41
  10. public class USB
  11. {
  12. // Token: 0x0600029F RID: 671 RVA: 0x0000FC14 File Offset: 0x0000DE14
  13. public static List<USB.USBDevice> GetConnectedDevices()
  14. {
  15. List<USB.USBDevice> list = new List<USB.USBDevice>();
  16. foreach (USB.USBController current in USB.GetHostControllers())
  17. {
  18. USB.ListHub(current.GetRootHub(), list);
  19. }
  20. return list;
  21. }
  22.  
  23. // Token: 0x060002A0 RID: 672 RVA: 0x0000FC6C File Offset: 0x0000DE6C
  24. private static void ListHub(USB.USBHub Hub, List<USB.USBDevice> DevList)
  25. {
  26. foreach (USB.USBPort current in Hub.GetPorts())
  27. {
  28. if (current.IsHub)
  29. {
  30. USB.ListHub(current.GetHub(), DevList);
  31. }
  32. else if (current.IsDeviceConnected)
  33. {
  34. DevList.Add(current.GetDevice());
  35. }
  36. }
  37. }
  38.  
  39. // Token: 0x060002A1 RID: 673 RVA: 0x0000FCDC File Offset: 0x0000DEDC
  40. public static USB.USBDevice FindDeviceByDriverKeyName(string DriverKeyName)
  41. {
  42. USB.USBDevice uSBDevice = null;
  43. foreach (USB.USBController current in USB.GetHostControllers())
  44. {
  45. USB.SearchHubDriverKeyName(current.GetRootHub(), ref uSBDevice, DriverKeyName);
  46. if (uSBDevice != null)
  47. {
  48. break;
  49. }
  50. }
  51. return uSBDevice;
  52. }
  53.  
  54. // Token: 0x060002A2 RID: 674 RVA: 0x0000FD38 File Offset: 0x0000DF38
  55. private static void SearchHubDriverKeyName(USB.USBHub Hub, ref USB.USBDevice FoundDevice, string DriverKeyName)
  56. {
  57. foreach (USB.USBPort current in Hub.GetPorts())
  58. {
  59. if (current.IsHub)
  60. {
  61. USB.SearchHubDriverKeyName(current.GetHub(), ref FoundDevice, DriverKeyName);
  62. }
  63. else if (current.IsDeviceConnected)
  64. {
  65. USB.USBDevice device = current.GetDevice();
  66. if (device.DeviceDriverKey == DriverKeyName)
  67. {
  68. FoundDevice = device;
  69. break;
  70. }
  71. }
  72. }
  73. }
  74.  
  75. // Token: 0x060002A3 RID: 675 RVA: 0x0000FDB8 File Offset: 0x0000DFB8
  76. public static USB.USBDevice FindDeviceByInstanceID(string InstanceID)
  77. {
  78. USB.USBDevice uSBDevice = null;
  79. foreach (USB.USBController current in USB.GetHostControllers())
  80. {
  81. USB.SearchHubInstanceID(current.GetRootHub(), ref uSBDevice, InstanceID);
  82. if (uSBDevice != null)
  83. {
  84. break;
  85. }
  86. }
  87. return uSBDevice;
  88. }
  89.  
  90. // Token: 0x060002A4 RID: 676 RVA: 0x0000FE14 File Offset: 0x0000E014
  91. private static void SearchHubInstanceID(USB.USBHub Hub, ref USB.USBDevice FoundDevice, string InstanceID)
  92. {
  93. foreach (USB.USBPort current in Hub.GetPorts())
  94. {
  95. if (current.IsHub)
  96. {
  97. USB.SearchHubInstanceID(current.GetHub(), ref FoundDevice, InstanceID);
  98. }
  99. else if (current.IsDeviceConnected)
  100. {
  101. USB.USBDevice device = current.GetDevice();
  102. if (device.InstanceID == InstanceID)
  103. {
  104. FoundDevice = device;
  105. break;
  106. }
  107. }
  108. }
  109. }
  110.  
  111. // Token: 0x060002A5 RID: 677
  112. [DllImport("setupapi.dll")]
  113. private static extern int CM_Get_Parent(out IntPtr pdnDevInst, int dnDevInst, int ulFlags);
  114.  
  115. // Token: 0x060002A6 RID: 678
  116. [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
  117. private static extern int CM_Get_Device_ID(IntPtr dnDevInst, IntPtr Buffer, int BufferLen, int ulFlags);
  118.  
  119. // Token: 0x060002A7 RID: 679 RVA: 0x0000FE94 File Offset: 0x0000E094
  120. public static USB.USBDevice FindDriveLetter(string DriveLetter)
  121. {
  122. USB.USBDevice result = null;
  123. string text = "";
  124. int deviceNumber = USB.GetDeviceNumber("\\\\.\\" + DriveLetter.TrimEnd(new char[]
  125. {
  126. '\\'
  127. }));
  128. if (deviceNumber < 0)
  129. {
  130. return result;
  131. }
  132. Guid guid = new Guid("53f56307-b6bf-11d0-94f2-00a0c91efb8b");
  133. IntPtr deviceInfoSet = USB.SetupDiGetClassDevs(ref guid, 0, IntPtr.Zero, 18);
  134. if (deviceInfoSet.ToInt32() != -1)
  135. {
  136. int num = 0;
  137. USB.SP_DEVINFO_DATA sP_DEVINFO_DATA;
  138. int num3;
  139. while (true)
  140. {
  141. USB.SP_DEVICE_INTERFACE_DATA sP_DEVICE_INTERFACE_DATA = default(USB.SP_DEVICE_INTERFACE_DATA);
  142. sP_DEVICE_INTERFACE_DATA.cbSize = Marshal.SizeOf(sP_DEVICE_INTERFACE_DATA);
  143. bool flag = USB.SetupDiEnumDeviceInterfaces(deviceInfoSet, IntPtr.Zero, ref guid, num, ref sP_DEVICE_INTERFACE_DATA);
  144. if (flag)
  145. {
  146. sP_DEVINFO_DATA = default(USB.SP_DEVINFO_DATA);
  147. sP_DEVINFO_DATA.cbSize = Marshal.SizeOf(sP_DEVINFO_DATA);
  148. USB.SP_DEVICE_INTERFACE_DETAIL_DATA sP_DEVICE_INTERFACE_DETAIL_DATA = default(USB.SP_DEVICE_INTERFACE_DETAIL_DATA);
  149. sP_DEVICE_INTERFACE_DETAIL_DATA.cbSize = ((IntPtr.Size == 4) ? (4 + Marshal.SystemDefaultCharSize) : 8);
  150. int num2 = 0;
  151. num3 = 2048;
  152. if (USB.SetupDiGetDeviceInterfaceDetail(deviceInfoSet, ref sP_DEVICE_INTERFACE_DATA, ref sP_DEVICE_INTERFACE_DETAIL_DATA, num3, ref num2, ref sP_DEVINFO_DATA) && USB.GetDeviceNumber(sP_DEVICE_INTERFACE_DETAIL_DATA.DevicePath) == deviceNumber)
  153. {
  154. break;
  155. }
  156. }
  157. num++;
  158. if (!flag)
  159. {
  160. goto IL_14B;
  161. }
  162. }
  163. IntPtr dnDevInst;
  164. USB.CM_Get_Parent(out dnDevInst, sP_DEVINFO_DATA.DevInst, 0);
  165. IntPtr intPtr = Marshal.AllocHGlobal(num3);
  166. USB.CM_Get_Device_ID(dnDevInst, intPtr, num3, 0);
  167. text = Marshal.PtrToStringAuto(intPtr);
  168. Marshal.FreeHGlobal(intPtr);
  169. IL_14B:
  170. USB.SetupDiDestroyDeviceInfoList(deviceInfoSet);
  171. }
  172. if (text.StartsWith("USB\\"))
  173. {
  174. result = USB.FindDeviceByInstanceID(text);
  175. }
  176. return result;
  177. }
  178.  
  179. // Token: 0x060002A8 RID: 680 RVA: 0x0001000C File Offset: 0x0000E20C
  180. private static int GetDeviceNumber(string DevicePath)
  181. {
  182. int result = -1;
  183. IntPtr intPtr = USB.CreateFile(DevicePath.TrimEnd(new char[]
  184. {
  185. '\\'
  186. }), 0, 0, IntPtr.Zero, 3, 0, IntPtr.Zero);
  187. if (intPtr.ToInt32() != -1)
  188. {
  189. int num = Marshal.SizeOf(default(USB.STORAGE_DEVICE_NUMBER));
  190. IntPtr intPtr2 = Marshal.AllocHGlobal(num);
  191. int num2;
  192. if (USB.DeviceIoControl(intPtr, 2953344, IntPtr.Zero, 0, intPtr2, num, out num2, IntPtr.Zero))
  193. {
  194. USB.STORAGE_DEVICE_NUMBER sTORAGE_DEVICE_NUMBER = (USB.STORAGE_DEVICE_NUMBER)Marshal.PtrToStructure(intPtr2, typeof(USB.STORAGE_DEVICE_NUMBER));
  195. result = (sTORAGE_DEVICE_NUMBER.DeviceType << 8) + sTORAGE_DEVICE_NUMBER.DeviceNumber;
  196. }
  197. Marshal.FreeHGlobal(intPtr2);
  198. USB.CloseHandle(intPtr);
  199. }
  200. return result;
  201. }
  202.  
  203. // Token: 0x060002A9 RID: 681
  204. [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
  205. private static extern IntPtr SetupDiGetClassDevs(ref Guid ClassGuid, int Enumerator, IntPtr hwndParent, int Flags);
  206.  
  207. // Token: 0x060002AA RID: 682
  208. [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
  209. private static extern IntPtr SetupDiGetClassDevs(int ClassGuid, string Enumerator, IntPtr hwndParent, int Flags);
  210.  
  211. // Token: 0x060002AB RID: 683
  212. [DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
  213. private static extern bool SetupDiEnumDeviceInterfaces(IntPtr DeviceInfoSet, IntPtr DeviceInfoData, ref Guid InterfaceClassGuid, int MemberIndex, ref USB.SP_DEVICE_INTERFACE_DATA DeviceInterfaceData);
  214.  
  215. // Token: 0x060002AC RID: 684
  216. [DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
  217. private static extern bool SetupDiGetDeviceInterfaceDetail(IntPtr DeviceInfoSet, ref USB.SP_DEVICE_INTERFACE_DATA DeviceInterfaceData, ref USB.SP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData, int DeviceInterfaceDetailDataSize, ref int RequiredSize, ref USB.SP_DEVINFO_DATA DeviceInfoData);
  218.  
  219. // Token: 0x060002AD RID: 685
  220. [DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
  221. private static extern bool SetupDiGetDeviceRegistryProperty(IntPtr DeviceInfoSet, ref USB.SP_DEVINFO_DATA DeviceInfoData, int iProperty, ref int PropertyRegDataType, IntPtr PropertyBuffer, int PropertyBufferSize, ref int RequiredSize);
  222.  
  223. // Token: 0x060002AE RID: 686
  224. [DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
  225. private static extern bool SetupDiEnumDeviceInfo(IntPtr DeviceInfoSet, int MemberIndex, ref USB.SP_DEVINFO_DATA DeviceInfoData);
  226.  
  227. // Token: 0x060002AF RID: 687
  228. [DllImport("setupapi.dll", SetLastError = true)]
  229. private static extern bool SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet);
  230.  
  231. // Token: 0x060002B0 RID: 688
  232. [DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
  233. private static extern bool SetupDiGetDeviceInstanceId(IntPtr DeviceInfoSet, ref USB.SP_DEVINFO_DATA DeviceInfoData, StringBuilder DeviceInstanceId, int DeviceInstanceIdSize, out int RequiredSize);
  234.  
  235. // Token: 0x060002B1 RID: 689
  236. [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  237. private static extern bool DeviceIoControl(IntPtr hDevice, int dwIoControlCode, IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
  238.  
  239. // Token: 0x060002B2 RID: 690
  240. [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  241. private static extern IntPtr CreateFile(string lpFileName, int dwDesiredAccess, int dwShareMode, IntPtr lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile);
  242.  
  243. // Token: 0x060002B3 RID: 691
  244. [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  245. private static extern bool CloseHandle(IntPtr hObject);
  246.  
  247. // Token: 0x060002B4 RID: 692 RVA: 0x000100C4 File Offset: 0x0000E2C4
  248. public static ReadOnlyCollection<USB.USBController> GetHostControllers()
  249. {
  250. List<USB.USBController> list = new List<USB.USBController>();
  251. Guid guid = new Guid("3abf6f2d-71c4-462a-8a92-1e6861e6af27");
  252. IntPtr deviceInfoSet = USB.SetupDiGetClassDevs(ref guid, 0, IntPtr.Zero, 18);
  253. if (deviceInfoSet.ToInt32() != -1)
  254. {
  255. IntPtr intPtr = Marshal.AllocHGlobal(2048);
  256. int num = 0;
  257. bool flag;
  258. do
  259. {
  260. USB.USBController uSBController = new USB.USBController();
  261. uSBController.ControllerIndex = num;
  262. USB.SP_DEVICE_INTERFACE_DATA sP_DEVICE_INTERFACE_DATA = default(USB.SP_DEVICE_INTERFACE_DATA);
  263. sP_DEVICE_INTERFACE_DATA.cbSize = Marshal.SizeOf(sP_DEVICE_INTERFACE_DATA);
  264. flag = USB.SetupDiEnumDeviceInterfaces(deviceInfoSet, IntPtr.Zero, ref guid, num, ref sP_DEVICE_INTERFACE_DATA);
  265. if (flag)
  266. {
  267. USB.SP_DEVINFO_DATA sP_DEVINFO_DATA = default(USB.SP_DEVINFO_DATA);
  268. sP_DEVINFO_DATA.cbSize = Marshal.SizeOf(sP_DEVINFO_DATA);
  269. USB.SP_DEVICE_INTERFACE_DETAIL_DATA sP_DEVICE_INTERFACE_DETAIL_DATA = default(USB.SP_DEVICE_INTERFACE_DETAIL_DATA);
  270. sP_DEVICE_INTERFACE_DETAIL_DATA.cbSize = ((IntPtr.Size == 4) ? (4 + Marshal.SystemDefaultCharSize) : 8);
  271. int num2 = 0;
  272. int deviceInterfaceDetailDataSize = 2048;
  273. if (USB.SetupDiGetDeviceInterfaceDetail(deviceInfoSet, ref sP_DEVICE_INTERFACE_DATA, ref sP_DEVICE_INTERFACE_DETAIL_DATA, deviceInterfaceDetailDataSize, ref num2, ref sP_DEVINFO_DATA))
  274. {
  275. uSBController.ControllerDevicePath = sP_DEVICE_INTERFACE_DETAIL_DATA.DevicePath;
  276. int num3 = 0;
  277. int num4 = 1;
  278. if (USB.SetupDiGetDeviceRegistryProperty(deviceInfoSet, ref sP_DEVINFO_DATA, 0, ref num4, intPtr, 2048, ref num3))
  279. {
  280. uSBController.ControllerDeviceDesc = Marshal.PtrToStringAuto(intPtr);
  281. }
  282. if (USB.SetupDiGetDeviceRegistryProperty(deviceInfoSet, ref sP_DEVINFO_DATA, 9, ref num4, intPtr, 2048, ref num3))
  283. {
  284. uSBController.ControllerDriverKeyName = Marshal.PtrToStringAuto(intPtr);
  285. }
  286. }
  287. list.Add(uSBController);
  288. }
  289. num++;
  290. }
  291. while (flag);
  292. Marshal.FreeHGlobal(intPtr);
  293. USB.SetupDiDestroyDeviceInfoList(deviceInfoSet);
  294. }
  295. return new ReadOnlyCollection<USB.USBController>(list);
  296. }
  297.  
  298. // Token: 0x060002B5 RID: 693 RVA: 0x00010234 File Offset: 0x0000E434
  299. private static string GetDescriptionByKeyName(string DriverKeyName)
  300. {
  301. string result = "";
  302. string enumerator = "USB";
  303. IntPtr deviceInfoSet = USB.SetupDiGetClassDevs(0, enumerator, IntPtr.Zero, 6);
  304. if (deviceInfoSet.ToInt32() != -1)
  305. {
  306. IntPtr intPtr = Marshal.AllocHGlobal(2048);
  307. int num = 0;
  308. USB.SP_DEVINFO_DATA sP_DEVINFO_DATA;
  309. int num2;
  310. int num3;
  311. while (true)
  312. {
  313. sP_DEVINFO_DATA = default(USB.SP_DEVINFO_DATA);
  314. sP_DEVINFO_DATA.cbSize = Marshal.SizeOf(sP_DEVINFO_DATA);
  315. bool flag = USB.SetupDiEnumDeviceInfo(deviceInfoSet, num, ref sP_DEVINFO_DATA);
  316. if (flag)
  317. {
  318. num2 = 0;
  319. num3 = 1;
  320. string a = "";
  321. if (USB.SetupDiGetDeviceRegistryProperty(deviceInfoSet, ref sP_DEVINFO_DATA, 9, ref num3, intPtr, 2048, ref num2))
  322. {
  323. a = Marshal.PtrToStringAuto(intPtr);
  324. }
  325. if (a == DriverKeyName)
  326. {
  327. break;
  328. }
  329. }
  330. num++;
  331. if (!flag)
  332. {
  333. goto IL_C0;
  334. }
  335. }
  336. if (USB.SetupDiGetDeviceRegistryProperty(deviceInfoSet, ref sP_DEVINFO_DATA, 0, ref num3, intPtr, 2048, ref num2))
  337. {
  338. result = Marshal.PtrToStringAuto(intPtr);
  339. }
  340. IL_C0:
  341. Marshal.FreeHGlobal(intPtr);
  342. USB.SetupDiDestroyDeviceInfoList(deviceInfoSet);
  343. }
  344. return result;
  345. }
  346.  
  347. // Token: 0x060002B6 RID: 694 RVA: 0x00010310 File Offset: 0x0000E510
  348. private static string GetInstanceIDByKeyName(string DriverKeyName)
  349. {
  350. string result = "";
  351. string enumerator = "USB";
  352. IntPtr deviceInfoSet = USB.SetupDiGetClassDevs(0, enumerator, IntPtr.Zero, 6);
  353. if (deviceInfoSet.ToInt32() != -1)
  354. {
  355. IntPtr intPtr = Marshal.AllocHGlobal(2048);
  356. int num = 0;
  357. USB.SP_DEVINFO_DATA sP_DEVINFO_DATA;
  358. int num2;
  359. while (true)
  360. {
  361. sP_DEVINFO_DATA = default(USB.SP_DEVINFO_DATA);
  362. sP_DEVINFO_DATA.cbSize = Marshal.SizeOf(sP_DEVINFO_DATA);
  363. bool flag = USB.SetupDiEnumDeviceInfo(deviceInfoSet, num, ref sP_DEVINFO_DATA);
  364. if (flag)
  365. {
  366. num2 = 0;
  367. int num3 = 1;
  368. string a = "";
  369. if (USB.SetupDiGetDeviceRegistryProperty(deviceInfoSet, ref sP_DEVINFO_DATA, 9, ref num3, intPtr, 2048, ref num2))
  370. {
  371. a = Marshal.PtrToStringAuto(intPtr);
  372. }
  373. if (a == DriverKeyName)
  374. {
  375. break;
  376. }
  377. }
  378. num++;
  379. if (!flag)
  380. {
  381. goto IL_CB;
  382. }
  383. }
  384. int num4 = 2048;
  385. StringBuilder stringBuilder = new StringBuilder(num4);
  386. USB.SetupDiGetDeviceInstanceId(deviceInfoSet, ref sP_DEVINFO_DATA, stringBuilder, num4, out num2);
  387. result = stringBuilder.ToString();
  388. IL_CB:
  389. Marshal.FreeHGlobal(intPtr);
  390. USB.SetupDiDestroyDeviceInfoList(deviceInfoSet);
  391. }
  392. return result;
  393. }
  394.  
  395. // Token: 0x040000FB RID: 251
  396. private const int IOCTL_STORAGE_GET_DEVICE_NUMBER = 2953344;
  397.  
  398. // Token: 0x040000FC RID: 252
  399. private const string GUID_DEVINTERFACE_DISK = "53f56307-b6bf-11d0-94f2-00a0c91efb8b";
  400.  
  401. // Token: 0x040000FD RID: 253
  402. private const int GENERIC_WRITE = 1073741824;
  403.  
  404. // Token: 0x040000FE RID: 254
  405. private const int FILE_SHARE_READ = 1;
  406.  
  407. // Token: 0x040000FF RID: 255
  408. private const int FILE_SHARE_WRITE = 2;
  409.  
  410. // Token: 0x04000100 RID: 256
  411. private const int OPEN_EXISTING = 3;
  412.  
  413. // Token: 0x04000101 RID: 257
  414. private const int INVALID_HANDLE_VALUE = -1;
  415.  
  416. // Token: 0x04000102 RID: 258
  417. private const int IOCTL_GET_HCD_DRIVERKEY_NAME = 2229284;
  418.  
  419. // Token: 0x04000103 RID: 259
  420. private const int IOCTL_USB_GET_ROOT_HUB_NAME = 2229256;
  421.  
  422. // Token: 0x04000104 RID: 260
  423. private const int IOCTL_USB_GET_NODE_INFORMATION = 2229256;
  424.  
  425. // Token: 0x04000105 RID: 261
  426. private const int IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX = 2229320;
  427.  
  428. // Token: 0x04000106 RID: 262
  429. private const int IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION = 2229264;
  430.  
  431. // Token: 0x04000107 RID: 263
  432. private const int IOCTL_USB_GET_NODE_CONNECTION_NAME = 2229268;
  433.  
  434. // Token: 0x04000108 RID: 264
  435. private const int IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME = 2229280;
  436.  
  437. // Token: 0x04000109 RID: 265
  438. private const int USB_DEVICE_DESCRIPTOR_TYPE = 1;
  439.  
  440. // Token: 0x0400010A RID: 266
  441. private const int USB_STRING_DESCRIPTOR_TYPE = 3;
  442.  
  443. // Token: 0x0400010B RID: 267
  444. private const int BUFFER_SIZE = 2048;
  445.  
  446. // Token: 0x0400010C RID: 268
  447. private const int MAXIMUM_USB_STRING_LENGTH = 255;
  448.  
  449. // Token: 0x0400010D RID: 269
  450. private const string GUID_DEVINTERFACE_HUBCONTROLLER = "3abf6f2d-71c4-462a-8a92-1e6861e6af27";
  451.  
  452. // Token: 0x0400010E RID: 270
  453. private const string REGSTR_KEY_USB = "USB";
  454.  
  455. // Token: 0x0400010F RID: 271
  456. private const int DIGCF_PRESENT = 2;
  457.  
  458. // Token: 0x04000110 RID: 272
  459. private const int DIGCF_ALLCLASSES = 4;
  460.  
  461. // Token: 0x04000111 RID: 273
  462. private const int DIGCF_DEVICEINTERFACE = 16;
  463.  
  464. // Token: 0x04000112 RID: 274
  465. private const int SPDRP_DRIVER = 9;
  466.  
  467. // Token: 0x04000113 RID: 275
  468. private const int SPDRP_DEVICEDESC = 0;
  469.  
  470. // Token: 0x04000114 RID: 276
  471. private const int REG_SZ = 1;
  472.  
  473. // Token: 0x0200002A RID: 42
  474. private struct STORAGE_DEVICE_NUMBER
  475. {
  476. // Token: 0x04000115 RID: 277
  477. public int DeviceType;
  478.  
  479. // Token: 0x04000116 RID: 278
  480. public int DeviceNumber;
  481.  
  482. // Token: 0x04000117 RID: 279
  483. public int PartitionNumber;
  484. }
  485.  
  486. // Token: 0x0200002B RID: 43
  487. private enum USB_HUB_NODE
  488. {
  489. // Token: 0x04000119 RID: 281
  490. UsbHub,
  491. // Token: 0x0400011A RID: 282
  492. UsbMIParent
  493. }
  494.  
  495. // Token: 0x0200002C RID: 44
  496. private enum USB_CONNECTION_STATUS
  497. {
  498. // Token: 0x0400011C RID: 284
  499. NoDeviceConnected,
  500. // Token: 0x0400011D RID: 285
  501. DeviceConnected,
  502. // Token: 0x0400011E RID: 286
  503. DeviceFailedEnumeration,
  504. // Token: 0x0400011F RID: 287
  505. DeviceGeneralFailure,
  506. // Token: 0x04000120 RID: 288
  507. DeviceCausedOvercurrent,
  508. // Token: 0x04000121 RID: 289
  509. DeviceNotEnoughPower,
  510. // Token: 0x04000122 RID: 290
  511. DeviceNotEnoughBandwidth,
  512. // Token: 0x04000123 RID: 291
  513. DeviceHubNestedTooDeeply,
  514. // Token: 0x04000124 RID: 292
  515. DeviceInLegacyHub
  516. }
  517.  
  518. // Token: 0x0200002D RID: 45
  519. private enum USB_DEVICE_SPEED : byte
  520. {
  521. // Token: 0x04000126 RID: 294
  522. UsbLowSpeed,
  523. // Token: 0x04000127 RID: 295
  524. UsbFullSpeed,
  525. // Token: 0x04000128 RID: 296
  526. UsbHighSpeed
  527. }
  528.  
  529. // Token: 0x0200002E RID: 46
  530. private struct SP_DEVINFO_DATA
  531. {
  532. // Token: 0x04000129 RID: 297
  533. public int cbSize;
  534.  
  535. // Token: 0x0400012A RID: 298
  536. public Guid ClassGuid;
  537.  
  538. // Token: 0x0400012B RID: 299
  539. public int DevInst;
  540.  
  541. // Token: 0x0400012C RID: 300
  542. public IntPtr Reserved;
  543. }
  544.  
  545. // Token: 0x0200002F RID: 47
  546. private struct SP_DEVICE_INTERFACE_DATA
  547. {
  548. // Token: 0x0400012D RID: 301
  549. public int cbSize;
  550.  
  551. // Token: 0x0400012E RID: 302
  552. public Guid InterfaceClassGuid;
  553.  
  554. // Token: 0x0400012F RID: 303
  555. public int Flags;
  556.  
  557. // Token: 0x04000130 RID: 304
  558. public IntPtr Reserved;
  559. }
  560.  
  561. // Token: 0x02000030 RID: 48
  562. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  563. private struct SP_DEVICE_INTERFACE_DETAIL_DATA
  564. {
  565. // Token: 0x04000131 RID: 305
  566. public int cbSize;
  567.  
  568. // Token: 0x04000132 RID: 306
  569. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2048)]
  570. public string DevicePath;
  571. }
  572.  
  573. // Token: 0x02000031 RID: 49
  574. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  575. private struct USB_HCD_DRIVERKEY_NAME
  576. {
  577. // Token: 0x04000133 RID: 307
  578. public int ActualLength;
  579.  
  580. // Token: 0x04000134 RID: 308
  581. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2048)]
  582. public string DriverKeyName;
  583. }
  584.  
  585. // Token: 0x02000032 RID: 50
  586. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  587. private struct USB_ROOT_HUB_NAME
  588. {
  589. // Token: 0x04000135 RID: 309
  590. public int ActualLength;
  591.  
  592. // Token: 0x04000136 RID: 310
  593. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2048)]
  594. public string RootHubName;
  595. }
  596.  
  597. // Token: 0x02000033 RID: 51
  598. [StructLayout(LayoutKind.Sequential, Pack = 1)]
  599. private struct USB_HUB_DESCRIPTOR
  600. {
  601. // Token: 0x04000137 RID: 311
  602. public byte bDescriptorLength;
  603.  
  604. // Token: 0x04000138 RID: 312
  605. public byte bDescriptorType;
  606.  
  607. // Token: 0x04000139 RID: 313
  608. public byte bNumberOfPorts;
  609.  
  610. // Token: 0x0400013A RID: 314
  611. public short wHubCharacteristics;
  612.  
  613. // Token: 0x0400013B RID: 315
  614. public byte bPowerOnToPowerGood;
  615.  
  616. // Token: 0x0400013C RID: 316
  617. public byte bHubControlCurrent;
  618.  
  619. // Token: 0x0400013D RID: 317
  620. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
  621. public byte[] bRemoveAndPowerMask;
  622. }
  623.  
  624. // Token: 0x02000034 RID: 52
  625. private struct USB_HUB_INFORMATION
  626. {
  627. // Token: 0x0400013E RID: 318
  628. public USB.USB_HUB_DESCRIPTOR HubDescriptor;
  629.  
  630. // Token: 0x0400013F RID: 319
  631. public byte HubIsBusPowered;
  632. }
  633.  
  634. // Token: 0x02000035 RID: 53
  635. private struct USB_NODE_INFORMATION
  636. {
  637. // Token: 0x04000140 RID: 320
  638. public int NodeType;
  639.  
  640. // Token: 0x04000141 RID: 321
  641. public USB.USB_HUB_INFORMATION HubInformation;
  642. }
  643.  
  644. // Token: 0x02000036 RID: 54
  645. [StructLayout(LayoutKind.Sequential, Pack = 1)]
  646. private struct USB_NODE_CONNECTION_INFORMATION_EX
  647. {
  648. // Token: 0x04000142 RID: 322
  649. public int ConnectionIndex;
  650.  
  651. // Token: 0x04000143 RID: 323
  652. public USB.USB_DEVICE_DESCRIPTOR DeviceDescriptor;
  653.  
  654. // Token: 0x04000144 RID: 324
  655. public byte CurrentConfigurationValue;
  656.  
  657. // Token: 0x04000145 RID: 325
  658. public byte Speed;
  659.  
  660. // Token: 0x04000146 RID: 326
  661. public byte DeviceIsHub;
  662.  
  663. // Token: 0x04000147 RID: 327
  664. public short DeviceAddress;
  665.  
  666. // Token: 0x04000148 RID: 328
  667. public int NumberOfOpenPipes;
  668.  
  669. // Token: 0x04000149 RID: 329
  670. public int ConnectionStatus;
  671. }
  672.  
  673. // Token: 0x02000037 RID: 55
  674. [StructLayout(LayoutKind.Sequential, Pack = 1)]
  675. internal struct USB_DEVICE_DESCRIPTOR
  676. {
  677. // Token: 0x0400014A RID: 330
  678. public byte bLength;
  679.  
  680. // Token: 0x0400014B RID: 331
  681. public byte bDescriptorType;
  682.  
  683. // Token: 0x0400014C RID: 332
  684. public short bcdUSB;
  685.  
  686. // Token: 0x0400014D RID: 333
  687. public byte bDeviceClass;
  688.  
  689. // Token: 0x0400014E RID: 334
  690. public byte bDeviceSubClass;
  691.  
  692. // Token: 0x0400014F RID: 335
  693. public byte bDeviceProtocol;
  694.  
  695. // Token: 0x04000150 RID: 336
  696. public byte bMaxPacketSize0;
  697.  
  698. // Token: 0x04000151 RID: 337
  699. public short idVendor;
  700.  
  701. // Token: 0x04000152 RID: 338
  702. public short idProduct;
  703.  
  704. // Token: 0x04000153 RID: 339
  705. public short bcdDevice;
  706.  
  707. // Token: 0x04000154 RID: 340
  708. public byte iManufacturer;
  709.  
  710. // Token: 0x04000155 RID: 341
  711. public byte iProduct;
  712.  
  713. // Token: 0x04000156 RID: 342
  714. public byte iSerialNumber;
  715.  
  716. // Token: 0x04000157 RID: 343
  717. public byte bNumConfigurations;
  718. }
  719.  
  720. // Token: 0x02000038 RID: 56
  721. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  722. private struct USB_STRING_DESCRIPTOR
  723. {
  724. // Token: 0x04000158 RID: 344
  725. public byte bLength;
  726.  
  727. // Token: 0x04000159 RID: 345
  728. public byte bDescriptorType;
  729.  
  730. // Token: 0x0400015A RID: 346
  731. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
  732. public string bString;
  733. }
  734.  
  735. // Token: 0x02000039 RID: 57
  736. private struct USB_SETUP_PACKET
  737. {
  738. // Token: 0x0400015B RID: 347
  739. public byte bmRequest;
  740.  
  741. // Token: 0x0400015C RID: 348
  742. public byte bRequest;
  743.  
  744. // Token: 0x0400015D RID: 349
  745. public short wValue;
  746.  
  747. // Token: 0x0400015E RID: 350
  748. public short wIndex;
  749.  
  750. // Token: 0x0400015F RID: 351
  751. public short wLength;
  752. }
  753.  
  754. // Token: 0x0200003A RID: 58
  755. private struct USB_DESCRIPTOR_REQUEST
  756. {
  757. // Token: 0x04000160 RID: 352
  758. public int ConnectionIndex;
  759.  
  760. // Token: 0x04000161 RID: 353
  761. public USB.USB_SETUP_PACKET SetupPacket;
  762. }
  763.  
  764. // Token: 0x0200003B RID: 59
  765. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  766. private struct USB_NODE_CONNECTION_NAME
  767. {
  768. // Token: 0x04000162 RID: 354
  769. public int ConnectionIndex;
  770.  
  771. // Token: 0x04000163 RID: 355
  772. public int ActualLength;
  773.  
  774. // Token: 0x04000164 RID: 356
  775. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2048)]
  776. public string NodeName;
  777. }
  778.  
  779. // Token: 0x0200003C RID: 60
  780. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  781. private struct USB_NODE_CONNECTION_DRIVERKEY_NAME
  782. {
  783. // Token: 0x04000165 RID: 357
  784. public int ConnectionIndex;
  785.  
  786. // Token: 0x04000166 RID: 358
  787. public int ActualLength;
  788.  
  789. // Token: 0x04000167 RID: 359
  790. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2048)]
  791. public string DriverKeyName;
  792. }
  793.  
  794. // Token: 0x0200003D RID: 61
  795. public class USBController
  796. {
  797. // Token: 0x060002B8 RID: 696 RVA: 0x000103FE File Offset: 0x0000E5FE
  798. public USBController()
  799. {
  800. this.ControllerIndex = 0;
  801. this.ControllerDevicePath = "";
  802. this.ControllerDeviceDesc = "";
  803. this.ControllerDriverKeyName = "";
  804. }
  805.  
  806. // Token: 0x1700015D RID: 349
  807. // (get) Token: 0x060002B9 RID: 697 RVA: 0x0001042E File Offset: 0x0000E62E
  808. public int Index
  809. {
  810. get
  811. {
  812. return this.ControllerIndex;
  813. }
  814. }
  815.  
  816. // Token: 0x1700015E RID: 350
  817. // (get) Token: 0x060002BA RID: 698 RVA: 0x00010436 File Offset: 0x0000E636
  818. public string DevicePath
  819. {
  820. get
  821. {
  822. return this.ControllerDevicePath;
  823. }
  824. }
  825.  
  826. // Token: 0x1700015F RID: 351
  827. // (get) Token: 0x060002BB RID: 699 RVA: 0x0001043E File Offset: 0x0000E63E
  828. public string DriverKeyName
  829. {
  830. get
  831. {
  832. return this.ControllerDriverKeyName;
  833. }
  834. }
  835.  
  836. // Token: 0x17000160 RID: 352
  837. // (get) Token: 0x060002BC RID: 700 RVA: 0x00010446 File Offset: 0x0000E646
  838. public string Name
  839. {
  840. get
  841. {
  842. return this.ControllerDeviceDesc;
  843. }
  844. }
  845.  
  846. // Token: 0x060002BD RID: 701 RVA: 0x00010450 File Offset: 0x0000E650
  847. public USB.USBHub GetRootHub()
  848. {
  849. USB.USBHub uSBHub = new USB.USBHub();
  850. uSBHub.HubIsRootHub = true;
  851. uSBHub.HubDeviceDesc = "Root Hub";
  852. IntPtr intPtr = USB.CreateFile(this.ControllerDevicePath, 1073741824, 2, IntPtr.Zero, 3, 0, IntPtr.Zero);
  853. if (intPtr.ToInt32() != -1)
  854. {
  855. int num = Marshal.SizeOf(default(USB.USB_ROOT_HUB_NAME));
  856. IntPtr intPtr2 = Marshal.AllocHGlobal(num);
  857. int num2;
  858. if (USB.DeviceIoControl(intPtr, 2229256, intPtr2, num, intPtr2, num, out num2, IntPtr.Zero))
  859. {
  860. uSBHub.HubDevicePath = "\\\\.\\" + ((USB.USB_ROOT_HUB_NAME)Marshal.PtrToStructure(intPtr2, typeof(USB.USB_ROOT_HUB_NAME))).RootHubName;
  861. }
  862. IntPtr intPtr3 = USB.CreateFile(uSBHub.HubDevicePath, 1073741824, 2, IntPtr.Zero, 3, 0, IntPtr.Zero);
  863. if (intPtr3.ToInt32() != -1)
  864. {
  865. USB.USB_NODE_INFORMATION uSB_NODE_INFORMATION = default(USB.USB_NODE_INFORMATION);
  866. uSB_NODE_INFORMATION.NodeType = 0;
  867. num = Marshal.SizeOf(uSB_NODE_INFORMATION);
  868. IntPtr intPtr4 = Marshal.AllocHGlobal(num);
  869. Marshal.StructureToPtr(uSB_NODE_INFORMATION, intPtr4, true);
  870. if (USB.DeviceIoControl(intPtr3, 2229256, intPtr4, num, intPtr4, num, out num2, IntPtr.Zero))
  871. {
  872. uSB_NODE_INFORMATION = (USB.USB_NODE_INFORMATION)Marshal.PtrToStructure(intPtr4, typeof(USB.USB_NODE_INFORMATION));
  873. uSBHub.HubIsBusPowered = Convert.ToBoolean(uSB_NODE_INFORMATION.HubInformation.HubIsBusPowered);
  874. uSBHub.HubPortCount = (int)uSB_NODE_INFORMATION.HubInformation.HubDescriptor.bNumberOfPorts;
  875. }
  876. Marshal.FreeHGlobal(intPtr4);
  877. USB.CloseHandle(intPtr3);
  878. }
  879. Marshal.FreeHGlobal(intPtr2);
  880. USB.CloseHandle(intPtr);
  881. }
  882. return uSBHub;
  883. }
  884.  
  885. // Token: 0x04000168 RID: 360
  886. internal int ControllerIndex;
  887.  
  888. // Token: 0x04000169 RID: 361
  889. internal string ControllerDriverKeyName;
  890.  
  891. // Token: 0x0400016A RID: 362
  892. internal string ControllerDevicePath;
  893.  
  894. // Token: 0x0400016B RID: 363
  895. internal string ControllerDeviceDesc;
  896. }
  897.  
  898. // Token: 0x0200003E RID: 62
  899. public class USBHub
  900. {
  901. // Token: 0x060002BE RID: 702 RVA: 0x000105EC File Offset: 0x0000E7EC
  902. public USBHub()
  903. {
  904. this.HubPortCount = 0;
  905. this.HubDevicePath = "";
  906. this.HubDeviceDesc = "";
  907. this.HubDriverKey = "";
  908. this.HubIsBusPowered = false;
  909. this.HubIsRootHub = false;
  910. this.HubManufacturer = "";
  911. this.HubProduct = "";
  912. this.HubSerialNumber = "";
  913. this.HubInstanceID = "";
  914. }
  915.  
  916. // Token: 0x17000161 RID: 353
  917. // (get) Token: 0x060002BF RID: 703 RVA: 0x00010661 File Offset: 0x0000E861
  918. public int PortCount
  919. {
  920. get
  921. {
  922. return this.HubPortCount;
  923. }
  924. }
  925.  
  926. // Token: 0x17000162 RID: 354
  927. // (get) Token: 0x060002C0 RID: 704 RVA: 0x00010669 File Offset: 0x0000E869
  928. public string DevicePath
  929. {
  930. get
  931. {
  932. return this.HubDevicePath;
  933. }
  934. }
  935.  
  936. // Token: 0x17000163 RID: 355
  937. // (get) Token: 0x060002C1 RID: 705 RVA: 0x00010671 File Offset: 0x0000E871
  938. public string DriverKey
  939. {
  940. get
  941. {
  942. return this.HubDriverKey;
  943. }
  944. }
  945.  
  946. // Token: 0x17000164 RID: 356
  947. // (get) Token: 0x060002C2 RID: 706 RVA: 0x00010679 File Offset: 0x0000E879
  948. public string Name
  949. {
  950. get
  951. {
  952. return this.HubDeviceDesc;
  953. }
  954. }
  955.  
  956. // Token: 0x17000165 RID: 357
  957. // (get) Token: 0x060002C3 RID: 707 RVA: 0x00010681 File Offset: 0x0000E881
  958. public string InstanceID
  959. {
  960. get
  961. {
  962. return this.HubInstanceID;
  963. }
  964. }
  965.  
  966. // Token: 0x17000166 RID: 358
  967. // (get) Token: 0x060002C4 RID: 708 RVA: 0x00010689 File Offset: 0x0000E889
  968. public bool IsBusPowered
  969. {
  970. get
  971. {
  972. return this.HubIsBusPowered;
  973. }
  974. }
  975.  
  976. // Token: 0x17000167 RID: 359
  977. // (get) Token: 0x060002C5 RID: 709 RVA: 0x00010691 File Offset: 0x0000E891
  978. public bool IsRootHub
  979. {
  980. get
  981. {
  982. return this.HubIsRootHub;
  983. }
  984. }
  985.  
  986. // Token: 0x17000168 RID: 360
  987. // (get) Token: 0x060002C6 RID: 710 RVA: 0x00010699 File Offset: 0x0000E899
  988. public string Manufacturer
  989. {
  990. get
  991. {
  992. return this.HubManufacturer;
  993. }
  994. }
  995.  
  996. // Token: 0x17000169 RID: 361
  997. // (get) Token: 0x060002C7 RID: 711 RVA: 0x000106A1 File Offset: 0x0000E8A1
  998. public string Product
  999. {
  1000. get
  1001. {
  1002. return this.HubProduct;
  1003. }
  1004. }
  1005.  
  1006. // Token: 0x1700016A RID: 362
  1007. // (get) Token: 0x060002C8 RID: 712 RVA: 0x000106A9 File Offset: 0x0000E8A9
  1008. public string SerialNumber
  1009. {
  1010. get
  1011. {
  1012. return this.HubSerialNumber;
  1013. }
  1014. }
  1015.  
  1016. // Token: 0x060002C9 RID: 713 RVA: 0x000106B4 File Offset: 0x0000E8B4
  1017. public ReadOnlyCollection<USB.USBPort> GetPorts()
  1018. {
  1019. List<USB.USBPort> list = new List<USB.USBPort>();
  1020. IntPtr intPtr = USB.CreateFile(this.HubDevicePath, 1073741824, 2, IntPtr.Zero, 3, 0, IntPtr.Zero);
  1021. if (intPtr.ToInt32() != -1)
  1022. {
  1023. int num = Marshal.SizeOf(typeof(USB.USB_NODE_CONNECTION_INFORMATION_EX));
  1024. IntPtr intPtr2 = Marshal.AllocHGlobal(num);
  1025. for (int i = 1; i <= this.HubPortCount; i++)
  1026. {
  1027. Marshal.StructureToPtr(new USB.USB_NODE_CONNECTION_INFORMATION_EX
  1028. {
  1029. ConnectionIndex = i
  1030. }, intPtr2, true);
  1031. int num2;
  1032. if (USB.DeviceIoControl(intPtr, 2229320, intPtr2, num, intPtr2, num, out num2, IntPtr.Zero))
  1033. {
  1034. USB.USB_NODE_CONNECTION_INFORMATION_EX uSB_NODE_CONNECTION_INFORMATION_EX = (USB.USB_NODE_CONNECTION_INFORMATION_EX)Marshal.PtrToStructure(intPtr2, typeof(USB.USB_NODE_CONNECTION_INFORMATION_EX));
  1035. USB.USBPort uSBPort = new USB.USBPort();
  1036. uSBPort.PortPortNumber = i;
  1037. uSBPort.PortHubDevicePath = this.HubDevicePath;
  1038. USB.USB_CONNECTION_STATUS connectionStatus = (USB.USB_CONNECTION_STATUS)uSB_NODE_CONNECTION_INFORMATION_EX.ConnectionStatus;
  1039. uSBPort.PortStatus = connectionStatus.ToString();
  1040. USB.USB_DEVICE_SPEED speed = (USB.USB_DEVICE_SPEED)uSB_NODE_CONNECTION_INFORMATION_EX.Speed;
  1041. uSBPort.PortSpeed = speed.ToString();
  1042. uSBPort.PortIsDeviceConnected = (uSB_NODE_CONNECTION_INFORMATION_EX.ConnectionStatus == 1);
  1043. uSBPort.PortIsHub = Convert.ToBoolean(uSB_NODE_CONNECTION_INFORMATION_EX.DeviceIsHub);
  1044. uSBPort.PortDeviceDescriptor = uSB_NODE_CONNECTION_INFORMATION_EX.DeviceDescriptor;
  1045. list.Add(uSBPort);
  1046. }
  1047. }
  1048. Marshal.FreeHGlobal(intPtr2);
  1049. USB.CloseHandle(intPtr);
  1050. }
  1051. return new ReadOnlyCollection<USB.USBPort>(list);
  1052. }
  1053.  
  1054. // Token: 0x0400016C RID: 364
  1055. internal int HubPortCount;
  1056.  
  1057. // Token: 0x0400016D RID: 365
  1058. internal string HubDriverKey;
  1059.  
  1060. // Token: 0x0400016E RID: 366
  1061. internal string HubDevicePath;
  1062.  
  1063. // Token: 0x0400016F RID: 367
  1064. internal string HubDeviceDesc;
  1065.  
  1066. // Token: 0x04000170 RID: 368
  1067. internal string HubManufacturer;
  1068.  
  1069. // Token: 0x04000171 RID: 369
  1070. internal string HubProduct;
  1071.  
  1072. // Token: 0x04000172 RID: 370
  1073. internal string HubSerialNumber;
  1074.  
  1075. // Token: 0x04000173 RID: 371
  1076. internal string HubInstanceID;
  1077.  
  1078. // Token: 0x04000174 RID: 372
  1079. internal bool HubIsBusPowered;
  1080.  
  1081. // Token: 0x04000175 RID: 373
  1082. internal bool HubIsRootHub;
  1083. }
  1084.  
  1085. // Token: 0x0200003F RID: 63
  1086. public class USBPort
  1087. {
  1088. // Token: 0x060002CA RID: 714 RVA: 0x00010817 File Offset: 0x0000EA17
  1089. public USBPort()
  1090. {
  1091. this.PortPortNumber = 0;
  1092. this.PortStatus = "";
  1093. this.PortHubDevicePath = "";
  1094. this.PortSpeed = "";
  1095. this.PortIsHub = false;
  1096. this.PortIsDeviceConnected = false;
  1097. }
  1098.  
  1099. // Token: 0x1700016B RID: 363
  1100. // (get) Token: 0x060002CB RID: 715 RVA: 0x00010855 File Offset: 0x0000EA55
  1101. public int PortNumber
  1102. {
  1103. get
  1104. {
  1105. return this.PortPortNumber;
  1106. }
  1107. }
  1108.  
  1109. // Token: 0x1700016C RID: 364
  1110. // (get) Token: 0x060002CC RID: 716 RVA: 0x0001085D File Offset: 0x0000EA5D
  1111. public string HubDevicePath
  1112. {
  1113. get
  1114. {
  1115. return this.PortHubDevicePath;
  1116. }
  1117. }
  1118.  
  1119. // Token: 0x1700016D RID: 365
  1120. // (get) Token: 0x060002CD RID: 717 RVA: 0x00010865 File Offset: 0x0000EA65
  1121. public string Status
  1122. {
  1123. get
  1124. {
  1125. return this.PortStatus;
  1126. }
  1127. }
  1128.  
  1129. // Token: 0x1700016E RID: 366
  1130. // (get) Token: 0x060002CE RID: 718 RVA: 0x0001086D File Offset: 0x0000EA6D
  1131. public string Speed
  1132. {
  1133. get
  1134. {
  1135. return this.PortSpeed;
  1136. }
  1137. }
  1138.  
  1139. // Token: 0x1700016F RID: 367
  1140. // (get) Token: 0x060002CF RID: 719 RVA: 0x00010875 File Offset: 0x0000EA75
  1141. public bool IsHub
  1142. {
  1143. get
  1144. {
  1145. return this.PortIsHub;
  1146. }
  1147. }
  1148.  
  1149. // Token: 0x17000170 RID: 368
  1150. // (get) Token: 0x060002D0 RID: 720 RVA: 0x0001087D File Offset: 0x0000EA7D
  1151. public bool IsDeviceConnected
  1152. {
  1153. get
  1154. {
  1155. return this.PortIsDeviceConnected;
  1156. }
  1157. }
  1158.  
  1159. // Token: 0x060002D1 RID: 721 RVA: 0x00010888 File Offset: 0x0000EA88
  1160. public USB.USBDevice GetDevice()
  1161. {
  1162. if (!this.PortIsDeviceConnected)
  1163. {
  1164. return null;
  1165. }
  1166. USB.USBDevice uSBDevice = new USB.USBDevice();
  1167. uSBDevice.DevicePortNumber = this.PortPortNumber;
  1168. uSBDevice.DeviceHubDevicePath = this.PortHubDevicePath;
  1169. uSBDevice.DeviceDescriptor = this.PortDeviceDescriptor;
  1170. IntPtr intPtr = USB.CreateFile(this.PortHubDevicePath, 1073741824, 2, IntPtr.Zero, 3, 0, IntPtr.Zero);
  1171. if (intPtr.ToInt32() != -1)
  1172. {
  1173. int num = 2048;
  1174. string s = new string('\0', 2048 / Marshal.SystemDefaultCharSize);
  1175. int num2;
  1176. if (this.PortDeviceDescriptor.iManufacturer > 0)
  1177. {
  1178. USB.USB_DESCRIPTOR_REQUEST uSB_DESCRIPTOR_REQUEST = default(USB.USB_DESCRIPTOR_REQUEST);
  1179. uSB_DESCRIPTOR_REQUEST.ConnectionIndex = this.PortPortNumber;
  1180. uSB_DESCRIPTOR_REQUEST.SetupPacket.wValue = (short)(768 + (int)this.PortDeviceDescriptor.iManufacturer);
  1181. uSB_DESCRIPTOR_REQUEST.SetupPacket.wLength = (short)(num - Marshal.SizeOf(uSB_DESCRIPTOR_REQUEST));
  1182. uSB_DESCRIPTOR_REQUEST.SetupPacket.wIndex = 1033;
  1183. IntPtr intPtr2 = Marshal.StringToHGlobalAuto(s);
  1184. Marshal.StructureToPtr(uSB_DESCRIPTOR_REQUEST, intPtr2, true);
  1185. if (USB.DeviceIoControl(intPtr, 2229264, intPtr2, num, intPtr2, num, out num2, IntPtr.Zero))
  1186. {
  1187. IntPtr ptr = new IntPtr(intPtr2.ToInt32() + Marshal.SizeOf(uSB_DESCRIPTOR_REQUEST));
  1188. uSBDevice.DeviceManufacturer = ((USB.USB_STRING_DESCRIPTOR)Marshal.PtrToStructure(ptr, typeof(USB.USB_STRING_DESCRIPTOR))).bString;
  1189. }
  1190. Marshal.FreeHGlobal(intPtr2);
  1191. }
  1192. if (this.PortDeviceDescriptor.iProduct > 0)
  1193. {
  1194. USB.USB_DESCRIPTOR_REQUEST uSB_DESCRIPTOR_REQUEST2 = default(USB.USB_DESCRIPTOR_REQUEST);
  1195. uSB_DESCRIPTOR_REQUEST2.ConnectionIndex = this.PortPortNumber;
  1196. uSB_DESCRIPTOR_REQUEST2.SetupPacket.wValue = (short)(768 + (int)this.PortDeviceDescriptor.iProduct);
  1197. uSB_DESCRIPTOR_REQUEST2.SetupPacket.wLength = (short)(num - Marshal.SizeOf(uSB_DESCRIPTOR_REQUEST2));
  1198. uSB_DESCRIPTOR_REQUEST2.SetupPacket.wIndex = 1033;
  1199. IntPtr intPtr3 = Marshal.StringToHGlobalAuto(s);
  1200. Marshal.StructureToPtr(uSB_DESCRIPTOR_REQUEST2, intPtr3, true);
  1201. if (USB.DeviceIoControl(intPtr, 2229264, intPtr3, num, intPtr3, num, out num2, IntPtr.Zero))
  1202. {
  1203. IntPtr ptr2 = new IntPtr(intPtr3.ToInt32() + Marshal.SizeOf(uSB_DESCRIPTOR_REQUEST2));
  1204. uSBDevice.DeviceProduct = ((USB.USB_STRING_DESCRIPTOR)Marshal.PtrToStructure(ptr2, typeof(USB.USB_STRING_DESCRIPTOR))).bString;
  1205. }
  1206. Marshal.FreeHGlobal(intPtr3);
  1207. }
  1208. if (this.PortDeviceDescriptor.iSerialNumber > 0)
  1209. {
  1210. USB.USB_DESCRIPTOR_REQUEST uSB_DESCRIPTOR_REQUEST3 = default(USB.USB_DESCRIPTOR_REQUEST);
  1211. uSB_DESCRIPTOR_REQUEST3.ConnectionIndex = this.PortPortNumber;
  1212. uSB_DESCRIPTOR_REQUEST3.SetupPacket.wValue = (short)(768 + (int)this.PortDeviceDescriptor.iSerialNumber);
  1213. uSB_DESCRIPTOR_REQUEST3.SetupPacket.wLength = (short)(num - Marshal.SizeOf(uSB_DESCRIPTOR_REQUEST3));
  1214. uSB_DESCRIPTOR_REQUEST3.SetupPacket.wIndex = 1033;
  1215. IntPtr intPtr4 = Marshal.StringToHGlobalAuto(s);
  1216. Marshal.StructureToPtr(uSB_DESCRIPTOR_REQUEST3, intPtr4, true);
  1217. if (USB.DeviceIoControl(intPtr, 2229264, intPtr4, num, intPtr4, num, out num2, IntPtr.Zero))
  1218. {
  1219. IntPtr ptr3 = new IntPtr(intPtr4.ToInt32() + Marshal.SizeOf(uSB_DESCRIPTOR_REQUEST3));
  1220. uSBDevice.DeviceSerialNumber = ((USB.USB_STRING_DESCRIPTOR)Marshal.PtrToStructure(ptr3, typeof(USB.USB_STRING_DESCRIPTOR))).bString;
  1221. }
  1222. Marshal.FreeHGlobal(intPtr4);
  1223. }
  1224. USB.USB_NODE_CONNECTION_DRIVERKEY_NAME uSB_NODE_CONNECTION_DRIVERKEY_NAME = default(USB.USB_NODE_CONNECTION_DRIVERKEY_NAME);
  1225. uSB_NODE_CONNECTION_DRIVERKEY_NAME.ConnectionIndex = this.PortPortNumber;
  1226. num = Marshal.SizeOf(uSB_NODE_CONNECTION_DRIVERKEY_NAME);
  1227. IntPtr intPtr5 = Marshal.AllocHGlobal(num);
  1228. Marshal.StructureToPtr(uSB_NODE_CONNECTION_DRIVERKEY_NAME, intPtr5, true);
  1229. if (USB.DeviceIoControl(intPtr, 2229280, intPtr5, num, intPtr5, num, out num2, IntPtr.Zero))
  1230. {
  1231. uSBDevice.DeviceDriverKey = ((USB.USB_NODE_CONNECTION_DRIVERKEY_NAME)Marshal.PtrToStructure(intPtr5, typeof(USB.USB_NODE_CONNECTION_DRIVERKEY_NAME))).DriverKeyName;
  1232. uSBDevice.DeviceName = USB.GetDescriptionByKeyName(uSBDevice.DeviceDriverKey);
  1233. uSBDevice.DeviceInstanceID = USB.GetInstanceIDByKeyName(uSBDevice.DeviceDriverKey);
  1234. }
  1235. Marshal.FreeHGlobal(intPtr5);
  1236. USB.CloseHandle(intPtr);
  1237. }
  1238. return uSBDevice;
  1239. }
  1240.  
  1241. // Token: 0x060002D2 RID: 722 RVA: 0x00010C74 File Offset: 0x0000EE74
  1242. public USB.USBHub GetHub()
  1243. {
  1244. if (!this.PortIsHub)
  1245. {
  1246. return null;
  1247. }
  1248. USB.USBHub uSBHub = new USB.USBHub();
  1249. uSBHub.HubIsRootHub = false;
  1250. uSBHub.HubDeviceDesc = "External Hub";
  1251. IntPtr intPtr = USB.CreateFile(this.PortHubDevicePath, 1073741824, 2, IntPtr.Zero, 3, 0, IntPtr.Zero);
  1252. if (intPtr.ToInt32() != -1)
  1253. {
  1254. USB.USB_NODE_CONNECTION_NAME uSB_NODE_CONNECTION_NAME = default(USB.USB_NODE_CONNECTION_NAME);
  1255. uSB_NODE_CONNECTION_NAME.ConnectionIndex = this.PortPortNumber;
  1256. int num = Marshal.SizeOf(uSB_NODE_CONNECTION_NAME);
  1257. IntPtr intPtr2 = Marshal.AllocHGlobal(num);
  1258. Marshal.StructureToPtr(uSB_NODE_CONNECTION_NAME, intPtr2, true);
  1259. int num2;
  1260. if (USB.DeviceIoControl(intPtr, 2229268, intPtr2, num, intPtr2, num, out num2, IntPtr.Zero))
  1261. {
  1262. uSBHub.HubDevicePath = "\\\\.\\" + ((USB.USB_NODE_CONNECTION_NAME)Marshal.PtrToStructure(intPtr2, typeof(USB.USB_NODE_CONNECTION_NAME))).NodeName;
  1263. }
  1264. IntPtr intPtr3 = USB.CreateFile(uSBHub.HubDevicePath, 1073741824, 2, IntPtr.Zero, 3, 0, IntPtr.Zero);
  1265. if (intPtr3.ToInt32() != -1)
  1266. {
  1267. USB.USB_NODE_INFORMATION uSB_NODE_INFORMATION = default(USB.USB_NODE_INFORMATION);
  1268. uSB_NODE_INFORMATION.NodeType = 0;
  1269. num = Marshal.SizeOf(uSB_NODE_INFORMATION);
  1270. IntPtr intPtr4 = Marshal.AllocHGlobal(num);
  1271. Marshal.StructureToPtr(uSB_NODE_INFORMATION, intPtr4, true);
  1272. if (USB.DeviceIoControl(intPtr3, 2229256, intPtr4, num, intPtr4, num, out num2, IntPtr.Zero))
  1273. {
  1274. uSB_NODE_INFORMATION = (USB.USB_NODE_INFORMATION)Marshal.PtrToStructure(intPtr4, typeof(USB.USB_NODE_INFORMATION));
  1275. uSBHub.HubIsBusPowered = Convert.ToBoolean(uSB_NODE_INFORMATION.HubInformation.HubIsBusPowered);
  1276. uSBHub.HubPortCount = (int)uSB_NODE_INFORMATION.HubInformation.HubDescriptor.bNumberOfPorts;
  1277. }
  1278. Marshal.FreeHGlobal(intPtr4);
  1279. USB.CloseHandle(intPtr3);
  1280. }
  1281. USB.USBDevice device = this.GetDevice();
  1282. uSBHub.HubInstanceID = device.DeviceInstanceID;
  1283. uSBHub.HubManufacturer = device.Manufacturer;
  1284. uSBHub.HubProduct = device.Product;
  1285. uSBHub.HubSerialNumber = device.SerialNumber;
  1286. uSBHub.HubDriverKey = device.DriverKey;
  1287. Marshal.FreeHGlobal(intPtr2);
  1288. USB.CloseHandle(intPtr);
  1289. }
  1290. return uSBHub;
  1291. }
  1292.  
  1293. // Token: 0x04000176 RID: 374
  1294. internal int PortPortNumber;
  1295.  
  1296. // Token: 0x04000177 RID: 375
  1297. internal string PortStatus;
  1298.  
  1299. // Token: 0x04000178 RID: 376
  1300. internal string PortHubDevicePath;
  1301.  
  1302. // Token: 0x04000179 RID: 377
  1303. internal string PortSpeed;
  1304.  
  1305. // Token: 0x0400017A RID: 378
  1306. internal bool PortIsHub;
  1307.  
  1308. // Token: 0x0400017B RID: 379
  1309. internal bool PortIsDeviceConnected;
  1310.  
  1311. // Token: 0x0400017C RID: 380
  1312. internal USB.USB_DEVICE_DESCRIPTOR PortDeviceDescriptor;
  1313. }
  1314.  
  1315. // Token: 0x02000040 RID: 64
  1316. public class USBDevice
  1317. {
  1318. // Token: 0x060002D3 RID: 723 RVA: 0x00010E80 File Offset: 0x0000F080
  1319. public USBDevice()
  1320. {
  1321. this.DevicePortNumber = 0;
  1322. this.DeviceHubDevicePath = "";
  1323. this.DeviceDriverKey = "";
  1324. this.DeviceManufacturer = "";
  1325. this.DeviceProduct = "Unknown USB Device";
  1326. this.DeviceSerialNumber = "";
  1327. this.DeviceName = "";
  1328. this.DeviceInstanceID = "";
  1329. }
  1330.  
  1331. // Token: 0x17000171 RID: 369
  1332. // (get) Token: 0x060002D4 RID: 724 RVA: 0x00010EE7 File Offset: 0x0000F0E7
  1333. public int PortNumber
  1334. {
  1335. get
  1336. {
  1337. return this.DevicePortNumber;
  1338. }
  1339. }
  1340.  
  1341. // Token: 0x17000172 RID: 370
  1342. // (get) Token: 0x060002D5 RID: 725 RVA: 0x00010EEF File Offset: 0x0000F0EF
  1343. public string HubDevicePath
  1344. {
  1345. get
  1346. {
  1347. return this.DeviceHubDevicePath;
  1348. }
  1349. }
  1350.  
  1351. // Token: 0x17000173 RID: 371
  1352. // (get) Token: 0x060002D6 RID: 726 RVA: 0x00010EF7 File Offset: 0x0000F0F7
  1353. public string DriverKey
  1354. {
  1355. get
  1356. {
  1357. return this.DeviceDriverKey;
  1358. }
  1359. }
  1360.  
  1361. // Token: 0x17000174 RID: 372
  1362. // (get) Token: 0x060002D7 RID: 727 RVA: 0x00010EFF File Offset: 0x0000F0FF
  1363. public string InstanceID
  1364. {
  1365. get
  1366. {
  1367. return this.DeviceInstanceID;
  1368. }
  1369. }
  1370.  
  1371. // Token: 0x17000175 RID: 373
  1372. // (get) Token: 0x060002D8 RID: 728 RVA: 0x00010F07 File Offset: 0x0000F107
  1373. public string Name
  1374. {
  1375. get
  1376. {
  1377. return this.DeviceName;
  1378. }
  1379. }
  1380.  
  1381. // Token: 0x17000176 RID: 374
  1382. // (get) Token: 0x060002D9 RID: 729 RVA: 0x00010F0F File Offset: 0x0000F10F
  1383. public string Manufacturer
  1384. {
  1385. get
  1386. {
  1387. return this.DeviceManufacturer;
  1388. }
  1389. }
  1390.  
  1391. // Token: 0x17000177 RID: 375
  1392. // (get) Token: 0x060002DA RID: 730 RVA: 0x00010F17 File Offset: 0x0000F117
  1393. public string Product
  1394. {
  1395. get
  1396. {
  1397. return this.DeviceProduct;
  1398. }
  1399. }
  1400.  
  1401. // Token: 0x17000178 RID: 376
  1402. // (get) Token: 0x060002DB RID: 731 RVA: 0x00010F1F File Offset: 0x0000F11F
  1403. public string SerialNumber
  1404. {
  1405. get
  1406. {
  1407. return this.DeviceSerialNumber;
  1408. }
  1409. }
  1410.  
  1411. // Token: 0x0400017D RID: 381
  1412. internal int DevicePortNumber;
  1413.  
  1414. // Token: 0x0400017E RID: 382
  1415. internal string DeviceDriverKey;
  1416.  
  1417. // Token: 0x0400017F RID: 383
  1418. internal string DeviceHubDevicePath;
  1419.  
  1420. // Token: 0x04000180 RID: 384
  1421. internal string DeviceInstanceID;
  1422.  
  1423. // Token: 0x04000181 RID: 385
  1424. internal string DeviceName;
  1425.  
  1426. // Token: 0x04000182 RID: 386
  1427. internal string DeviceManufacturer;
  1428.  
  1429. // Token: 0x04000183 RID: 387
  1430. internal string DeviceProduct;
  1431.  
  1432. // Token: 0x04000184 RID: 388
  1433. internal string DeviceSerialNumber;
  1434.  
  1435. // Token: 0x04000185 RID: 389
  1436. internal USB.USB_DEVICE_DESCRIPTOR DeviceDescriptor;
  1437. }
  1438. }
  1439. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement