using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Management; using System.IO; using System.Net.NetworkInformation; using System.Runtime.InteropServices; using System.Globalization; using Microsoft.Win32; namespace Optimizer { public static class IndiciumHelper { public static List GetCPUs() { List CPUs = new List(); CPU cpu; ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor"); foreach (ManagementObject mo in searcher.Get()) { cpu = new CPU(); cpu.Name = Convert.ToString(mo.Properties["Name"].Value); cpu.L2CacheSize = ByteSize.FromKiloBytes(Convert.ToDouble(mo.Properties["L2CacheSize"].Value)); cpu.L3CacheSize = ByteSize.FromKiloBytes(Convert.ToDouble(mo.Properties["L3CacheSize"].Value)); cpu.Cores = Convert.ToUInt32(mo.Properties["NumberOfCores"].Value); cpu.Threads = Convert.ToUInt32(mo.Properties["ThreadCount"].Value); cpu.LogicalCpus = Convert.ToUInt32(mo.Properties["NumberOfLogicalProcessors"].Value); bool temp = Convert.ToBoolean(mo.Properties["VirtualizationFirmwareEnabled"].Value); cpu.Virtualization = (temp) ? "Yes" : "No"; cpu.Stepping = Convert.ToString(mo.Properties["Description"].Value); cpu.Revision = Convert.ToString(mo.Properties["Revision"].Value); try { ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem"); foreach (ManagementObject mo2 in searcher2.Get()) { bool temp2 = Convert.ToBoolean(mo2.Properties["DataExecutionPrevention_Available"].Value); cpu.DataExecutionPrevention = (temp2) ? "Yes" : "No"; } } catch { } if (string.IsNullOrEmpty(cpu.Name)) cpu.Name = GetCPUNameAlternative(); CPUs.Add(cpu); } return CPUs; } private static string GetCPUNameAlternative() { using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0", false)) { return key.GetValue("ProcessorNameString").ToString(); } } public static List GetRAM() { List modules = new List(); RAM module; ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory"); foreach (ManagementObject mo in searcher.Get()) { module = new RAM(); module.BankLabel = Convert.ToString(mo.Properties["BankLabel"].Value); module.Capacity = Convert.ToUInt64(mo.Properties["Capacity"].Value); module.Manufacturer = Convert.ToString(mo.Properties["Manufacturer"].Value); module.Speed = Convert.ToUInt32(mo.Properties["Speed"].Value); UInt16 memorytype = Convert.ToUInt16(mo.Properties["MemoryType"].Value); UInt16 formfactor = Convert.ToUInt16(mo.Properties["FormFactor"].Value); module.MemoryType = SanitizeMemoryType(memorytype); module.FormFactor = SanitizeFormFactor(formfactor); modules.Add(module); } return modules; } public static List GetGPUs() { List GPUs = new List(); GPU gpu; ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController"); foreach (ManagementObject mo in searcher.Get()) { gpu = new GPU(); gpu.Name = Convert.ToString(mo.Properties["Name"].Value); gpu.Memory = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["AdapterRAM"].Value)); gpu.ResolutionX = Convert.ToUInt32(mo.Properties["CurrentHorizontalResolution"].Value); gpu.ResolutionY = Convert.ToUInt32(mo.Properties["CurrentVerticalResolution"].Value); gpu.RefreshRate = Convert.ToUInt32(mo.Properties["CurrentRefreshRate"].Value); gpu.DACType = Convert.ToString(mo.Properties["AdapterDACType"].Value); UInt16 vtype = Convert.ToUInt16(mo.Properties["VideoMemoryType"].Value); gpu.VideoMemoryType = SanitizeVideoMemoryType(vtype); GPUs.Add(gpu); } return GPUs; } public static List GetMotherboards() { List motherboards = new List(); Motherboard mobo; ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); foreach (ManagementObject mo in searcher.Get()) { mobo = new Motherboard(); mobo.Model = Convert.ToString(mo.Properties["Model"].Value); mobo.Manufacturer = Convert.ToString(mo.Properties["Manufacturer"].Value); mobo.Product = Convert.ToString(mo.Properties["Product"].Value); mobo.Version = Convert.ToString(mo.Properties["Version"].Value); try { ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_IDEController"); foreach (ManagementObject mo2 in searcher2.Get()) { mobo.Chipset = Convert.ToString(mo2.Properties["Description"].Value); } } catch { } try { ManagementObjectSearcher searcher3 = new ManagementObjectSearcher("SELECT * FROM Win32_IDEController"); foreach (ManagementObject mo3 in searcher3.Get()) { mobo.Revision = Convert.ToString(mo3.Properties["RevisionNumber"].Value); } } catch { } try { ManagementObjectSearcher searcher4 = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"); foreach (ManagementObject mo4 in searcher4.Get()) { mobo.SystemModel = Convert.ToString(mo4.Properties["Model"].Value); } } catch { } ManagementObjectSearcher searcher5 = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"); foreach (ManagementObject mo5 in searcher5.Get()) { mobo.BIOSName = Convert.ToString(mo5.Properties["Name"].Value); mobo.BIOSManufacturer = Convert.ToString(mo5.Properties["Manufacturer"].Value); mobo.BIOSVersion = Convert.ToString(mo5.Properties["Version"].Value); mobo.BIOSBuildNumber = Convert.ToString(mo5.Properties["BuildNumber"].Value); //ReleaseDate = DateTime.Parse(mo.Properties["ReleaseDate"].Value.ToString()); } motherboards.Add(mobo); } return motherboards; } public static List GetStorageDevices() { List Disks = new List(); //List Volumes = new List(); //List Removables = new List(); //List Opticals = new List(); Disk disk; ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); foreach (ManagementObject mo2 in searcher2.Get()) { disk = new Disk(); disk.Model = Convert.ToString(mo2.Properties["Model"].Value); disk.BytesPerSector = Convert.ToUInt32(mo2.Properties["BytesPerSector"].Value); disk.FirmwareRevision = Convert.ToString(mo2.Properties["FirmwareRevision"].Value); disk.MediaType = Convert.ToString(mo2.Properties["MediaType"].Value); disk.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo2.Properties["Size"].Value)); Disks.Add(disk); } return Disks; } public static List GetNetworkDevices() { List adapters = new List(); NetworkDevice adapter; ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter"); foreach (ManagementObject mo in searcher.Get()) { adapter = new NetworkDevice(); adapter.AdapterType = Convert.ToString(mo.Properties["AdapterType"].Value); adapter.Manufacturer = Convert.ToString(mo.Properties["Manufacturer"].Value); adapter.ProductName = Convert.ToString(mo.Properties["ProductName"].Value); bool isPhysical = Convert.ToBoolean(mo.Properties["PhysicalAdapter"].Value); adapter.PhysicalAdapter = (isPhysical) ? "Yes" : "No"; adapter.MacAddress = Convert.ToString(mo.Properties["MacAddress"].Value); adapter.ServiceName = Convert.ToString(mo.Properties["ServiceName"].Value); if (isPhysical) adapters.Add(adapter); } return adapters; } private static string SanitizeDriveType(UInt32 i) { string result = string.Empty; switch (i) { case 0: result = "Unknown"; break; case 1: result = "No Root Directory"; break; case 2: result = "Removable Disk"; break; case 3: result = "Local Disk"; break; case 4: result = "Network Drive"; break; case 5: result = "Compact Disk"; break; case 6: result = "RAM Disk"; break; } return result; } private static string SanitizeVideoMemoryType(UInt16 i) { string result = string.Empty; switch (i) { case 1: result = "Other"; break; case 2: result = "Unknown"; break; case 3: result = "VRAM"; break; case 4: result = "DRAM"; break; case 5: result = "SRAM"; break; case 6: result = "WRAM"; break; case 7: result = "EDO RAM"; break; case 8: result = "Burst Synchronous DRAM"; break; case 9: result = "Pipelined Burst SRAM"; break; case 10: result = "CDRAM"; break; case 11: result = "3DRAM"; break; case 12: result = "SDRAM"; break; case 13: result = "SGRAM"; break; } return result; } private static string SanitizeFormFactor(UInt16 i) { string result = string.Empty; switch (i) { case 0: result = "Unknown"; break; case 1: result = "Other"; break; case 2: result = "SIP"; break; case 3: result = "DIP"; break; case 4: result = "ZIP"; break; case 5: result = "SOJ"; break; case 6: result = "Proprietary"; break; case 7: result = "SIMM"; break; case 8: result = "DIMM"; break; case 9: result = "TSOP"; break; case 10: result = "PGA"; break; case 11: result = "RIMM"; break; case 12: result = "SODIMM"; break; case 13: result = "SRIMM"; break; case 14: result = "SMD"; break; case 15: result = "SSMP"; break; case 16: result = "QFP"; break; case 17: result = "TQFP"; break; case 18: result = "SOIC"; break; case 19: result = "LCC"; break; case 20: result = "PLCC"; break; case 21: result = "BGA"; break; case 22: result = "FPBGA"; break; case 23: result = "LGA"; break; } return result; } private static string SanitizeMemoryType(UInt16 i) { string result = string.Empty; switch (i) { case 0: result = "Unknown"; break; case 1: result = "Other"; break; case 2: result = "DRAM"; break; case 3: result = "Synchonous DRAM"; break; case 4: result = "Cache DRAM"; break; case 5: result = "EDO"; break; case 6: result = "EDRAM"; break; case 7: result = "VRAM"; break; case 8: result = "SRAM"; break; case 9: result = "RAM"; break; case 10: result = "ROM"; break; case 11: result = "Flash"; break; case 12: result = "EEPROM"; break; case 13: result = "FEPROM"; break; case 14: result = "EPROM"; break; case 15: result = "CDRAM"; break; case 16: result = "3DRAM"; break; case 17: result = "SDRAM"; break; case 18: result = "SGRAM"; break; case 19: result = "RDRAM"; break; case 20: result = "DDR"; break; case 21: result = "DDR2"; break; case 22: result = "DDR2 FB-DIMM"; break; case 24: result = "DDR3"; break; case 25: result = "FBD2"; break; } return result; } } }