如何根据使用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