首页查找驱动Windows 日常使用数据挖掘与人工智能搜索引擎与SEO技术备忘录站长随笔

利用Windows API 获取 BIOS的DMI信息

2019-08-15 Windows API 浏览次数:1320
 
话说现在用C/C++的人貌似越来越少了,想查点资料,发现以前大部分有关C/C++的资料都找不到了,几乎是JAVA和C#占据了整个版面。看来老一代的程序员在逐步的退出了,言归正传吧,不想多说了,上代码。

UINT GetSystemFirmwareTable(
DWORD FirmwareTableProviderSignature,
DWORD FirmwareTableID,
PVOID pFirmwareTableBuffer,
DWORD BufferSize
);

函数具体用法参考MSDN: https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemfirmwaretable

// 获取 BIOS DMI信息

// 申请一个内存区域,大概9M左右就行了,BIOS固件不会有多大的,不放心就多申请点内存

int BiosBufMaxLen=1024*1024*9;
char* BiosBuf=new char[MemoryBufMaxLen];
memset(BiosBuf,0,MemoryBufMaxLen);

// RSMB
DWORD iSignature='R';
iSignature=iSignature << 8 | 'S';
iSignature=iSignature << 8 | 'M';
iSignature=iSignature << 8 | 'B';
UINT BiosBufLen=GetSystemFirmwareTable(iSignature,0,BiosBuf,BiosBufMaxLen);
if (BiosBufLen > 8){
// 函数执行成功后,返回的数据结构是:RawSMBIOSData
RawSMBIOSData* lpRawSMBIOSData=(RawSMBIOSData*)BiosBuf;
if (lpRawSMBIOSData->Length==BiosBufLen-8){
// lpRawSMBIOSData->SMBIOSTableData 就是数据内容
// lpRawSMBIOSData->Length 是数据内容大小
}
}

delete[] BiosBuf;
BiosBuf=0;

// 有关 RawSMBIOSData 的数据结构
struct RawSMBIOSData
{
BYTE Used20CallingMethod;
BYTE SMBIOSMajorVersion;
BYTE SMBIOSMinorVersion;
BYTE DmiRevision;
DWORD Length;
BYTE SMBIOSTableData[];
}

本机获得的数据:



// 得到的数据需要自己解释啊,这是有关BIOS数据解释的PDF文档:dsp0134_3.2.0.pdf
留言

有啥想说的就说吧,有啥想问的就问吧
Good good study, day day up!

昵称

Email (填它做啥?国内不兴这玩意,但程序代码里有,我懒得删...)

    ToolBar:

    正在上传图片,请稍等...   

内容  (如果可以的话,最好有相关问题的几张图,特别是出现了错误的时候,当时弹出的错误消息,或者对话框之类的,截图传上来看看吧,这样才好知道具体情况)

查看 HTML 代码(只读模式), 点击返回编辑.

 
最新文章
 
求助
2019 - 2024 mypcrun.com
桂ICP备19002156号-1桂公网安备 45070202000667号
这回把网站设计得那么漂亮,这下子不会被人笑了吧。