【发布时间】:2019-05-30 18:09:36
【问题描述】:
我正在尝试使用 WinAPI (SetFirmwareEnvironmentVariable) 设置我自己的 NVRAM 变量 (nv+rt+bs)。它因我的变量而失败,并使用 BootOrder 成功完成。我做错了什么?是否可以使用 WinAPI 设置我自己的变量?
我正在尝试使用此代码设置我的变量
void setMyNVRAM()
{
// here I setup SE_SYSTEM_ENVIRONMENT_NAME privilege
uint16_t value = 0x5aa5;
if (!SetFirmwareEnvironmentVariable(L"MY_VARIABLE",
L"{12345678-1234-1234-1234-123456789012}", &value, sizeof (value)))
{
std::cout << "error while settin up MY_VARIABLE. Error code: "
<< GetLastError() << std::endl;
}
else
{
std::cout << "success" << std::endl;
}
}
SetFirmwareEnvironmentVariable 返回 0,GetLastError() 返回 5(拒绝访问)。我也尝试写入BootOrder变量,成功完成。
【问题讨论】:
-
文档表明错误代码是系统固件返回的错误的映射。如果您尝试从 EFI shell 创建相同的变量会发生什么?可能变量名称或命名空间 GUID 被限制为匹配现有值。