我正在尝试使用 RegSaveKey() API 将特定注册表项的内容保存到文件中:
HKEY key;
LRESULT result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\MyProduct", 0, KEY_ACCESS_ALL, &key);
result = RegSaveKey(key, L"c:\\temp\\saved.reg", NULL);
但是,RegSaveKey() 正在返回
ERROR_PRIVILEGE_NOT_HELD
. SDK 文档说“调用进程必须启用 SE_BACKUP_NAME
权限”。该进程以本地管理员或服务的身份运行。有任何想法吗?
最佳答案
尽管作为本地管理员或服务运行,您可能没有默认启用“备份”权限。在尝试保存注册表项之前,您需要启用此权限。
MSDN 有一个关于如何在 C/C++ 中启用安全权限的好例子:http://msdn.microsoft.com/en-us/library/aa446619(VS.85).aspx .如果包含在该页面上定义的示例函数,则可以调用:
HANDLE ProcessToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &ProcessToken)) {
SetPrivilege(ProcessToken, SE_BACKUP_NAME, TRUE);
// Save reg key now...
...
}
或者,还有一个基于 VB 的示例 on the wayback machine .
关于winapi - RegSaveKey 返回 ERROR_PRIVILEGE_NOT_HELD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/381055/