예제 #1
0
        static void GetDriveInfo(DataTable AllDriveInfo)
        {
            AllDriveInfo.Columns.Add("DriveLetter", typeof(string));
            AllDriveInfo.Columns.Add("DriveNumber", typeof(string));
            AllDriveInfo.Columns.Add("VolumeLabel", typeof(string));
            AllDriveInfo.Columns.Add("VolumeSerialNumber", typeof(string));
            AllDriveInfo.Columns.Add("PhysicalSerialNumber", typeof(string));
            AllDriveInfo.Columns.Add("PhysicalModel", typeof(string));

            var drives = new ManagementObjectSearcher("Select * from Win32_LogicalDiskToPartition").Get().Cast <ManagementObject>();
            var disks  = new ManagementObjectSearcher("Select * from Win32_LogicalDisk").Get().Cast <ManagementObject>();

            foreach (var drive in drives)
            {
                DataRow NewRow = AllDriveInfo.NewRow();

                var driveLetter = Regex.Match((string)drive["Dependent"], @"DeviceID=""(.*)""").Groups[1].Value;
                var driveNumber = Regex.Match((string)drive["Antecedent"], @"Disk #(\d*),").Groups[1].Value;

                NewRow["DriveLetter"] = Convert.ToString(driveLetter).Trim();
                NewRow["DriveNumber"] = Convert.ToString(driveNumber).Trim();

                var foundDisk = disks.Where((d) => d["Name"].ToString() == driveLetter).FirstOrDefault();
                if (foundDisk == null)
                {
                    foundDisk = disks.Where((d) => d.Path.ToString() == drive["Dependent"].ToString()).FirstOrDefault();
                }
                if (foundDisk == null)
                {
                    NewRow["VolumeLabel"]        = "no_label";
                    NewRow["VolumeSerialNumber"] = "no_sn";
                }
                else
                {
                    string volumeLabel = Convert.ToString(foundDisk["VolumeName"]).Trim();
                    if (volumeLabel.Length == 0)
                    {
                        volumeLabel = "no_label";
                    }
                    NewRow["VolumeLabel"] = volumeLabel;

                    string volumeSerialNumber = Convert.ToString(foundDisk["VolumeSerialNumber"]).Trim();
                    if (volumeSerialNumber.Length == 0)
                    {
                        volumeLabel = "no_sn";
                    }
                    NewRow["VolumeSerialNumber"] = volumeSerialNumber;
                }
                AllDriveInfo.Rows.Add(NewRow);
            }


            ManagementObjectSearcher objSearcher = new
                                                   ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");


            foreach (ManagementObject wmi_HD in objSearcher.Get())
            {
                string FullDriveName;
                string FullDriveNumber;
                string PSN;

                FullDriveName = GetWMI(wmi_HD, "Tag");
                int StartingPos = FullDriveName.LastIndexOf('\\') + 1;
                int Length      = FullDriveName.Length - StartingPos;
                FullDriveName = FullDriveName.Substring(StartingPos, Length);

                FullDriveNumber = FullDriveName.Substring(FullDriveName.Length - 1, 1);

                PSN = GetWMI(wmi_HD, "SerialNumber").Trim();

                if (FullDriveName.Contains("PHYSICALDRIVE"))
                {
                    for (int i = 0; i < AllDriveInfo.Rows.Count; i++)
                    {
                        if (Convert.ToString(AllDriveInfo.Rows[i]["DriveNumber"]) == FullDriveNumber)
                        {
                            AllDriveInfo.Rows[i]["PhysicalSerialNumber"] = PSN;
                        }
                    }
                }
            }

            ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

            // Loop through each object (disk) retrieved by WMI
            foreach (ManagementObject moDisk in mosDisks.Get())
            {
                string PSN    = moDisk["SerialNumber"].ToString().Trim();
                string PModel = moDisk["Model"].ToString();

                for (int i = 0; i < AllDriveInfo.Rows.Count; i++)
                {
                    if (Convert.ToString(AllDriveInfo.Rows[i]["PhysicalSerialNumber"]) == PSN)
                    {
                        AllDriveInfo.Rows[i]["PhysicalModel"] = PModel;
                    }
                }
            }

            int[] ColumnSize = new int[AllDriveInfo.Columns.Count];

            for (int i = 0; i < AllDriveInfo.Rows.Count; i++)
            {
                for (int j = 0; j < AllDriveInfo.Columns.Count; j++)
                {
                    string field  = Convert.ToString(AllDriveInfo.Rows[i][j]);
                    int    Length = field.Length;
                    if (Length > ColumnSize[j])
                    {
                        ColumnSize[j] = Length;
                    }
                }
            }

            List <string> Header1 = new List <string>
            {
                "Drive", "SATA", " ", "Volume", " ", " "
            };

            List <string> Header2 = new List <string>
            {
                "Letter", "Number", "Label", "Serial #", "Physical Serial #", "Device Name"
            };

            for (int j = 0; j < Header1.Count(); j++)
            {
                int Length1 = Header1[j].Length;
                int Length2 = Header2[j].Length;
                if (Length1 > ColumnSize[j])
                {
                    ColumnSize[j] = Length1;
                }
                if (Length2 > ColumnSize[j])
                {
                    ColumnSize[j] = Length2;
                }
            }

            StreamWriter sw = new StreamWriter("dffScan.DriveInfo");

            Console.WriteLine("Your Physical Drives:");
            sw.WriteLine("Your Physical Drives:");

            int tablewidth = 0;

            for (int j = 0; j < AllDriveInfo.Columns.Count; j++)
            {
                tablewidth += (ColumnSize[j] + 3);
            }
            tablewidth += 2;

            string breakline = string.Concat(Enumerable.Repeat("-", tablewidth));

            Console.WriteLine(breakline);
            sw.WriteLine(breakline);

            for (int j = 0; j < Header1.Count(); j++)
            {
                string FieldFormat = "| {0,-" + Convert.ToString(ColumnSize[j]) + "} ";
                Console.Write(FieldFormat, Header1[j]);
                sw.Write(FieldFormat, Header1[j]);
            }
            Console.WriteLine(" |");
            sw.WriteLine(" |");

            for (int j = 0; j < Header2.Count(); j++)
            {
                string FieldFormat = "| {0,-" + Convert.ToString(ColumnSize[j]) + "} ";
                Console.Write(FieldFormat, Header2[j]);
                sw.Write(FieldFormat, Header2[j]);
            }
            Console.WriteLine(" |");
            sw.WriteLine(" |");

            Console.WriteLine(breakline);
            sw.WriteLine(breakline);

            for (int i = 0; i < AllDriveInfo.Rows.Count; i++)
            {
                for (int j = 0; j < AllDriveInfo.Columns.Count; j++)
                {
                    string FieldFormat = "| {0,-" + Convert.ToString(ColumnSize[j]) + "} ";
                    Console.Write(FieldFormat, Convert.ToString(AllDriveInfo.Rows[i][j]));
                    sw.Write(FieldFormat, Convert.ToString(AllDriveInfo.Rows[i][j]));
                }
                Console.WriteLine(" |");
                sw.WriteLine(" |");
            }

            Console.WriteLine(breakline);
            sw.WriteLine(breakline);

            sw.Close();

            return;
        }
