我正在尝试使用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
变量,它已成功完成。
答案 0 :(得分:0)
根据MSDN上的说明。
要写入固件环境变量,请使用 应用正在运行,必须具有SE_SYSTEM_ENVIRONMENT_NAME 特权。通用Windows应用必须由管理员运行 帐户并遵循Access UEFI固件中概述的要求 通用Windows应用中的变量。
Customizing user privileges for an account in Windows
相似的讨论:How i can set firmware environment variable in UEFI driver