如何获得独特的机器签名没有WMI?

我知道一个问题已经被问及为机器生成一个唯一的ID,但是我的问题稍有不同。

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

Solutions Collecting From Web of "如何获得独特的机器签名没有WMI?"

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

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

查看WinAPI的kernel32和user32库。 它有EnumDisplayDevicesGetLogicalDrivesGlobalMemoryStatusGetVolumeInformation等各种好吃的东西。我喜欢使用PInvoke来浏览API,因为它给了我C#的包装代码 – 但是MSDN在Windows SDK中也可以。

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

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

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

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

从CodeGo.net,我可以看到有一个非常有用的职位: 如何获取硬件信息(CPU ID,主板信息,硬盘序列,系统信息,…) 。