public static List<Device> PopulateDevices()
        {
            var devices = new List<Device>();

            var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPSignedDriver");

            foreach (var obj in searcher.Get())
            {
                var inf = GetProperty(obj, "InfName");
                var description = GetProperty(obj, "Description");
                var classGUID = GetProperty(obj, "ClassGuid");
                var provider = GetProperty(obj, "DriverProviderName");

                if(classGUID.Equals("NA") || inf.Equals("NA")) continue;
                var device = new Device(inf, classGUID, null, provider, description);

                devices.Add(device);
            }

            return devices;
        }
        private void SaveFiles(Device device, string saveDir, List<string> search)
        {
            progressBar2.Invoke(new Action(() => progressBar2.Maximum = device.Files.Count));
            progressBar2.Invoke(new Action(() => progressBar2.Value = 0));

            for (int i = 0; i < device.Files.Count; i++)
            {
                currentLbl.Invoke(new Action(() => currentLbl.Text = device.Files[i]));
                var src = FindFile(device.Files[i], search);
                if(src != null)
                    File.Copy(src, Path.Combine(saveDir, Path.GetFileName(src)), true);

                progressBar2.Invoke(new Action(() => progressBar2.Value = i + 1));
            }
        }