我知道已经询问question是否为机器生成了唯一的ID,但我的问题略有不同。
我想知道是否有其他方法(API调用?)来获取硬件信息而不使用WMI。我从MSDN了解WMI是在Win2000中引入的,因此它似乎在Win98中不可用。我有一个应用程序,甚至必须在Win98上运行(我知道它很糟糕但你能做什么?)并且仍然掌握硬件信息。
答案 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库。它有各种好处,如EnumDisplayDevices
,GetLogicalDrives
,GlobalMemoryStatus
,GetVolumeInformation
等等。我喜欢使用PInvoke来浏览API,因为它给我C#包装器代码 - 但MSDN将在Windows SDK中提供所有这些代码。
GetVolumeInformation
API链接,但是一个简单的Google应该也可以使用。