如何获取硬盘的序列号

时间:2009-10-14 11:11:10

标签: c++ adapter scsi

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

3 个答案:

答案 0 :(得分:3)

由于您提到WMI,我假设您正在使用Windows。查找GetVolumeInformation()

答案 1 :(得分:1)

在Windows上,您可以从环境变量* PROCESSOR _ **获取CPU信息,您可以从 vol 解析卷序列号,从 route print <解析MAC地址/ p>

如果你想让它跨平台(如果这是用于软件许可),那么像Linux这样的开源平台无论如何都会将问题提升到一个全新的水平,并且需要采用不同的方法。但是,通过解析标准工具的输出,您仍然可以获得大量信息。

你真的应该考虑WMI。在过去,BIOS会有所帮助,但它全部被HAL取代。

在这样的情况下,CodeProject 总是值得搜索。

How To Get Hardware Information

答案 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:\以外的驱动器上,这是一个简单的解决方法。