public PCinfoModel getPcInfo()
        {
            PCinfoModel thisPC = new PCinfoModel();

            try {
                if (new ManagementObjectSearcher(@"SELECT * FROM Win32_Processor") == null || new ManagementObjectSearcher(@"SELECT * FROM Win32_Processor").Get().Count <= 0)
                {
                    thisPC.proesser = "No CPU";
                }
                else
                {
                    foreach (var CPU in new ManagementObjectSearcher(@"SELECT * FROM Win32_Processor").Get())
                    {
                        thisPC.proesser = CPU["Name"].ToString();
                    }
                }

                if (new ManagementObjectSearcher(@"SELECT * FROM Win32_BaseBoard") == null || new ManagementObjectSearcher(@"SELECT * FROM Win32_BaseBoard").Get().Count <= 0)
                {
                    thisPC.motherBoard = "No motherBoard";
                }
                else
                {
                    foreach (var MTB in new ManagementObjectSearcher(@"SELECT * FROM Win32_BaseBoard").Get())
                    {
                        thisPC.motherBoard = MTB["Manufacturer"].ToString() + " " + MTB["Product"].ToString();
                    }
                }

                int i = 0;
                if (new ManagementObjectSearcher(@"Select * From Win32_PhysicalMemory") == null || new ManagementObjectSearcher(@"Select * From Win32_PhysicalMemory").Get().Count <= 0)
                {
                    RamModel thisRam = new RamModel();
                    thisRam.Maker = "No Ram";
                    thisPC.rams.Add(thisRam);
                }
                else
                {
                    foreach (var RAM in new ManagementObjectSearcher(@"Select * From Win32_PhysicalMemory").Get())
                    {
                        RamModel thisRam = new RamModel();
                        thisRam.Maker    = Convert.ToString(RAM["Manufacturer"]);
                        thisRam.speed    = Convert.ToString(RAM["Speed"]) + "MHz";
                        thisRam.type     = Convert.ToInt32(RAM["MemoryType"]);
                        thisRam.capacity = Convert.ToInt64(RAM["Capacity"]);

                        thisPC.rams.Add(thisRam);
                    }
                }

                if (new ManagementObjectSearcher(@"Select * From Win32_DiskDrive") == null || new ManagementObjectSearcher(@"Select * From Win32_DiskDrive").Get().Count <= 0)
                {
                    deviceModle thisdevice = new deviceModle();
                    thisdevice.modleName = "No Drive";
                    thisPC.drives.Add(thisdevice);
                }
                else
                {
                    foreach (var Drive in new ManagementObjectSearcher(@"Select * From Win32_DiskDrive").Get())
                    {
                        deviceModle thisdevice = new deviceModle();

                        thisdevice.modleName = Convert.ToString(Drive["Model"]) + ++i;

                        if (Convert.ToInt64(Drive["Size"]) > 0)
                        {
                            thisdevice.Size = Math.Round((Convert.ToInt64(Drive["Size"]) / Math.Pow(1024, 3)), 3) + "GB";
                        }


                        thisPC.drives.Add(thisdevice);
                    }
                }

                if (new ManagementObjectSearcher(@"Select * From Win32_VideoController") == null || new ManagementObjectSearcher(@"Select * From Win32_VideoController").Get().Count <= 0)
                {
                    thisPC.videoCard = "No GPU";
                }
                else
                {
                    foreach (var GPU in new ManagementObjectSearcher(@"Select * From Win32_VideoController").Get())
                    {
                        thisPC.videoCard = Convert.ToString(GPU["Name"]);
                    }
                }

                if (new ManagementObjectSearcher(@"Select * From Win32_OperatingSystem").Get() == null || new ManagementObjectSearcher(@"Select * From Win32_OperatingSystem").Get().Count <= 0)
                {
                    thisPC.os = "No OS";
                }
                else
                {
                    foreach (var OS in new ManagementObjectSearcher(@"Select * From Win32_OperatingSystem").Get())
                    {
                        if (String.IsNullOrEmpty(Convert.ToString(OS["Name"])) || Convert.ToString(OS["Name"]).Split().Length < 1)
                        {
                            thisPC.os = Convert.ToString(OS["Name"]) + " " + Convert.ToString(OS["OSArchitecture"]) + " ";
                        }
                        else
                        {
                            thisPC.os = Convert.ToString(OS["Name"]).Split('|')[0] + " " + Convert.ToString(OS["OSArchitecture"]) + " ";
                        }


                        string version = "";

                        #region Switch OS Name case
                        switch (Convert.ToString(OS["BuildNumber"]))
                        {
                        case "2600":
                            version = "Windows XP";
                            break;

                        case "2600.1105-1106":
                            version = "Windows XP, Service Pack 1";
                            break;

                        case "2600.218":
                            version = "Windows XP, Service Pack 2";
                            break;

                        case "3790.118":
                            version = "Windows Server 2003, Service Pack 1";
                            break;

                        case "3790":
                            version = "Windows Server 2003 R2";
                            break;

                        case "6000":
                            version = "Windows Vista";
                            break;

                        case "4500":
                            version = "Windows Home Server";
                            break;

                        case "6001":
                            version = "Windows Vista, Service Pack 1";
                            break;

                        case "6002":
                            version = "Windows Vista, Service Pack 2";
                            break;

                        case "7600":
                            version = "Windows 7";
                            break;

                        case "7601":
                            version = "Windows Server 2008 R2, Service Pack 1";
                            break;

                        case "8400":
                            version = "Windows Home Server 2011";
                            break;

                        case "9200":
                            version = "Windows 8";
                            break;

                        case "9600":
                            version = "Windows 8.1";
                            break;

                        case "10240":
                            version = "Windows 10, Version 1507";
                            break;

                        case "10586":
                            version = "Windows 10, Version 1511";
                            break;

                        case "14393":
                            version = "Windows 10, Version 1607";
                            break;

                        case "15063":
                            version = "Windows 10, Version 1703";
                            break;

                        case "16299":
                            version = "Windows 10, Version 1709";
                            break;

                        case "17134":
                            version = "Windows 10, Version 1803";
                            break;

                        case "17763":
                            version = "Windows 10, Version 1809";
                            break;

                        case "6003":
                            version = "Windows Server 2008, Service Pack 2, Rollup KB4489887";
                            break;

                        case "18362":
                            version = "Windows 10, Version 1903";
                            break;

                        case "18363":
                            version = "Windows 10, Version 1909";
                            break;

                        case "19041":
                            version = "Windows 10, Version 2004";
                            break;

                        case "19042":
                            version = "Windows 10, Version 20H2";
                            break;

                        default:
                            version = "Can't Find " + OS["BuildNumber"];
                            break;
                        }
                        #endregion

                        thisPC.os += version;
                    }
                }
            } catch (Exception ex) {
                System.Diagnostics.Trace.Write(ex.ToString());

                System.Diagnostics.Trace.Assert(false, ex.ToString());
                string debugTxetPath = "C:\\getPcInfo.txt";
                using (TextWriterTraceListener _DebugLog = new TextWriterTraceListener(debugTxetPath)) {
                    Trace.Listeners.Add(_DebugLog);
                    Trace.AutoFlush = true;
                    Trace.WriteLine("SQL Area error:" + ex.StackTrace.ToString() + ex.Source.ToString() + ex.Data.ToString());
                    Trace.WriteLine(ex.ToString());
                    Trace.Write(thisPC.proesser + "\n" + thisPC.motherBoard + "\n" + thisPC.rams.ToArray() + "\n" + thisPC.drives.ToArray() + "\n" + thisPC.videoCard + "\n" + thisPC.os);
                    Trace.Listeners.Clear();
                    Trace.Close();
                }

                throw ex;
            }

            return(thisPC);
        }
        public List <deviceModle> getDevices()
        {
            List <deviceModle> devices = new List <deviceModle> ();

            foreach (var device in new ManagementObjectSearcher(@"SELECT * FROM Win32_DiskDrive").Get())
            {
                deviceModle thisdevices = new deviceModle();

                thisdevices.modleName = device["Model"]?.ToString().Trim();

                string diskname = device["DeviceID"].ToString();
                thisdevices.PhysicalDriveNumber = int.Parse(diskname.Substring(diskname.Length - 1, 1));

                System.IntPtr hDevice = Kernel.CreateFile(diskname,
                                                          Kernel.GENERIC_READ | Kernel.GENERIC_WRITE,
                                                          Kernel.FILE_SHARE_READ | Kernel.FILE_SHARE_WRITE,
                                                          0,
                                                          Kernel.OPEN_EXISTING,
                                                          0,
                                                          0);

                STORAGE_PROPERTY_QUERY    Query   = new STORAGE_PROPERTY_QUERY();
                STORAGE_DEVICE_DESCRIPTOR DevDesc = new STORAGE_DEVICE_DESCRIPTOR();
                string bustype       = "";
                uint   bytesReturned = 0;
                Query.PropertyId = 0;
                Query.QueryType  = 0;

                if (0 != Kernel.DeviceIoControl(hDevice,                             // device handle
                                                Kernel.IOCTL_STORAGE_QUERY_PROPERTY, // info of device property
                                                ref Query,
                                                (uint)Marshal.SizeOf(Query),         // input data buffer
                                                ref DevDesc,
                                                (uint)Marshal.SizeOf(DevDesc),       // output data buffer
                                                ref bytesReturned,                   // out's length
                                                IntPtr.Zero))
                {
                    switch (DevDesc.BusType)
                    {
                    case STORAGE_BUS_TYPE.BusTypeUnknown:
                        bustype = Kernel.DISK_TYPE_UNKNOWN_TEXT;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeScsi:
                        bustype = Kernel.DISKTYPE_SCSI;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeAtapi:
                        bustype = Kernel.DISKTYPE_ATAPI;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeAta:
                        bustype = Kernel.DISKTYPE_ATA;
                        break;

                    case STORAGE_BUS_TYPE.BusType1394:
                        bustype = Kernel.DISKTYPE_1394;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeSsa:
                        bustype = Kernel.DISKTYPE_SSA;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeFibre:
                        bustype = Kernel.DISKTYPE_FIBRE;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeUsb:
                        bustype = Kernel.DISKTYPE_USB;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeRAID:
                        bustype = Kernel.DISKTYPE_RAID;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeSata:
                        bustype = Kernel.DISKTYPE_SATA;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeMax:
                        bustype = Kernel.DISKTYPE_MAX;
                        break;

                    case STORAGE_BUS_TYPE.BusTypeNvme:
                        bustype = Kernel.DISKTYPE_MAX;
                        break;

                    default:
                        break;
                    }
                }

                thisdevices.busType = bustype;
                devices.Add(thisdevices);
                Kernel.CloseHandle(hDevice);
            }
            return(devices);
        }