我正在尝试使用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/