gpt4 book ai didi

windows - 如何获得写入注册表项的权限?

转载 作者:可可西里 更新时间:2023-11-01 13:58:09 26 4
gpt4 key购买 nike

我正在尝试在注册表的 HKLM 部分下写入一些注册表项。我使用 RegCreateKeyEx() 和 RegSetValueEx() 的方式与我看到的一些 MSDN 示例类似。

但是,RegSetValueEx() 调用失败并出现错误 5,FormatMessage() 表示“访问被拒绝”

我想我需要请求提升的权限,但我不知道执行此操作所需的 API 调用?

这是我的代码:

HKEY hk;
DWORD dwDisp;
LONG result = RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\MyApp"), 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hk, &dwDisp);
if(result == ERROR_SUCCESS)
{
BYTE value[] = "Hello world!";

result = RegSetValueEx(hk, _T("MyValue"), 0, REG_EXPAND_SZ, value, strlen((char*)value)+1);
if(result != ERROR_SUCCESS)
{
DBG_PRINT2("RegSetValueEx failed with code: %d\n", result);
}

RegCloseKey(hk);
}

最佳答案

为了拥有对 HKLM 的写入权限,您的进程需要以具有管理员权限的用户身份运行。此外,在包含 UAC(Vista 及更高版本)的系统上,您的进程将需要提升运行。要实现这一点,请在您的 application manifest 中指定 requireAdministrator .

重要的是,除非绝对必要,否则不要以提升的权限运行您的应用程序。您可以将需要写入 HKLM 的应用程序部分移动到一次性操作中,例如你的安装程序。或者您可以将您的应用程序分成两部分:以正常权限运行的大部分,以及需要提升权限的小部分。

您可能需要将应用程序拆分成更小部分的原因是用户 token 是在流程启动时分配的,并且在流程的生命周期内无法修改。因此,如果您希望提升应用程序的某些部分而其他部分不提升,则需要有两个不同的进程。

关于windows - 如何获得写入注册表项的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com