如何在Windows中禁用软件SMI(系统管理中断)

问题描述 投票:0回答:1

[从Windows 10 1809开始,操作系统会生成许多软件SMI。我们在单独的处理器内核上运行实时应用程序,每个SMI都会产生不可预测的延迟。在1809年之前,总是可以在BIOS中禁用SMI。Windows中的调用堆栈如下所示:

hal!HalEfiGetEnvironmentVariable+0x56       
hal!HalGetEnvironmentVariableEx+0xb572      
nt!IopGetEnvironmentVariableHal+0x2a        
nt!IoGetEnvironmentVariableEx+0x85          
nt!ExpGetFirmwareEnvironmentVariable+0x91   
nt!ExGetFirmwareEnvironmentVariable+0x110ce3
nt!NtQuerySystemEnvironmentValueEx+0x6e     

SMI由OUT指令生成到端口0xb2中。需要从NVRAM读取UEFI变量。当BIOS处于旧版模式时,没有SMI。

是否可以配置Windows,所以它不会使用SMI访问UEFI变量?

windows kernel uefi
1个回答
0
投票

简短的答案为否,无法将Windows配置为不生成SW SMI,因为它们不是Windows生成的。当UEFI OS访问UEFI变量时,将在固件内部生成SMI。

所有可识别UEFI的OS均通过GetVariable()和SetVariable()服务读取/写入UEFI变量,它们是UEFI固件通过系统表向OS公开的运行时服务的一部分-参见UEFI规范,第8节。当前实现为了安全起见,大多数固件中的变量服务都是为了处理SMM中的实际Get / Set变量请求。

因此,负责生成SW SMI而不是操作系统的是设备的固件。但是,操作系统和某些系统服务/应用程序绝对需要使用UEFI变量,因为这是应该在UEFI固件上运行支持UEFI的OS的方式。

© www.soinside.com 2019 - 2024. All rights reserved.