1

如何使用 WMI 和 asm 代码以外的 C++ 程序获取处理器 (CPU)、SCSI、显示器和 IDE 的唯一编号(序列号/ID)?

4

3 回答 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 回答