Win32_PhysicalMedia为非管理员用户返回不同的序列号

vib*_*bgy 6 c# wmi serial-number

我使用以下查询来获取硬盘序列号.

ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
Run Code Online (Sandbox Code Playgroud)

它为admin用户和非admin用户返回不同的序列号,如下所示:

管理员 - WD-WCAYUS426947 非管理员 - 2020202057202d44435759415355323439363734

当试图将非管理员序列放入十六进制到char转换器时,它给了W-DCWYASU249674,这实际上是每2个字符的字符交换.

有没有想要获取正确的序列而不需要使用非hexed格式?

Jev*_*sen 5

正如评论中所述:这似乎是Windows中一个未解决的错误,尽管微软知道它.

解决它的方法是转换十六进制字符串并交换数字,我写了一个为你做这个的方法,随意根据你的需要编辑它:

    public static string ConvertAndSwapHex(string hex)
    {
        hex = hex.Replace("-", "");
        byte[] raw = new byte[hex.Length / 2];
        for (int i = 0; i < raw.Length; i++)
        {
            int j = i;
            if (j != 0)
            {
                j = (j % 2 == 1 ? j-1 : j+1);
            }
            raw[j] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
        }
        return System.Text.Encoding.UTF8.GetString(raw).Trim(' ', '\t', '\0');
    }
Run Code Online (Sandbox Code Playgroud)