예제 #2
0
        private void ViewDriveInfo_Load(object sender, EventArgs e)
        {
            DataTable AllDriveInfo = new DataTable();

            AllDriveInfo.Columns.Add("DriveLetter", typeof(string));
            AllDriveInfo.Columns.Add("DriveNumber", typeof(string));
            AllDriveInfo.Columns.Add("VolumeLabel", typeof(string));
            AllDriveInfo.Columns.Add("VolumeSerialNumber", typeof(string));
            AllDriveInfo.Columns.Add("PhysicalSerialNumber", typeof(string));
            AllDriveInfo.Columns.Add("PhysicalModel", typeof(string));

            var drives = new ManagementObjectSearcher("Select * from Win32_LogicalDiskToPartition").Get().Cast <ManagementObject>();
            var disks  = new ManagementObjectSearcher("Select * from Win32_LogicalDisk").Get().Cast <ManagementObject>();

            foreach (var drive in drives)
            {
                DataRow NewRow = AllDriveInfo.NewRow();

                var driveLetter = Regex.Match((string)drive["Dependent"], @"DeviceID=""(.*)""").Groups[1].Value;
                var driveNumber = Regex.Match((string)drive["Antecedent"], @"Disk #(\d*),").Groups[1].Value;

                NewRow["DriveLetter"] = Convert.ToString(driveLetter).Trim();
                NewRow["DriveNumber"] = Convert.ToString(driveNumber).Trim();

                var foundDisk = disks.Where((d) => d["Name"].ToString() == driveLetter).FirstOrDefault();
                if (foundDisk == null)
                {
                    foundDisk = disks.Where((d) => d.Path.ToString() == drive["Dependent"].ToString()).FirstOrDefault();
                }
                if (foundDisk == null)
                {
                    NewRow["VolumeLabel"]        = "no label";
                    NewRow["VolumeSerialNumber"] = "no serial number";
                }
                else
                {
                    string volumeLabel = Convert.ToString(foundDisk["VolumeName"]).Trim();
                    if (volumeLabel.Length == 0)
                    {
                        volumeLabel = "no label";
                    }
                    NewRow["VolumeLabel"] = volumeLabel;

                    string volumeSerialNumber = Convert.ToString(foundDisk["VolumeSerialNumber"]).Trim();

                    switch (volumeSerialNumber.Length)
                    {
                    case 0:
                        volumeSerialNumber = "no serial number";
                        break;

                    case 8:
                        volumeSerialNumber = volumeSerialNumber.Substring(0, 4) + "-" + volumeSerialNumber.Substring(4, 4);
                        break;
                    }
                    NewRow["VolumeSerialNumber"] = volumeSerialNumber;
                }
                AllDriveInfo.Rows.Add(NewRow);
            }


            ManagementObjectSearcher objSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");


            foreach (ManagementObject wmi_HD in objSearcher.Get())
            {
                string FullDriveName;
                string FullDriveNumber;
                string PSN;

                FullDriveName = GetWMI(wmi_HD, "Tag");
                int StartingPos = FullDriveName.LastIndexOf('\\') + 1;
                int Length      = FullDriveName.Length - StartingPos;
                FullDriveName = FullDriveName.Substring(StartingPos, Length);

                FullDriveNumber = FullDriveName.Substring(FullDriveName.Length - 1, 1);

                PSN = GetWMI(wmi_HD, "SerialNumber").Trim();

                if (FullDriveName.Contains("PHYSICALDRIVE"))
                {
                    for (int i = 0; i < AllDriveInfo.Rows.Count; i++)
                    {
                        if (Convert.ToString(AllDriveInfo.Rows[i]["DriveNumber"]) == FullDriveNumber)
                        {
                            AllDriveInfo.Rows[i]["PhysicalSerialNumber"] = PSN;
                        }
                    }
                }
            }

            ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

            // Loop through each object (disk) retrieved by WMI
            foreach (ManagementObject moDisk in mosDisks.Get())
            {
                string PSN    = moDisk["SerialNumber"].ToString().Trim();
                string PModel = moDisk["Model"].ToString();

                for (int i = 0; i < AllDriveInfo.Rows.Count; i++)
                {
                    if (Convert.ToString(AllDriveInfo.Rows[i]["PhysicalSerialNumber"]) == PSN)
                    {
                        AllDriveInfo.Rows[i]["PhysicalModel"] = PModel;
                    }
                }
            }

            int[] ColumnSize = new int[AllDriveInfo.Columns.Count];

            for (int i = 0; i < AllDriveInfo.Rows.Count; i++)
            {
                for (int j = 0; j < AllDriveInfo.Columns.Count; j++)
                {
                    string field  = Convert.ToString(AllDriveInfo.Rows[i][j]);
                    int    Length = field.Length;
                    if (Length > ColumnSize[j])
                    {
                        ColumnSize[j] = Length;
                    }
                }
            }

            BindingSource SBind = new BindingSource
            {
                DataSource = AllDriveInfo
            };

            dataGridView1.AutoGenerateColumns = true;  //must be "true" here
            dataGridView1.Columns.Clear();
            dataGridView1.DataSource = SBind;

            for (int i = 0; i < dataGridView1.Columns.Count; i++)
            {
                dataGridView1.Columns[i].DataPropertyName = AllDriveInfo.Columns[i].ColumnName;
                dataGridView1.Columns[i].HeaderText       = AllDriveInfo.Columns[i].Caption;
            }

            dataGridView1.DefaultCellStyle.Font = new Font("Ariel", 10);

            dataGridView1.Enabled             = true;
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
            dataGridView1.Refresh();
        }