如何使用除WMI和asm代码之外的C ++程序获取处理器(CPU),SCSI,显示器和IDE的唯一编号(序列号/ ID)?
答案 0 :(得分:3)
由于您提到WMI,我假设您正在使用Windows。查找GetVolumeInformation()。
答案 1 :(得分:1)
在Windows上,您可以从环境变量* PROCESSOR _ **获取CPU信息,您可以从 vol 解析卷序列号,从 route print <解析MAC地址/ p>
如果你想让它跨平台(如果这是用于软件许可),那么像Linux这样的开源平台无论如何都会将问题提升到一个全新的水平,并且需要采用不同的方法。但是,通过解析标准工具的输出,您仍然可以获得大量信息。
你真的应该考虑WMI。在过去,BIOS会有所帮助,但它全部被HAL取代。
在这样的情况下,CodeProject 总是值得搜索。
答案 2 :(得分:1)
下面是我用来检索游戏的硬盘序列号的代码,因此欺骗者被永久禁止(并且他们无法在没有获得新驱动器的情况下重新进入!):
string GetMachineID()
{
// LPCTSTR szHD = "C:\\"; // ERROR
string ss;
ss = "Err_StringIsNull";
UCHAR szFileSys[255],
szVolNameBuff[255];
DWORD dwSerial;
DWORD dwMFL;
DWORD dwSysFlags;
int error = 0;
bool success = GetVolumeInformation(LPCTSTR("C:\\"), (LPTSTR)szVolNameBuff,
255, &dwSerial,
&dwMFL, &dwSysFlags,
(LPTSTR)szFileSys,
255);
if (!success) {
ss = "Err_Not_Elevated";
}
std::stringstream errorStream;
errorStream << dwSerial;
return string(errorStream.str().c_str());
}
虽然 是一个潜在的错误,如果将Windows安装到C:\
以外的驱动器上,这是一个简单的解决方法。