使用WinAPI设置NVRAM变量

时间:2019-05-29 16:23:10

标签: winapi uefi

我正在尝试使用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变量,它已成功完成。

1 个答案:

答案 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