【问题标题】:How to get unique machine signature without WMI?如何在没有 WMI 的情况下获得唯一的机器签名?
【发布时间】:2010-10-26 17:19:31
【问题描述】:

我知道 question 已经被问及如何为机器生成唯一 ID,但我的问题略有不同。

我想知道是否有任何其他方法(API 调用?)来获取硬件信息而不使用 WMI。我从MSDN 了解到,WMI 是在 Win2000 中引入的,所以它似乎在 Win98 中不可用。我有一个即使在 Win98 上也必须运行的应用程序(我知道这很糟糕,但你能做什么?)并且仍然掌握硬件信息。

【问题讨论】:

  • 您希望您的示例使用哪种语言?
  • 我正在寻找可以为我提供此信息的适当 API 调用。任何语言(C#、C++、C、Pascal)的示例都可以。

标签: windows uniqueidentifier system-information


【解决方案1】:

我已经为许可项目做了几次。硬盘序列号使用:

private static extern long GetVolumeInformation(string PathName, StringBuilder VolumeNameBuffer, UInt32 VolumeNameSize, ref UInt32 VolumeSerialNumber, ref UInt32 MaximumComponentLength, ref UInt32 FileSystemFlags, StringBuilder FileSystemNameBuffer, UInt32 FileSystemNameSize);

使用函数返回的VolumeSerialNumber

此外,您可能已经考虑过使用 Windows 产品 ID(位于 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId)。请注意,大量 Windows XP 用户拥有盗版副本并共享相同的产品密钥。

【讨论】:

  • MSDN online 会告诉您GetVolumeInformation 仅在Windows 2000 中可用,但事实并非如此。最新版本的 MSDN 库内容喜欢否认 Windows 9x 的存在,但如果您查看旧版本的 MSDN 库(我查看了 Visual Studio 2005 附带的库),它显示 GetVolumeInformation is 在 Windows 98 中可用。
【解决方案2】:

您可以组合不同的硬件信息以创建唯一的密钥。

例如,CPU ID、MAC 地址等。你检索它们、组合它们、加密它们,你就有了这台机器硬件设置的唯一表示。

尝试在谷歌上搜索相关主题:如何读取硬件信息。

据我所知,CodeProject 中有一篇非常有用的帖子:How To Get Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information , ...)

【讨论】:

  • 这正是问题所在! 如何获取这些信息?
  • 示例指的是 .NET 2.0,它可以满足您的 Win98 要求
【解决方案3】:

查看 WinAPI 的 kernel32 和 user32 库。它有各种好东西,如EnumDisplayDevicesGetLogicalDrivesGlobalMemoryStatusGetVolumeInformation 等。我喜欢使用PInvoke 来浏览 API,因为它给了我 C# 包装器代码 - 但 MSDN 会在 Windows SDK 中也有这一切。

@novatrust 关于硬盘驱动器序列的回答是一个很好的答案 - 但可以与更多组合。我已经在上面提供了 pinvoke 的 GetVolumeInformation API 链接,但是一个简单的 Google 也应该可以工作。

【讨论】:

    猜你喜欢
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多