首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能在没有WMI的情况下在linux和C#中获得HWID?

是否有可能在没有WMI的情况下在linux和C#中获得HWID?
EN

Stack Overflow用户
提问于 2011-07-17 02:30:19
回答 1查看 1.9K关注 0票数 0

)我正在编写一个C#应用程序,需要为运行代码的计算机获取HWID代码。因为这是一个控制台,所以我需要找到一种方法来找到用于CPU、主板和硬盘的HWID,没有使用。由于system.management在linux上不可用,所以我需要它而不用它。有没有可能在没有WMI的情况下找到HWID?或者我能找到一种方法来使用linux的WMI来找到HWID吗?

在C#中可以这样做吗?如果有人告诉我如何开始,或者指出正确的方向,我将不胜感激。谢谢大家!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-17 02:38:16

尝试这个链接,但不确定它是否能在linux上工作。

更新的

代码语言:javascript
复制
private string GetUID()
{
    StringBuilder strB = new StringBuilder();
    Guid G = new Guid(); HidD_GetHidGuid(ref G);

    strB.Append(Convert.ToString(G));

    IntPtr lHWInfoPtr = Marshal.AllocHGlobal(123); HWProfile lProfile = new HWProfile();
    Marshal.StructureToPtr(lProfile, lHWInfoPtr, false);

    if (GetCurrentHwProfile(lHWInfoPtr))
    {
        Marshal.PtrToStructure(lHWInfoPtr, lProfile);
        strB.Append(lProfile.szHwProfileGuid.Trim(new char[] { '{', '}' }));
    }
    Marshal.FreeHGlobal(lHWInfoPtr);

    SHA256CryptoServiceProvider SHA256 = new SHA256CryptoServiceProvider();
    byte[] B = Encoding.Default.GetBytes(strB.ToString());

    string outStr = BitConverter.ToString(SHA256.ComputeHash(B)).Repla ce("-", null);

    for(int i = 0;i < 64; i++)
    {
        if (i % 16 == 0 && i != 0) 
            outStr = outStr.Insert(i, "-");
    } 

    return (outStr);
}

[DllImport("hid.dll")]
private static extern void HidD_GetHidGuid(ref Guid GUID);

[DllImport("advapi32.dll", SetLastError = true)]
static extern bool GetCurrentHwProfile(IntPtr fProfile);

[StructLayout(LayoutKind.Sequential)]
class HWProfile
{
    public Int32 dwDockInfo;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 39)]
    public string szHwProfileGuid;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
    public string szHwProfileName;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6721572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档