通过BIOS信息检测虚拟机

VMware的虚拟机BIOS信息(太长,只显示部分)如下:

通过BIOS信息检测虚拟机_第1张图片

代码(msdn上面有代码例子)如下,具体使用GetSystemFirmwareTable( )函数:

#include 
#include 

// 定义BIOS信息结构体
struct RawSMBIOSData
{
    BYTE    Used20CallingMethod;
    BYTE    SMBIOSMajorVersion;
    BYTE    SMBIOSMinorVersion;
    BYTE    DmiRevision;
    DWORD    Length;
    BYTE    SMBIOSTableData[];
};

int main()
{
    int dwSize = GetSystemFirmwareTable('RSMB',0, NULL, 0);
    RawSMBIOSData* pBuffer = (RawSMBIOSData*)malloc(dwSize);
    memset(pBuffer,0,dwSize);
    int dwWriteSize=GetSystemFirmwareTable('RSMB',0,pBuffer,dwSize);
    if( dwWriteSize<=dwSize )
    {
        for( int i=0; iLength; i++)
        {
            if(pBuffer->SMBIOSTableData[i] == 'V')
            {
                if(strncmp((const char*)&(pBuffer->SMBIOSTableData[i]),"VMware",6) == 0)
                {
                    printf("程序运行在虚拟机中!!!\n");
                    break;
                }
            }
        }
    }
    free(pBuffer);
    system("pause");
    return 0;
}

运行结果:

你可能感兴趣的:(Windows,API)