IndiciumHelper.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Management;
  7. using System.IO;
  8. using System.Net.NetworkInformation;
  9. using System.Runtime.InteropServices;
  10. using System.Globalization;
  11. using Microsoft.Win32;
  12. namespace Optimizer
  13. {
  14. public static class IndiciumHelper
  15. {
  16. public static List<CPU> GetCPUs()
  17. {
  18. List<CPU> CPUs = new List<CPU>();
  19. CPU cpu;
  20. ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
  21. foreach (ManagementObject mo in searcher.Get())
  22. {
  23. cpu = new CPU();
  24. cpu.Name = Convert.ToString(mo.Properties["Name"].Value);
  25. cpu.L2CacheSize = ByteSize.FromKiloBytes(Convert.ToDouble(mo.Properties["L2CacheSize"].Value));
  26. cpu.L3CacheSize = ByteSize.FromKiloBytes(Convert.ToDouble(mo.Properties["L3CacheSize"].Value));
  27. cpu.Cores = Convert.ToUInt32(mo.Properties["NumberOfCores"].Value);
  28. cpu.Threads = Convert.ToUInt32(mo.Properties["ThreadCount"].Value);
  29. cpu.LogicalCpus = Convert.ToUInt32(mo.Properties["NumberOfLogicalProcessors"].Value);
  30. bool temp = Convert.ToBoolean(mo.Properties["VirtualizationFirmwareEnabled"].Value);
  31. cpu.Virtualization = (temp) ? "Yes" : "No";
  32. cpu.Stepping = Convert.ToString(mo.Properties["Description"].Value);
  33. cpu.Revision = Convert.ToString(mo.Properties["Revision"].Value);
  34. try
  35. {
  36. ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
  37. foreach (ManagementObject mo2 in searcher2.Get())
  38. {
  39. bool temp2 = Convert.ToBoolean(mo2.Properties["DataExecutionPrevention_Available"].Value);
  40. cpu.DataExecutionPrevention = (temp2) ? "Yes" : "No";
  41. }
  42. }
  43. catch { }
  44. if (string.IsNullOrEmpty(cpu.Name)) cpu.Name = GetCPUNameAlternative();
  45. CPUs.Add(cpu);
  46. }
  47. return CPUs;
  48. }
  49. private static string GetCPUNameAlternative()
  50. {
  51. using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0", false))
  52. {
  53. return key.GetValue("ProcessorNameString").ToString();
  54. }
  55. }
  56. public static List<RAM> GetRAM()
  57. {
  58. List<RAM> modules = new List<RAM>();
  59. RAM module;
  60. ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
  61. foreach (ManagementObject mo in searcher.Get())
  62. {
  63. module = new RAM();
  64. module.BankLabel = Convert.ToString(mo.Properties["BankLabel"].Value);
  65. module.Capacity = Convert.ToUInt64(mo.Properties["Capacity"].Value);
  66. module.Manufacturer = Convert.ToString(mo.Properties["Manufacturer"].Value);
  67. module.Speed = Convert.ToUInt32(mo.Properties["Speed"].Value);
  68. UInt16 memorytype = Convert.ToUInt16(mo.Properties["MemoryType"].Value);
  69. UInt16 formfactor = Convert.ToUInt16(mo.Properties["FormFactor"].Value);
  70. module.MemoryType = SanitizeMemoryType(memorytype);
  71. module.FormFactor = SanitizeFormFactor(formfactor);
  72. modules.Add(module);
  73. }
  74. return modules;
  75. }
  76. public static List<GPU> GetGPUs()
  77. {
  78. List<GPU> GPUs = new List<GPU>();
  79. GPU gpu;
  80. ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
  81. foreach (ManagementObject mo in searcher.Get())
  82. {
  83. gpu = new GPU();
  84. gpu.Name = Convert.ToString(mo.Properties["Name"].Value);
  85. gpu.Memory = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["AdapterRAM"].Value));
  86. gpu.ResolutionX = Convert.ToUInt32(mo.Properties["CurrentHorizontalResolution"].Value);
  87. gpu.ResolutionY = Convert.ToUInt32(mo.Properties["CurrentVerticalResolution"].Value);
  88. gpu.RefreshRate = Convert.ToUInt32(mo.Properties["CurrentRefreshRate"].Value);
  89. gpu.DACType = Convert.ToString(mo.Properties["AdapterDACType"].Value);
  90. UInt16 vtype = Convert.ToUInt16(mo.Properties["VideoMemoryType"].Value);
  91. gpu.VideoMemoryType = SanitizeVideoMemoryType(vtype);
  92. GPUs.Add(gpu);
  93. }
  94. return GPUs;
  95. }
  96. public static List<Motherboard> GetMotherboards()
  97. {
  98. List<Motherboard> motherboards = new List<Motherboard>();
  99. Motherboard mobo;
  100. ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
  101. foreach (ManagementObject mo in searcher.Get())
  102. {
  103. mobo = new Motherboard();
  104. mobo.Model = Convert.ToString(mo.Properties["Model"].Value);
  105. mobo.Manufacturer = Convert.ToString(mo.Properties["Manufacturer"].Value);
  106. mobo.Product = Convert.ToString(mo.Properties["Product"].Value);
  107. mobo.Version = Convert.ToString(mo.Properties["Version"].Value);
  108. try
  109. {
  110. ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_IDEController");
  111. foreach (ManagementObject mo2 in searcher2.Get())
  112. {
  113. mobo.Chipset = Convert.ToString(mo2.Properties["Description"].Value);
  114. }
  115. }
  116. catch { }
  117. try
  118. {
  119. ManagementObjectSearcher searcher3 = new ManagementObjectSearcher("SELECT * FROM Win32_IDEController");
  120. foreach (ManagementObject mo3 in searcher3.Get())
  121. {
  122. mobo.Revision = Convert.ToString(mo3.Properties["RevisionNumber"].Value);
  123. }
  124. }
  125. catch { }
  126. try
  127. {
  128. ManagementObjectSearcher searcher4 = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem");
  129. foreach (ManagementObject mo4 in searcher4.Get())
  130. {
  131. mobo.SystemModel = Convert.ToString(mo4.Properties["Model"].Value);
  132. }
  133. }
  134. catch { }
  135. ManagementObjectSearcher searcher5 = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
  136. foreach (ManagementObject mo5 in searcher5.Get())
  137. {
  138. mobo.BIOSName = Convert.ToString(mo5.Properties["Name"].Value);
  139. mobo.BIOSManufacturer = Convert.ToString(mo5.Properties["Manufacturer"].Value);
  140. mobo.BIOSVersion = Convert.ToString(mo5.Properties["Version"].Value);
  141. mobo.BIOSBuildNumber = Convert.ToString(mo5.Properties["BuildNumber"].Value);
  142. //ReleaseDate = DateTime.Parse(mo.Properties["ReleaseDate"].Value.ToString());
  143. }
  144. motherboards.Add(mobo);
  145. }
  146. return motherboards;
  147. }
  148. public static List<Disk> GetStorageDevices()
  149. {
  150. List<Disk> Disks = new List<Disk>();
  151. //List<Volume> Volumes = new List<Volume>();
  152. //List<Volume> Removables = new List<Volume>();
  153. //List<Volume> Opticals = new List<Volume>();
  154. Disk disk;
  155. ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
  156. foreach (ManagementObject mo2 in searcher2.Get())
  157. {
  158. disk = new Disk();
  159. disk.Model = Convert.ToString(mo2.Properties["Model"].Value);
  160. disk.BytesPerSector = Convert.ToUInt32(mo2.Properties["BytesPerSector"].Value);
  161. disk.FirmwareRevision = Convert.ToString(mo2.Properties["FirmwareRevision"].Value);
  162. disk.MediaType = Convert.ToString(mo2.Properties["MediaType"].Value);
  163. disk.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo2.Properties["Size"].Value));
  164. Disks.Add(disk);
  165. }
  166. return Disks;
  167. }
  168. public static List<NetworkDevice> GetNetworkDevices()
  169. {
  170. List<NetworkDevice> adapters = new List<NetworkDevice>();
  171. NetworkDevice adapter;
  172. ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter");
  173. foreach (ManagementObject mo in searcher.Get())
  174. {
  175. adapter = new NetworkDevice();
  176. adapter.AdapterType = Convert.ToString(mo.Properties["AdapterType"].Value);
  177. adapter.Manufacturer = Convert.ToString(mo.Properties["Manufacturer"].Value);
  178. adapter.ProductName = Convert.ToString(mo.Properties["ProductName"].Value);
  179. bool isPhysical = Convert.ToBoolean(mo.Properties["PhysicalAdapter"].Value);
  180. adapter.PhysicalAdapter = (isPhysical) ? "Yes" : "No";
  181. adapter.MacAddress = Convert.ToString(mo.Properties["MacAddress"].Value);
  182. adapter.ServiceName = Convert.ToString(mo.Properties["ServiceName"].Value);
  183. if (isPhysical) adapters.Add(adapter);
  184. }
  185. return adapters;
  186. }
  187. private static string SanitizeDriveType(UInt32 i)
  188. {
  189. string result = string.Empty;
  190. switch (i)
  191. {
  192. case 0:
  193. result = "Unknown";
  194. break;
  195. case 1:
  196. result = "No Root Directory";
  197. break;
  198. case 2:
  199. result = "Removable Disk";
  200. break;
  201. case 3:
  202. result = "Local Disk";
  203. break;
  204. case 4:
  205. result = "Network Drive";
  206. break;
  207. case 5:
  208. result = "Compact Disk";
  209. break;
  210. case 6:
  211. result = "RAM Disk";
  212. break;
  213. }
  214. return result;
  215. }
  216. private static string SanitizeVideoMemoryType(UInt16 i)
  217. {
  218. string result = string.Empty;
  219. switch (i)
  220. {
  221. case 1:
  222. result = "Other";
  223. break;
  224. case 2:
  225. result = "Unknown";
  226. break;
  227. case 3:
  228. result = "VRAM";
  229. break;
  230. case 4:
  231. result = "DRAM";
  232. break;
  233. case 5:
  234. result = "SRAM";
  235. break;
  236. case 6:
  237. result = "WRAM";
  238. break;
  239. case 7:
  240. result = "EDO RAM";
  241. break;
  242. case 8:
  243. result = "Burst Synchronous DRAM";
  244. break;
  245. case 9:
  246. result = "Pipelined Burst SRAM";
  247. break;
  248. case 10:
  249. result = "CDRAM";
  250. break;
  251. case 11:
  252. result = "3DRAM";
  253. break;
  254. case 12:
  255. result = "SDRAM";
  256. break;
  257. case 13:
  258. result = "SGRAM";
  259. break;
  260. }
  261. return result;
  262. }
  263. private static string SanitizeFormFactor(UInt16 i)
  264. {
  265. string result = string.Empty;
  266. switch (i)
  267. {
  268. case 0:
  269. result = "Unknown";
  270. break;
  271. case 1:
  272. result = "Other";
  273. break;
  274. case 2:
  275. result = "SIP";
  276. break;
  277. case 3:
  278. result = "DIP";
  279. break;
  280. case 4:
  281. result = "ZIP";
  282. break;
  283. case 5:
  284. result = "SOJ";
  285. break;
  286. case 6:
  287. result = "Proprietary";
  288. break;
  289. case 7:
  290. result = "SIMM";
  291. break;
  292. case 8:
  293. result = "DIMM";
  294. break;
  295. case 9:
  296. result = "TSOP";
  297. break;
  298. case 10:
  299. result = "PGA";
  300. break;
  301. case 11:
  302. result = "RIMM";
  303. break;
  304. case 12:
  305. result = "SODIMM";
  306. break;
  307. case 13:
  308. result = "SRIMM";
  309. break;
  310. case 14:
  311. result = "SMD";
  312. break;
  313. case 15:
  314. result = "SSMP";
  315. break;
  316. case 16:
  317. result = "QFP";
  318. break;
  319. case 17:
  320. result = "TQFP";
  321. break;
  322. case 18:
  323. result = "SOIC";
  324. break;
  325. case 19:
  326. result = "LCC";
  327. break;
  328. case 20:
  329. result = "PLCC";
  330. break;
  331. case 21:
  332. result = "BGA";
  333. break;
  334. case 22:
  335. result = "FPBGA";
  336. break;
  337. case 23:
  338. result = "LGA";
  339. break;
  340. }
  341. return result;
  342. }
  343. private static string SanitizeMemoryType(UInt16 i)
  344. {
  345. string result = string.Empty;
  346. switch (i)
  347. {
  348. case 0:
  349. result = "Unknown";
  350. break;
  351. case 1:
  352. result = "Other";
  353. break;
  354. case 2:
  355. result = "DRAM";
  356. break;
  357. case 3:
  358. result = "Synchonous DRAM";
  359. break;
  360. case 4:
  361. result = "Cache DRAM";
  362. break;
  363. case 5:
  364. result = "EDO";
  365. break;
  366. case 6:
  367. result = "EDRAM";
  368. break;
  369. case 7:
  370. result = "VRAM";
  371. break;
  372. case 8:
  373. result = "SRAM";
  374. break;
  375. case 9:
  376. result = "RAM";
  377. break;
  378. case 10:
  379. result = "ROM";
  380. break;
  381. case 11:
  382. result = "Flash";
  383. break;
  384. case 12:
  385. result = "EEPROM";
  386. break;
  387. case 13:
  388. result = "FEPROM";
  389. break;
  390. case 14:
  391. result = "EPROM";
  392. break;
  393. case 15:
  394. result = "CDRAM";
  395. break;
  396. case 16:
  397. result = "3DRAM";
  398. break;
  399. case 17:
  400. result = "SDRAM";
  401. break;
  402. case 18:
  403. result = "SGRAM";
  404. break;
  405. case 19:
  406. result = "RDRAM";
  407. break;
  408. case 20:
  409. result = "DDR";
  410. break;
  411. case 21:
  412. result = "DDR2";
  413. break;
  414. case 22:
  415. result = "DDR2 FB-DIMM";
  416. break;
  417. case 24:
  418. result = "DDR3";
  419. break;
  420. case 25:
  421. result = "FBD2";
  422. break;
  423. }
  424. return result;
  425. }
  426. }
  427. }