2014-07-22 20 views
6

Tôi đang cố gắng để có được thông tin SMART cho ổ đĩa USB gắn ngoài. Tôi đang sử dụng các truy vấn sau đây để có được nhiệt độ của ổ đĩa, tuy nhiên truy vấn luôn luôn trả về một đối tượng duy nhất trong bộ sưu tập đó là ổ cứng bên trong của tôi.Không thể nhận được S.M.A.R.T. thông tin cho ổ đĩa gắn ngoài

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", 
"SELECT * FROM MSStorageDriver_ATAPISmartData"); 

foreach (ManagementObject queryObj in searcher.Get()) 
{ 
    if (queryObj["VendorSpecific"] != null) 
    { 
     byte[] arrVendorSpecific = (byte[])(queryObj["VendorSpecific"]); 
     string temp = arrVendorSpecific[115].ToString(); 
    } 
} 

Cho đến nay tôi đã thử 3 ổ đĩa khác nhau từ các nhà cung cấp khác nhau nhưng tất cả nỗ lực của tôi không nhận được thông tin.

Tôi đang làm gì sai và làm cách nào để có được thông tin SMART cho các ổ đĩa ngoài thông qua WMI?

EDIT: Tôi đã thử PassMarks's DiskCheckup và có thể nhận thông tin SMART cho tất cả các ổ đĩa.

EDIT2:

Đào sâu hơn tôi thấy đoạn này trong SmartMonTools INSTALL tập tin trong môi trường Windows:

SCSI và USB thiết bị được truy cập thông qua SPTI. Hỗ trợ trình điều khiển đặc biệt là không bắt buộc.

Bây giờ tôi nghĩ rằng tất cả những gì tôi cần là đưa điều đó vào truy vấn WMI, ai đó có thể trợ giúp?

+1

Nếu bạn tải xuống công cụ của bên thứ ba để xem thông tin SMART, nó có hoạt động với các ổ đĩa ngoài không? –

+0

Có, tôi chỉ thử [DiskMeckup của PassMark] (http://www.passmark.com/products/diskcheckup.htm) và nó có thể nhận được thông tin SMART cho các ổ đĩa. –

+0

@MobyDisk Tôi đã thêm một số thông tin khác vào bài đăng. Bạn có thể kiểm tra? –

Trả lời

1

SMART là một phần của tiêu chuẩn ATA. Ngay cả tên của lớp WMI cũng phản ánh điều đó.

Khi bạn cắm thiết bị qua USB, thiết bị sẽ liên lạc với hệ thống của bạn bằng giao thức bộ nhớ thứ cấp USB. Nó chỉ đơn giản là không hỗ trợ SMART. Nói chung, một ổ đĩa cứng gắn kèm USB không khác với ổ USB gắn thẻ SD hoặc thẻ SD, vì vậy SMART không có ý nghĩa gì ở đây. Cùng đi cho SCSI, Firewire, vv, họ là những giao thức khác nhau. Bạn không biết những gì ngồi ở đầu bên kia, nó có thể không nói ATA cả.

Một số giao thức, như giao thức được sử dụng bởi ổ cứng USB, cho phép các lệnh ATA được truyền qua các lớp giao thức khác nhau, như bạn đã nói, SPTI là một trong những phương pháp đó. Mặc dù nó được hỗ trợ bởi nhiều thiết bị nhưng nó có thể bị hack và có thể không được hỗ trợ bởi mọi bộ điều khiển đĩa USB hoặc thậm chí có thể gây ra sự cố (bất kỳ gói nào ATA có thể được truyền qua, điều này có thể nguy hiểm). Các thiết bị RAID có thể sử dụng các giao thức độc quyền khác để truyền qua các lệnh ATA. Vì vậy, về cơ bản, không có giao thức chung để nói chuyện với các thiết bị đó, và mặc dù tôi không thể hoàn toàn tích cực, tôi khá chắc chắn nó không được WMI hỗ trợ, bởi vì nó là một nhiệm vụ rất phức tạp.

Smartmontools có cơ sở dữ liệu khổng lồ về thiết bị, ổ đĩa và bộ điều khiển (xem drivedb.h để biết thông tin chi tiết), được kiểm tra và cập nhật thường xuyên, và đó là cách nó biết cách giao tiếp với từng thiết bị đó. Ma thuật voodoo thiết bị cấp thấp, về cơ bản. Hệ điều hành nói chung không cần phải biết tất cả những thứ đó, họ chỉ biết đủ để nói USB, Firewire, thiết bị RAID, vv, với các trình điều khiển tương ứng. Ranh giới giao thức vượt qua không phải là điều mà các trình điều khiển này thường làm.

Vì vậy, tôi khuyên bạn nên sử dụng smartmontools và phân tích đầu ra của nó, nó sẽ giúp bạn tiết kiệm rất nhiều đau đớn.

+0

Wow, cảm ơn vì lời giải thích, tôi thực sự đánh giá cao điều đó. Vì vậy, tôi đề nghị bạn sử dụng smartmontools và phân tích đầu ra của nó, nó sẽ giúp bạn tiết kiệm rất nhiều đau đớn.' Đáng buồn thay theo giấy phép hiện tại của họ, tôi không thể kết hợp smartmontools vào một ứng dụng thương mại. Sẽ cố gắng liên lạc với họ và xem có cách nào để làm điều đó cho các ứng dụng thương mại. –

Các vấn đề liên quan