使用WinAPI设置NVRAM变量

使用WinAPI设置NVRAM变量,winapi,uefi,Winapi,Uefi,我正在尝试使用WinAPI(SetFirmWareenEnvironmentVariable)设置自己的NVRAM变量(nv+rt+bs)。它使用我的变量失败,并使用BootOrder成功完成。我做错了什么?是否可以使用WinAPI设置我自己的变量 我正在尝试使用此代码设置变量 void setMyNVRAM() { // here I setup SE_SYSTEM_ENVIRONMENT_NAME privilege uint16_t value = 0x5aa5;

我正在尝试使用WinAPI(SetFirmWareenEnvironmentVariable)设置自己的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;
    }
}
void setMyNVRAM()
{
//在这里,我设置了SE_系统_环境_名称权限
uint16_t值=0x5aa5;
如果(!SetFirmwareEnvironmentVariable(L“MY_VARIABLE”,
L“{12345678-1234-1234-1234-123456789012}”,&value,sizeof(value)))
{

std::cout根据图纸上的说明

要写入固件环境变量,请使用 正在运行的应用程序必须具有SE_SYSTEM_ENVIRONMENT_名称 权限。必须由管理员运行通用Windows应用程序 帐户并遵循Access UEFI固件中概述的要求 来自通用Windows应用程序的变量


类似的讨论:

根据上的说明

要写入固件环境变量,请使用 正在运行的应用程序必须具有SE_SYSTEM_ENVIRONMENT_名称 权限。必须由管理员运行通用Windows应用程序 帐户并遵循Access UEFI固件中概述的要求 来自通用Windows应用程序的变量


类似的讨论:

文档建议错误代码是系统固件返回的错误的映射。如果尝试从EFI外壳创建相同的变量会发生什么情况?可能变量名或命名空间GUID仅限于匹配现有值。文档建议错误代码是系统固件返回的错误的映射。如果尝试从EFI外壳创建相同的变量,会发生什么?可能是变量名或命名空间GUID限制为与现有值匹配。请回答。我的代码中有一条注释说我设置了SE_system_ENVIRONMENT_name特权。我的应用程序是从管理员帐户运行的。我在另一台计算机上尝试了这段代码,效果很好。也许这类似于固件保护。一旦我发现,我会写一个答案。有一件事我不明白,那就是如何将功能标记添加到程序集清单。谢谢你的回答。我的代码表明我设置了SE_SYSTEM_ENVIRONMENT_NAME权限。我的应用程序是从管理员帐户运行的。我在另一台计算机上尝试了这段代码,效果非常好。可能是固件保护。一旦发现,我会写一个答案。有一件事我不明白,那就是如何向程序集添加功能标签显示