在Windows中读取EFI系统表

时间:2013-11-21 14:56:36

标签: windows kernel uefi windows-api-code-pack

是否可以从操作系统访问EFI系统表?我想知道运行时服务的映射位置。原因是Windows API只将变量服务暴露给用户模式(Get / SetFirmwareEnvironmentVariable),但我想知道是否可以通过直接在自定义驱动程序中访问它们来使用其余服务。我知道Windows加载器正在将包含服务虚拟地址的表映射到内核内存中,但我还没有找到定位和读取它的方法。有人可以就如何实现这一目标提供建议或指示吗?

2 个答案:

答案 0 :(得分:0)

一年前的问题,但我会回答它,也许这对其他人有帮助。

长话短说。不,这是不可能的。它完全是Windows内部,如果微软没有公开它,就无法访​​问UEFI运行时服务。至于UEFI变量,它们存储在非易失性RAM中,并且只有UEFI固件(BIOS)知道所有变量的存储位置和方式。因此有两种可能性,BIOS为Windows提供了获取UEFI运行时服务指针的方法,或者Microsoft与BIOS供应商签订了协议,例如: - 好的,如果您希望您的系统与Windows兼容,那么它是您必须将指针存储到UEFI运行时服务期间的内存位置。

答案 1 :(得分:-1)

我看到程序使用((\d[A-Z]|[A-Z]{2}|[A-Z]\d),\s)*(\d[A-Z]|[A-Z]{2}|[A-Z]\d),?$ 写入NVRAM。