- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试获取外部 USB 驱动器的 SMART 信息。我正在使用以下查询来获取驱动器的温度,但是查询总是返回集合中的单个对象,这是我的内部硬盘。
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();
}
}
到目前为止,我已经尝试了来自不同供应商的 3 种不同的驱动器,但我尝试获取信息的所有尝试都失败了。
我做错了什么以及如何通过 WMI 获取外部驱动器的 SMART 信息?
编辑:我试过 PassMarks's DiskCheckup并且能够获取所有驱动器的SMART信息。
编辑2:
深入挖掘,我在 SmartMonTools 中找到了这一段Windows下INSTALL文件:
SCSI and USB devices are accessed through SPTI. Special driver support is not required.
现在我想我只需要将其放入 WMI 查询中,有人可以帮忙吗?
最佳答案
SMART是 ATA 标准的一部分。甚至 WMI 类的名称也反射(reflect)了这一点。
当您通过 USB 插入设备时,它会使用 USB 大容量存储协议(protocol)与您的系统通信。它根本不支持 SMART。通常,USB 连接的硬盘与 USB 连接的 pendrive 或 SD 卡没有什么不同,因此 SMART 在这里没有意义。 SCSI、Firewire 等也是如此,它们是不同的协议(protocol)。您不知道另一端是什么,它可能根本不会说 ATA。
某些协议(protocol),例如USB硬盘使用的协议(protocol),允许ATA命令通过不同的协议(protocol)层传递,正如您所说,SPTI就是其中一种方法。虽然它被许多设备支持,但它有点 hack 并且可能不是每个 USB 磁盘 Controller 都支持,甚至可能导致问题(任何 ATA 数据包都可能通过,这可能很危险) . RAID 设备可能使用其他专有协议(protocol)来传递 ATA 命令。
所以基本上,没有与这些设备通信的通用协议(protocol),尽管我不能绝对肯定,但我很确定 WMI 不支持它,因为这是一项非常复杂的任务。
Smartmontools 有一个巨大的设备、磁盘和 Controller 数据库(请查看 drivedb.h 了解情况,它很大),它经过测试并定期更新,这就是它知道如何与这些设备中的每一个进行通信的方式。基本上是低级装置巫毒魔法。操作系统通常不需要知道所有这些东西,他们只知道如何使用相应的驱动程序来使用 USB、Firewire、RAID 设备等。这些驱动程序通常不会跨越协议(protocol)边界。
所以我建议你使用 smartmontools 并解析它的输出,它会让你省去很多痛苦。
关于c# - 无法获得 S.M.A.R.T.外部驱动器的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24887956/
在过去的几个月里,我一直在研究 Haskell,我遇到了一个我不太确定如何处理的单子(monad)的情况。 我有一个 a -> m a 类型的值第二个类型为 m (a -> a)我需要对它们进行组合,
仿函数有 (a -> b) -> m a -> m b 应用程序有 f (a -> b) -> f a -> f b Monad 有 m a -> (a -> m b) -> m b 但是,是否有扩展
我是 Haskell 的新手,我想知道是否有比 Hoogle 更好的方法来确定一个库功能是否重复? 举个例子:我有很多函数f :: Monad a => a -> m a我想链接在一起,比如 f123
将存储在一系列列表中的 m、m、n 维数组组合成一个 m、m、n 维数组的方法是什么? 示例: 这是三个包含 m,m,n 维数组的列表: list1 <- array (1, dim = c(5, 5
有没有办法写一个函数f::(a -> b -> ... -> t) -> (Monad m => m a -> m b -> ... -> m t ),基本上是 liftMn 对于任何 n? (编辑:
我有一个像这样的 pandas 数据框: df = pd.DataFrame({'A':[1,3,2,9],'B':[2,1,2,7],'C':[7,2,4,6],'D':[8,1,6,4]},ind
这个问题来自文章“Trivial Monad”,地址:http://blog.sigfpe.com/2007/04/trivial-monad.html 。提供的答案是 h x y = x >>= (
所以>>= :: m a -> (a -> m b) -> m b和>> :: m a -> m b -> m b . 而 f b -> f a . 但我想要一些能m a -> (a -> m b)
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 3 年前。 Improve
当我安装 rakudo来源: $ git clone git@github.com:rakudo/rakudo.git $ cd rakudo $ perl Configure.pl --gen-mo
我正在尝试通过查看一些练习来提高我的 Idris 技能 Software Foundations (最初是为 Coq 设计的,但我希望对 Idris 的翻译不会太糟糕)。我在使用 "Exercise:
我想知道以下是否可行。 与服务器交换密码时,应保护密码。因此,用户可以使用生成的 key kUser 来加密密码。 Encrypt(m, kUser) 生成加密消息 eU(m)。现在用户将此信息发送到
这两个表之间存在什么样的关系(1:1、1:m、m:m,等等)? CREATE TABLE IF NOT EXISTS `my_product` ( `id` int(11) NOT NULL au
有人可以解释类型的含义以及如何实现吗? class Foldable f where foldMap :: (Monoid m) => (a -> m) -> f a -> m 基于 https:
例如,在 MVC 应用程序中,我可以使用 Html 助手来创建这样的标签: @Html.LabelFor(m => m.ProductName) 我没有在任何地方声明变量“m”,但 IDE 会自动找出
更新:澄清、更明确的重点和缩短的示例: 我可以避免 M op+(M&&,M&&) 过载吗?假设,我想很好地处理 RValues?我想其他三个重载是必需的。 我首先使用 (&&,&&) 重载的原因: 通
假设我有一个函数,它接受两个向量并返回一个整数,例如一个向量中也存在另一个向量中的元素数量。喜欢: f m [,1] [,2] [,3] [1,] "c" "i" "c" [2,] "
我想将字符串(字幕)转换为: 585 00:59:59,237 --> 01:00:01,105 - It's all right. - He saw us! 586 01:00:01,139 -->
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
是否可以将 Linux 中的大文件将 d.m.Y h:m:s 转换为 Y-d-m h:m:s? 示例数据 "30.07.2016 00:00:00",DN123,PAPN,PAPN,TEST,9189
我是一名优秀的程序员,十分优秀!