如何根据使用C#/ .NET的磁盘获取ATAPI SMART数据
问题描述:
我想编写一个应用程序来监视系统中磁盘或多个磁盘的状态。如何根据使用C#/ .NET的磁盘获取ATAPI SMART数据
我发现我可以通过WMI“根/ WMI”和MSStorageDriver管理一个盘和查询这些对实际值(数据和阈值),然后点击以下链接 - http://wutils.com/wmi/root/wmi/msstoragedriver_atapismartdata/ 到目前为止,它运作良好: - )
但是,直到现在我还没有管理多个磁盘。我不知道如何根据磁盘获取SMART数据
任何人都可以帮我解决这个问题吗?
非常感谢, Quyen
答
我尝试并取得成功,我想和大家分享的回答此问题
- 获取PNPDeviceID
- 获取PNPDevice的实例名称相应
- 获取SMART数据来自InstanceName
示例代码
public string PNPDeviceID
{
set
{
this.m_PNPDeviceID = value;
this.InstanceName = null;
this.QueryObjATAPISmartData = null;
SearcherPnPDeviceId = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSWmi_PnPDeviceId");
foreach (ManagementObject queryObj in SearcherPnPDeviceId.Get())
{
if (queryObj["PNPDeviceID"] != null)
{
if (this.PNPDeviceID.ToUpper() == queryObj.GetPropertyValue("PNPDeviceID").ToString().ToUpper())
{
if (queryObj["InstanceName"] != null)
{
this.InstanceName = queryObj["InstanceName"].ToString();
break;
}
}
}
}
if (this.InstanceName != null)
{
SearcherATAPISmartData = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData");
foreach (ManagementObject queryObj in SearcherATAPISmartData.Get())
{
if (queryObj["InstanceName"] != null)
{
if (this.InstanceName.ToUpper() != queryObj.GetPropertyValue("InstanceName").ToString().ToUpper())
{
continue;
}
}
this.QueryObjATAPISmartData = queryObj;
break;
}
}
}
之后,你可以得到QueryObjATAPISmartData的任何性质
问候, Quyen