如何在没有WMI的情况下获得独特的机器签名

时间:2009-05-16 12:57:59

标签: windows uniqueidentifier system-information

我知道已经询问question是否为机器生成了唯一的ID,但我的问题略有不同。

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

3 个答案:

答案 0 :(得分: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用户拥有盗版副本并共享相同的产品密钥。

答案 1 :(得分:2)

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

例如,CPU ID,MAC地址等。您可以检索它们,组合它们,对它们进行加密,并且您拥有该机器硬件设置的唯一表示。

尝试使用Google搜索主题:如何阅读硬件信息。

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

答案 2 :(得分:1)

查看WinAPI的kernel32和user32库。它有各种好处,如EnumDisplayDevicesGetLogicalDrivesGlobalMemoryStatusGetVolumeInformation等等。我喜欢使用PInvoke来浏览API,因为它给我C#包装器代码 - 但MSDN将在Windows SDK中提供所有这些代码。

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