【问题标题】:Getting manufacturer serialnumber of system harddrive with WMI使用 WMI 获取系统硬盘的制造商序列号
【发布时间】:2016-08-28 08:44:03
【问题描述】:

我想在我的 c++ 项目中使用 WMI 获取系统 HDD 的制造商序列号。

我已经能够从 Win32_DiskDrive 类中查询 SerialNumber。 但是,这会返回四个序列号,因为我有四个 HDD。我只想知道我的系统盘的硬盘序列号,但我无法格式化正确的查询。

以前有人做过这个并且知道如何构造这个查询吗?

【问题讨论】:

  • 问问自己是什么让系统盘成为系统盘。就是分区。查看Win32_DiskPartition 并获取系统partition
  • 我要做的是获取 c: 分区和该分区所在磁盘的 de 制造商序列号之间的关系。 Win32_DiskPartition 不提供所有这些信息。
  • 'Win32_DiskPartition 不提供所有这些信息' 当然不是。但它拥有磁盘索引,该索引标识分区所在的 磁盘

标签: c++ wmi wmi-query


【解决方案1】:

要获得您的系统HDD,首先您必须找出哪个硬盘磁盘 保存您的系统分区


使用Win32_DiskPartition 检索DiskIndex 属性并使用它来查询Win32_DiskDrive 及其Index 属性。

两者都是Uint32

This SO Answer 描述了一种检索与卷关联的磁盘驱动器的方法。

"How can I correlate logical drives and physical Drives" on TechNet 也可能有帮助。

【讨论】:

    【解决方案2】:

    首先您必须弄清楚您的SystemDrive 是什么,然后查询其他WMI 表以获取serialNumber。 WMI 将序列号保存在许多表中,您必须更好地选择哪个表可以满足您的用例。如果 serialNumber 是您唯一的用例,请查询 Win32_LogicalDisk,如果不是,请写评论,我们可以从那里开始工作:)

    Select SystemDrive  from Win32_OperatingSystem
    
    Select VolumeSerialNumber  FROM Win32_LogicalDisk where (DriveType = '2' or DriveType = '3') AND deviceid= '<SystemDrive>'
    

    更新

    Select  Index from Win32_DiskPartition where BootPartition ='TRUE'
    Select  SerialNumber from Win32_DiskDrive where index='<Index>'
    

    注意:给几台机器试一下。

    【讨论】:

    • 感谢回复,我需要 Win32_DiskDrive 的序列号。
    • 你好阿米特,你的回答很有帮助。我没有足够的代表将此标记为答案。我唯一想到的是我有一个双启动系统(Win8 en Win10),并且两个操作系统都在一个单独的磁盘上。在测试我的代码时,两个系统都返回了相同的引导分区。所以我在Win10时无法获得我的Win10磁盘的序列号,在Win8中也是如此。对于我的用例,解决方案很好,但这不是我最初计划的。谢谢!
    【解决方案3】:

    1.GetSystemDirectory() 获取系统分区。例如C:\Windows\System32,C:为系统分区。

    2.从Win32_DiskPartition获取系统分区的DiskIndex

    3.从Win32_DiskDrive中获取DiskIndex为第2步的序列号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2011-05-04
      • 2016-06-10
      • 2012-03-07
      • 2014-01-11
      相关资源
      最近更新 更多