首页所有驱动分类下载站长随笔搜索引擎与SEO

利用Windows API 获取 BIOS的DMI信息

2019-08-15 Windows API 浏览次数:111
 
话说现在用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

内容

预览(只读), 点击返回编辑.

 
最新文章
 
留言与求助
版权所有 © 2019 mypcrun.com.
桂ICP备19002156号桂公网安备 45070202000667号
这回把网站设计得那么漂亮,这下子不会被人笑了吧。