잘못된 클래스를 사용하고 있습니다 (MSStorageDriver_ATAPISmartData를 원함). 당신이 (예를 들어, 0x02의 처리 성능을 위해)
[StructLayout(LayoutKind.Sequential)]
public struct Attribute
{
public byte AttributeID;
public ushort Flags;
public byte Value;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] VendorData;
}
static void getSMARTAttr()
{
try
{
Attribute AtributeInfo;
ManagementScope Scope = new ManagementScope(String.Format("\\\\{0}\\root\\WMI", "localhost"), null);
Scope.Connect();
ObjectQuery Query = new ObjectQuery("SELECT VendorSpecific FROM MSStorageDriver_ATAPISmartData");
ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query);
byte SpinRetryCount = 0x0A;
int Delta = 12;
foreach (ManagementObject WmiObject in Searcher.Get())
{
byte[] VendorSpecific = (byte[])WmiObject["VendorSpecific"];
for (int offset = 2; offset < VendorSpecific.Length;)
{
if (VendorSpecific[offset] == SpinRetryCount)
{
IntPtr buffer = IntPtr.Zero;
try
{
buffer = Marshal.AllocHGlobal(Delta);
Marshal.Copy(VendorSpecific, offset, buffer, Delta);
AtributeInfo = (Attribute)Marshal.PtrToStructure(buffer, typeof(Attribute));
Console.WriteLine("AttributeID {0}", AtributeInfo.AttributeID);
Console.WriteLine("Flags {0}", AtributeInfo.Flags);
Console.WriteLine("Value {0}", AtributeInfo.Value);
//if you want HEX values use this line
//Console.WriteLine("Value {0}", BitConverter.ToString(AtributeInfo.VendorData));
//if you want INT values use this line
Console.WriteLine("Data {0}", BitConverter.ToInt32(AtributeInfo.VendorData, 0));
}
finally
{
if (buffer != IntPtr.Zero)
{
Marshal.FreeHGlobal(buffer);
}
}
}
offset += Delta;
}
}
}
catch (Exception e)
{
Console.WriteLine(String.Format("Exception {0} Trace {1}", e.Message, e.StackTrace));
}
Console.WriteLine("Press Enter to exit");
Console.Read();
}
을 기원합니다 그리고 당신은 0 이외의 것을 얻을 경우, 새 하드 드라이브를 구입해야한다는 것을 기억 어떤 값 byte SpinRetryCount = 0x0A;
을 변경하려는 속성 무엇 변경하려면! 또한이 코드는 UAC 권한 상승이 필요하므로 관리자 권한으로 응용 프로그램을 실행해야합니다. 그렇지 않으면 예외가 발생합니다.
다음은 답변입니다. http://blogs.msdn.com/b/clemensv/archive/2011/04/11/reading-atapi-smart-data-from-drives-using-net-temperature-anyone. aspx – Kamil
잘못된 수업을 검색하고 있습니다. MSStorageDriver_ATAPISmartData 클래스를 찾아서 읽습니다. 자세한 내용은 Google MSStorageDriver_ATAPISmartData를 참조하십시오. – Kamil
@CJxD MSStorageDriver_ATAPISmartData 클래스에 액세스하여 deta를 선택하고 올바른 바이트를 올바른 구조 (바이트, 사용자 지정, int 등)에 매핑해야합니다. –