如何使用C#/ .NET根据磁盘获取ATAPI SMART数据

时间:2017-08-14 19:06:08

标签: c# windows hard-drive

我想编写一个监视系统中磁盘或更多磁盘状态的应用程序。

我发现我可以通过WMI管理一个磁盘" root / wmi"和MSStorageDriver并查询这些实际值(数据和阈值),如下面的链接   - https://www.tensorflow.org/performance/xla/jit#step_3_run_with_xla 到目前为止,它运作良好: - )

但是,到目前为止我还没有管理过多个磁盘。我不知道如何根据磁盘获取SMART Data

有人可以帮我解决这个问题吗?

非常感谢, Quyen

1 个答案:

答案 0 :(得分:0)

我尝试并成功,我想分享这个问题的答案

  • 获取PNPDeviceID
  • 相应地获取PNPDevice的InstanceName
  • 从InstanceName
  • 获取S.M.A.R.T数据

示例代码

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