0

こんにちは:)私はC#アプリケーションを作成していて、コードが実行されているコンピューターのHWIDコードを取得する必要があります。これはコンソールなので、WMIを使用せずに、CPU、マザーボード、およびHDDのHWIDを見つける方法を見つける必要があります。system.managementはLinuxで利用できないので、それを使用せずに必要です。WMIなしでHWIDを見つけることは可能ですか?または、Linux用のWMIを使用してHWIDを見つける方法を見つけることができますか?

C#でこれを行うことは可能ですか?誰かが私に方法を教えてくれたり、始めるための正しい方向に私を向けてくれたら幸いです。皆さん、ありがとうございました!

4

1 に答える 1

1

このリンクを試してみてください。ただし、Linuxで機能するかどうかはわかりません。

更新しました

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;
}
于 2011-07-17T02:38:16.637 に答える