从Windows内核驱动程序检测固件是UEFI还是BIOS的可靠方法

时间:2017-07-06 14:58:17

标签: wdk windows-kernel

有没有可靠的方法可以在运行时从Windows内核驱动程序检测固件是BIOS还是UEFI而无法访问磁盘?

1 个答案:

答案 0 :(得分:2)

尝试ExGetFirmwareEnvironmentVariable功能。使用空变量名称和伪GUID调用此函数以确定是使用BIOS还是UEFI安装Windows。有关详细信息,请参阅文档中所述的以下内容。

  

传统的基于BIOS的平台不支持固件环境变量。在传统的基于BIOS的平台上,对ExGetFirmwareEnvironmentVariable的调用始终失败;如果在支持旧版BIOS和UEFI的平台上使用旧版BIOS安装Windows,它们也会失败。要识别这些条件,请使用虚拟VariableName字符串(例如,空字符串)和虚拟GUID(如

)调用该函数      

" {00000000-0000-0000-0000-000000000000}"

     

for VendorGuid参数。在传统的基于BIOS的平台上,或在支持旧版BIOS和UEFI但使用旧版BIOS安装Windows的平台上,该功能将失败并显示STATUS_NOT_IMPLEMENTED。在基于UEFI的平台上,该功能将因固件特定错误(例如STATUS_VARIABLE_NOT_FOUND)而失败,以指示虚拟GUID命名空间不存在。