2017-08-14 359 views
0

我想編寫一個應用程序來監視系統中磁盤或多個磁盤的狀態。如何根據使用C#/ .NET的磁盤獲取ATAPI SMART數據

我發現我可以通過WMI「根/ WMI」和MSStorageDriver管理一個盤和查詢這些對實際值(數據和閾值),然後點擊以下鏈接 - http://wutils.com/wmi/root/wmi/msstoragedriver_atapismartdata/ 到目前爲止,它運作良好: - )

但是,直到現在我還沒有管理多個磁盤。我不知道如何根據磁盤獲取SMART數據

任何人都可以幫我解決這個問題嗎?

非常感謝, Quyen

回答

0

我嘗試並取得成功,我想和大家分享的回答此問題

  • 獲取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