Я пишу приложение, в котором хранятся дисковые объекты для компьютера, а также логические разделы для каждого диска.Я удаленно использую WMI и (в частности) ManagementObjectSearch для запроса компьютеров в моем домене.Мне интересно, есть ли какие-либо свойства между классами WMI Win32_DiskDrive и Win32_LogicalDrive, которые позволили бы мне проверить, принадлежит ли раздел к определенному диску или нет.Я могу просто добавить разделы, но когда я пытаюсь добавить их на диск, мой ManagementObjectSearch просто захватывает все разделы со всех дисков.Я хочу сузить область поиска, чтобы при поиске разделов, скажем, на диске, на котором установлена ОС, мне нужны базовые GPT-разделы, а если я ищу разделы на диске с данными, я хочуодин раздел, который, вероятно, будет расположен на этом диске.(Извините, если это не имело особого смысла).
Я пробовал прямой запрос для разделов, но, похоже, мой ManagementObjectSearch запрашивает все разделы между обоими дисками, а не только диск, который я хочу найти.
ManagementScope scope = new ManagementScope("\\\\" + computer.Name + "\\root\\cimv2:Win32_LogicalDisk", computer.Options);
scope.Connect();
foreach (ComputerDisk disk in computer.DiskList)
{
try
{
disk.PartitionList = new List<DiskPartition>();
MessageBox.Show("Disk Name: " + disk.Name);
SelectQuery query = new SelectQuery("Select * from Win32_LogicalDisk ");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection obj = searcher.Get();
foreach (ManagementObject os in obj)
{
DiskPartition partition = new DiskPartition();
UInt64 fS = (UInt64)os.Properties["FreeSpace"].Value / 1000000000;
UInt64 tS = (UInt64)os.Properties["Size"].Value / 1000000000;
partition.FreeSpace = fS;
partition.TotalSpace = tS;
partition.PercentFreeSpace = Convert.ToDouble(partition.FreeSpace / partition.TotalSpace);
partition.PartitionName = Convert.ToString(os.Properties["Name"].Value);
partition.FileSystem = Convert.ToString(os.Properties["FileSystem"].Value);
if (!disk.PartitionList.Contains(partition))
{
disk.PartitionList.Add(partition);
}
}
}
catch (Exception ex)
{
//MessageBox.Show("Exception: " + ex.ToString());
}
}
На этом этапе я ожидаю, что все разделы будут найдены при выполнении запроса, но в основном я хочу запрашивать только разделы на рассматриваемом диске.При настройке моего кода у меня есть компьютерный объект, который содержит список дисковых объектов, причем каждый дисковый объект содержит список объектов DiskPartition.