如何使用 WMI 和 asm 代码以外的 C++ 程序获取处理器 (CPU)、SCSI、显示器和 IDE 的唯一编号(序列号/ID)?
shankara
问问题
9336 次
3 回答
3
既然你提到了 WMI,我假设你在 Windows 上工作。查找GetVolumeInformation()。
于 2009-10-23T13:29:46.193 回答
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:\
.
于 2014-11-01T08:28:58.577 回答
1
在 Windows 上,您可以从环境变量 *PROCESSOR_** 获取 CPU 信息,您可以从vol解析卷序列号,从路由打印中获取 MAC 地址
如果你想让它跨平台(如果这是为了软件许可),那么像 Linux 这样的开源平台无论如何都会将问题提升到一个全新的水平,并且需要一种不同的方法。但是,您仍然可以通过解析标准工具的输出来获取大量信息。
你真的应该考虑WMI。在过去,BIOS 会有所帮助,但它已全部被 HAL 取代。
在这种情况下, CodeProject总是值得搜索的。
于 2009-10-23T13:40:22.613 回答