解决方案 »

  1.   

    DWORD iSignature =             'R'; //RSMB
    iSignature = iSignature << 8 | 'S';
    iSignature = iSignature << 8 | 'M';
    iSignature = iSignature << 8 | 'B';
    int iBufferSizeNeeded = GetSystemFirmwareTable( iSignature, 0, 0, 0 );
    char buff[1024*2] = {0};
    GetSystemFirmwareTable( iSignature, 0, buff, iBufferSizeNeeded);
    RawSMBIOSData *p;
    p = (RawSMBIOSData *)buff;
    if(p->Length != iBufferSizeNeeded - 8)
    {
    return 0;
    }
    p->SMBIOSTableData = (BYTE *)(buff + 8);
    int size;
    size = 0;
    while(size < p->Length)
    {
    if(p->SMBIOSTableData[size] > 32)
    {
    printf("%s\n",p->SMBIOSTableData + size);
    }
    size += (int)strlen(buff + size) + 1;
    }
      

  2.   

    请问下怎么解析RawSMBIOSData 中的值啊
      

  3.   

    xianglitian的回帖MSDN網址內就有說明RawSMBIOSData啦~#include <windows.h>struct RawSMBIOSData
    {
        BYTE    Used20CallingMethod;
        BYTE    SMBIOSMajorVersion;
        BYTE    SMBIOSMinorVersion;
        BYTE    DmiRevision;
        DWORD    Length;
        BYTE    SMBIOSTableData[];
    };