使用DISKPART
命令行实用程序,我可以获得一个称为“位置路径”的东西,它似乎可以提供我需要的东西,您可以在选择其中一个之后使用命令detail disk
来查看diskpart
中的磁盘。
看来我可以通过此课程以编程方式获取此信息:MSFT_Disk
我不确定如何获取此类的实例。我有一些使用ManagementObjectSearcher
用于WMI
类的示例,但该方法对我不起作用,我也不确定{7}在Windows 7中的可用性,因为页面提到了这适用于Windows 8。
有没有人知道获取SATA频道信息或磁盘“位置路径”的好方法?
答案 0 :(得分:0)
如果您不想要Windows 8,我相信WMI是可行的方法:
using System;
using System.Linq;
using System.Management;
namespace DiskScanPOC
{
class Program
{
static void Main()
{
var managementScope = new ManagementScope();
//get disk drives
var query = new ObjectQuery("select * from Win32_DiskDrive");
var searcher = new ManagementObjectSearcher(managementScope, query);
var oReturnCollection = searcher.Get();
//List all properties available, in case the below isn't what you want.
var colList = oReturnCollection.Cast<ManagementObject>().First();
foreach (var property in colList.Properties)
{
Console.WriteLine("Property: {0} = {1}", property.Name, property.Value);
}
//loop through found drives and write out info
foreach (ManagementObject oReturn in oReturnCollection)
{
Console.WriteLine("Name : " + oReturn["Name"]);
Console.WriteLine("Target Id: " + oReturn["SCSITargetId"]);
Console.WriteLine("Port: " + oReturn["SCSIPort"]);
}
Console.Read();
}
}
}
我没有打开我的情况来验证SATA端口号,但上面的应用程序看起来在我的机器上有3个SATA硬盘驱动器可以得到合理的结果。
答案 1 :(得分:0)
如果您想获取位置路径,SetupDiGetDeviceRegistryProperty是您正在寻找的功能。将属性值设置为SPDRP_LOCATION_INFORMATION
。
我假设您已经知道如何枚举设备以获取DeviceInfoSet
和DeviceInfoData
。
答案 2 :(得分:0)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Management;
namespace Hard_Disk_Interface
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnCheck_Click(object sender, EventArgs e)
{
WqlObjectQuery q = new WqlObjectQuery("SELECT * FROM Win32_IDEController");
ManagementObjectSearcher res = new ManagementObjectSearcher(q);
lblHDDChanels.Text = string.Empty;
foreach (ManagementObject o in res.Get())
{
string Caption = o["Caption"].ToString();
lblHDDChanels.Text += Caption + "\n\n";
if (Caption.Contains("Serial"))
{
lblInterface.Text = "S-ATA";
}
}
}
}
}
注意:首先添加.net freamwork 4.0的System.Management.dll的引用