有时候VCKBASE常有人问到怎么去获一些细节系统信息。其实从BIOS中是可以获得大量系统的信息的。SMBios,即System Management BIOS以结构的方式保存了用于管理的系统信息。对于OS,BIOS的研究是须要先掌握大量相关知识的,不过方法也很重要。下面是我写的一个例子,在windows下(我用的XP)对物理内存进行访问,通过找到SMBIOS Structure Table Entry Point这一结构来定位BIOS结构表的位置,从而获得所须的系统信息。
关于信息的细节可以去看SMBios的相关规范。
我的例子代码主要是两个文件组成:SMStdFun.cpp中为用户提供函数用于获取所需要信息;PhyMemFu.cpp则是用来在物理内存中进行操作,实现具体的功能。
可以用下面的语句测试这个例子代码,
if(0 != GetSMTableEntryPoint(&g_TableEntry, g_dwEntryPhyAddress))
return FALSE;
if(0 != GetAllType(g_TableEntry.dStructTableAddress))
return FALSE;
它取出结构信息的Type0~Type6,当然代码中给出了其后面的类型信息的格式,自已根据须可以去使用.
Type0: BIOS Information
Type1:System Information
Type2:Base Board Information
Type3:System Enclosure or Chassis
Type4:Processor Information
Type5:Memory Controller Information
Type6:Memory Module Information
......
例子代码见: http://blog.vckbase.com/Files/zyq654321/SMViewer.rar
我的例子代码主要是两个文件组成:SMStdFun.cpp中为用户提供函数用于获取所需要信息;PhyMemFu.cpp则是用来在物理内存中进行操作,实现具体的功能。
可以用下面的语句测试这个例子代码,
if(0 != GetSMTableEntryPoint(&g_TableEntry, g_dwEntryPhyAddress))
return FALSE;
if(0 != GetAllType(g_TableEntry.dStructTableAddress))
return FALSE;
它取出结构信息的Type0~Type6,当然代码中给出了其后面的类型信息的格式,自已根据须可以去使用.
Type0: BIOS Information
Type1:System Information
Type2:Base Board Information
Type3:System Enclosure or Chassis
Type4:Processor Information
Type5:Memory Controller Information
Type6:Memory Module Information
......
例子代码见: http://blog.vckbase.com/Files/zyq654321/SMViewer.rar