无法获得 S.M.A.R.T.外部驱动器的信息

2024-05-01

我正在尝试获取外部 USB 驱动器的 SMART 信息。我使用以下查询来获取驱动器的温度,但是该查询始终返回集合中的单个对象,即我的内部 HDD。

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 的磁盘检查 http://www.passmark.com/products/diskcheckup.htm并且它能够获取所有驱动器的SMART信息。

EDIT2:

深入挖掘,我发现了这一段SmartMon工具 http://www.smartmontools.org/Windows下安装文件:

SCSI 和 USB 设备通过以下方式访问SPTI。特殊驱动支持 不需要。

现在我想我需要的就是将其放入 WMI 查询中,有人可以帮忙吗?


SMART http://en.wikipedia.org/wiki/S.M.A.R.T.是 ATA 标准的一部分。甚至 WMI 类的名称也反映了这一点。

当您通过 USB 插入设备时,它会通过 USB 大容量存储协议与您的系统进行通信。它根本不支持SMART。一般来说,USB 连接的硬盘与 USB 连接的随身碟或 SD 卡没有什么不同,因此 SMART 在这里没有任何意义。 SCSI、Firewire 等也是如此,它们是不同的协议。您不知道另一端是什么,它可能根本不支持 ATA。

某些协议,例如 USB 硬盘使用的协议,允许 ATA 命令通过不同的协议层传递,正如您所说,SPTI 就是其中一种方法。尽管许多设备都支持它,但它是一种 hack,可能并非每个 USB 磁盘控制器都支持,甚至可能会导致问题(anyATA 数据包可能会被传递,这可能很危险)。 RAID 设备可以使用其他专有协议来传递 ATA 命令。

所以基本上,没有通用协议可以与这些设备通信,尽管我不能绝对肯定,但我很确定 WMI 不支持它,因为这是一项非常复杂的任务。

