在Windows中读取EFI系统表

在Windows中读取EFI系统表,windows,kernel,uefi,windows-api-code-pack,Windows,Kernel,Uefi,Windows Api Code Pack,是否可以从操作系统访问EFI系统表?我想知道运行时服务映射到哪里。原因是Windows API仅将变量服务公开给用户模式(Get/SetFirmwareEnvironmentVariable),但我想知道是否可以通过在自定义驱动程序中直接访问它们来使用其余的服务。我知道Windows加载程序正在将包含服务虚拟地址的表映射到内核内存中,但我还没有找到一种方法来定位和读取它。有人能就如何实现这一目标提供建议或指导吗?这是一个由来已久的问题,但我会回答它,也许它会帮助其他人 长话短说。不可能。它完全是

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

这是一个由来已久的问题,但我会回答它,也许它会帮助其他人


长话短说。不可能。它完全是Windows内部的,如果微软不公开它,就无法访问UEFI运行时服务。至于UEFI变量,它们存储在非易失性RAM中,只有UEFI固件(BIOS)知道所有变量存储在哪里以及如何存储。因此,有两种可能,一种是BIOS为Windows提供了获取UEFI运行时服务指针的方法,另一种是Microsoft与BIOS供应商达成了协议,比如:-好的,伙计们,如果您希望您的系统与Windows兼容,这里是您必须存储指向UEFI运行时服务周期指针的内存位置。

我看到程序使用
SetFirmwareEnvironmentVariable
写入NVRAM