小编Jim*_*Jim的帖子

转换WMI HDD序列号

我有一些代码从WMI获取硬盘序列号.

SelectQuery selectQuery = new SelectQuery("Win32_PhysicalMedia");
ManagementObjectSearcher searcher =
             new ManagementObjectSearcher(selectQuery);
foreach (ManagementObject wmi_PM in searcher.Get())
{
      string str = wmi_PM["SerialNumber"];
}
Run Code Online (Sandbox Code Playgroud)

起初我认为它正在工作并检索到正确的序列号.在尝试使用它进行比较之后,我发现WMI报告的数字并不完全正确.WMI序列号用一堆空格填充,并且字符被转置.

打印在贴纸上并由某些工具(可能使用DeviceIoControl)返回的实际驱动器序列号为"3RH8B1BG",但WMI返回"R38H1BGB".

Real Serial#:3RH8B1BG
WMI Serial#:R38H1BGB

一些工具,如SiSoftware Sandra,返回这个填充和转置的数字,但它不是实际的序列号.如果您转换每个其他位置,WMI值是序列号.这是正常的吗?我应该只是编码将其转换为正确的值吗?

我试图避免使用WMI,但似乎任何搜索如何在网上做某事现在带回WMI的例子.

不同制造商的2个不同硬盘的WMI值序列号都被转置,因此它不是单个磁盘.



更新:使用DeviceIoControl找到一些代码

     http://addressof.com/blog/archive/2004/02/14/392.aspx

令人惊讶的是,DeviceIoControl也返回一个转置的序列号.在上面的CorySmith代码中,它有一个SwapChars函数

Private Shared Function SwapChars(ByVal chars() As Char) As String
  For i As Integer = 0 To chars.Length - 2 Step 2
    chars.Reverse(chars, i, 2)
  Next
  Return New String(chars).Trim
End Function
Run Code Online (Sandbox Code Playgroud)

他提到的c ++代码有以下几点:

    //  function to decode the serial numbers of IDE hard drives
    // …
Run Code Online (Sandbox Code Playgroud)

c# wmi transpose serial-number

6
推荐指数
1
解决办法
4787
查看次数

标签 统计

c# ×1

serial-number ×1

transpose ×1

wmi ×1