Smartmontools 拥有庞大的设备、磁盘和控制器等数据库(查看驱动数据库.h http://www.smartmontools.org/browser/trunk/smartmontools/drivedb.h对于洞察力来说,它是巨大的),它经过测试并定期更新,这就是它知道如何与每个设备进行通信的方式。基本上是低级装置巫术魔法。一般来说,操作系统不需要知道所有这些东西,它们只需要足够了解如何使用相应的驱动程序来使用 USB、Firewire、RAID 设备等。这些驱动程序通常不会跨越协议边界。

所以我建议你使用 smartmontools 并解析它的输出,它会让你免去很多痛苦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法获得 S.M.A.R.T.外部驱动器的信息 的相关文章

  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • 实体框架代码优先 - 在另一个文件中配置

    使用 Fluent API 将表到实体的映射分开的最佳方法是什么 以便它全部位于单独的类中 而不是内联在 OnModelCreating 方法中 我目前在做什么 public class FooContext DbContext prote
  • 有没有比这更快的方法来查找目录和所有子目录中的所有文件?

    我正在编写一个程序 需要在目录及其所有子目录中搜索具有特定扩展名的文件 这将在本地驱动器和网络驱动器上使用 因此性能是一个问题 这是我现在使用的递归方法 private void GetFileList string fileSearchP
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • CMake - 将预构建库链接到 C# 项目

    我正在使用 CMake 构建 C 库 该库依赖于已构建的库 dll 我似乎无法让图书馆链接到我的图书馆 我尝试过使用target link libraries mylib external lib 我也尝试过暴力破解 reference e
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 最后从同一类中的其他构造函数调用构造函数

    我在这里读到可以调用另一个构造函数从同一类中的另一个构造函数调用构造函数 https stackoverflow com questions 829870 calling constructor from other constructor

随机推荐

  • 如何更改matplotlib中填充线的线宽?

    有没有办法增加 matplotlib 中剖面线的宽度 例如 下面的代码通过指定linewidth仅改变边缘的宽度 我想更改用于填充的线的线宽 import matplotlib pyplot as plt import numpy as n
  • 在 WPF 中展开 TreeView 时显示“请稍候...”消息

    我的 TreeView 中有很多项目 而且项目也非常复杂 我不想使用虚拟化 展开 TreeView 有时需要花费大量时间 因此 是否有任何事件 例如 IsTreeViewExpanding 或类似的事件 我可以在其中显示 正在生成 Tree
  • 替换 lambda 表达式中的参数类型

    我正在尝试将 lambda 表达式中的参数类型从一种类型替换为另一种类型 我在 stackoverflow 上找到了其他答案 即this one https stackoverflow com questions 11159697 repl
  • 修改文本文件而不读入内存

    我试图找出一种修改文本文件 特别是删除特定行 的方法 而无需将文件的大部分读取到内存中或重写整个文件 这里讨论的是大于主内存约 15 50 Gigs 的文件 附 我正在使用Linux 你不会逃避创建一个新文件 所以就硬着头皮去做吧 使用gr
  • 在汇编中显示两位数? [复制]

    这个问题在这里已经有答案了 我对汇编编程完全陌生 在课堂作业的示例中 需要将两个数字相加并显示总和 我发现神秘的是当其是两位数时显示总和 这是我的代码 mov al num1 mov bl num2 add al bl add ax 303
  • 我应该为每个选项卡栏使用单独的 UINavigationController

    根据Apple https developer apple com library ios documentation WindowsViews Conceptual ViewControllerCatalog Chapters Combi
  • Node.js、EventEmitter 为什么使用它

    我有一个问题events EventEmitter在 Node js 中 为什么使用它 示例1和示例2有什么区别 我发现它们是相同的 是吗 什么时候可以实际使用它 let events require events let util req
  • 在 Libgdx 中实现简单运动模糊的意外结果

    在所附的两张图片中 libgdx 的桌面屏幕截图按预期运行 不幸的是 我的 Galaxy Nexus 的屏幕截图与预期不符 我正在尝试创建一个简单的运动模糊或轨迹效果 Rendering as I expected on my deskto
  • C++:输入和输出流运算符:结合性

    输入 输出流运算符理论上的结合性 左到右 例如 根据这个 圣玛丽大学网站 http cs smu ca porter csc ref cpp operators html 输入 输出流运算符结合性实践 include
  • 开源html解析类无法正确解析段落之间的空格

    我正在使用一种开源方法 将 html 文本解析为 NSString 生成的字符串在前几个段落之间有大量空格 但后续段落只有一行空格 这是输出的示例 Below is the method I m calling I ve only chan
  • 如何在 ASP.NET 中将下拉列表与字符串数组绑定?

    我可以通过这样做将下拉列表与字符串数组绑定 不确定这是否是正确的实现方法 string items 111 222 333 ddlSearch DataSource items ddlSearch DataBind 然而 我真正想要的是 当
  • 使用并发.futures.ProcessPoolExecutor 动态创建函数的限制

    我正在尝试使用我在其他函数中动态创建的函数进行一些多重处理 如果提供给 ProcessPoolExecutor 的函数是模块级的 我似乎可以运行这些 def make func a def dynamic func i return i i
  • 仅在一个 JTable 单元格中的复选框

    我想创建一个JTable有 2 列 看起来像一个调查 所以左边是问题 右边是用户可以给出他的答案 但在一行的右侧应该有一个复选框 以便用户只能回答是或否 这可以用JTable 我怎样才能做到这一点 regards 您在评论中指出 我用一列
  • 如何从 CloudFormation 中的 Elastic Beanstalk 环境中提取负载均衡器名称

    我使用以下代码片段在 CloudFormation 中创建了 Elastic Beanstalk 和 CloudWatch 警报 ElasticBeanstalkEnvironment Type AWS ElasticBeanstalk E
  • 使用 Mapstruct 将对象列表转换为长 ID 列表

    我在用MapStruct将实体转换为 DTO 我有一个实体 A 和实体 B 的列表 public class A List b bs 我想要 ADto 类中的 B id 列表 public class ADto List b
  • 如何禁用将包上传到 PyPi 除非将 --public 传递给上传命令

    我正在开发包并将包的开发 测试 等版本上传到本地 devpi 服务器 为了防止意外上传到PyPi 我采用了以下常见做法 setup classifiers Programming Language Python Programming La
  • 是否可以在选择器中进行修剪?

    我想计算表单中所有为空的输入 对于空 我的意思是它的值在修剪其值后为空 如果用户插入空格也为空 这个 jquery 对它们进行计数 但不包括修剪 text filter value length 有一些 jquery 可以用来在选择器中修剪
  • 如何继续使用适用于 AWS Cognito 的 AD FS SAML?

    我正在设置 AD FS 来生成 SAML 元数据以连接到 AWS Cognito 用户池 我已经生成了 xml 元数据并将其上传到用户池 我应该在 AD FS 站点上创建信任中继吗 是否还有其他步骤可以让我的 AD 用户可用于 Web 应用
  • 如何集成Django和Cygwin?

    我有一个安装了 cygwin python 和 django 的 Windows 盒子 现在我想运行 django admin 但是当我这样做时 我收到错误 django admin py c Python26 python exe can
  • 无法获得 S.M.A.R.T.外部驱动器的信息

    我正在尝试获取外部 USB 驱动器的 SMART 信息 我使用以下查询来获取驱动器的温度 但是该查询始终返回集合中的单个对象 即我的内部 HDD ManagementObjectSearcher searcher new Managemen