3

我知道已经问过一个关于为机器生成唯一 ID 的问题,但我的问题略有不同

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

4

3 回答 3

3

我已经为许可项目做了几次。对于硬盘驱动器序列号,请使用:

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 用户拥有盗版副本并共享相同的产品密钥。

于 2009-05-16T13:22:07.427 回答
2

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

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

尝试用谷歌搜索这个主题:如何阅读硬件信息。

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

于 2009-05-16T13:10:52.587 回答
1

查看 WinAPI 的 kernel32 和 user32 库。它有各种各样的好东西,比如EnumDisplayDevices, GetLogicalDrives, GlobalMemoryStatus, GetVolumeInformation, 等等。我喜欢使用PInvoke来浏览 API,因为它为我提供了 C# 包装器代码 - 但 MSDN 在 Windows SDK 中也将拥有这一切。

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

于 2009-05-16T13:21:51.233 回答