最近发现一个能够在 Windows下读取 SMBIOS 的代码,有需要的朋友可以参考一下。
我在 UEFI 版本的 Windows 10 X64 下测试成功,编译器为 VS2015。
具体原理是使用: GetSystemFirmwareTable 来获得系统的SMBIOS信息。其中还有SMBIOS结构体的解析代码。有需要的朋友可以参考一下。
具体代码来自:https://github.com/KunYi/DumpSMBIOS
这里可以下载源程序
此外,还放了一个我编译的 X64 Release EXE版本,有需要的朋友可以试试,
最后,特别感谢作者KunYi Chen。
不客氣! 某些原因在網上查找我自己 剛好找到你這來
看了一下你作了很多以前我剛做BIOS時的學習項目呢!
不過我做那些項目是手上還拿不到UEFI程式碼的時期只好用EDKII了!
還看了你那個 Change BootOrder on Windows 那個提權只需要 SE_SYSTEM_ENVIRONMENT_NAME
是必須的
不過我那時只簡單測試BootOrder 跟一個TPM 相關設定都是正常可以的
BootOrder 是UINT16 Array 型別所以是兩個Bytes
另外幾家BIOS Vendor應該都有提供一個OS上面的程式庫透過SMM去設定變數的
還有Boot 以後EFI 還是有保留空間的不會完全釋放會保留Runtime Service的空間
ref. http://wiki.phoenix.com/wiki/index.php/EFI_RUNTIME_SERVICES
非常感谢您。
关于 Runtime Service 我这边做了一点研究,但是没有找到 Windows 调用这些 Service 的方法,
不知道哪里能找到相关的例子呢?
Windows 沒有開放調用的方法, OS本身的 GetFirmwareEnvironmentVariables & SetFirmwareEnvironmentVariables 實際上調用 Runtime service的
詳見 page 36 in http://www.uefi.org/sites/default/files/resources/UEFI-Plugfest-WindowsBootEnvironment.pdf
按文件說明有可能在ACPI Driver 裡面調用runtime 但是也建議你除非必要不要這樣做
可以參考這個文件
https://firmware.intel.com/sites/default/files/resources/A_Tour_beyond_BIOS_Implementing_APEI_with_UEFI_White_Paper.pdf
这个方法确实可以,但 winxp上面是执行不了的.
以前在winxp上面,直接通过特殊 _SM_查找 到 SMBIOS 地址,再读取.
最近工作需要,没事研究了下AMI SMM CODE,AMI DMIEDIT工具的那个工具,就是用的SMM,
用SMM的方法可以顺序读取和修改DMI修改,这样就不局限于WINDOWS系统 .
你这个EXE打开后瞬间关闭了!看都看不清有什么
你先打开 cmd 窗口,然后在窗口下运行这个工具,这样就不会一闪而过了。