RegSaveKey调用失败

由于需要要把一个注册表文件导出,结果在使用RegSaveKey时一直提示错误,返回值是1314,好像是权限问题,于是加入调整权限的代码

 

  1.     HANDLE   hToken        = NULL;   
  2.     LUID sedebugnameValue  ;   
  3.     TOKEN_PRIVILEGES   tkp;  
  4.     if( !OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) )   
  5.     {       
  6.         cout<<"OpenProcessToken   failed";   
  7.         return 0;   
  8.     }   
  9.     if(!LookupPrivilegeValue(NULL,SE_BACKUP_NAME,&sedebugnameValue))   
  10.     {   
  11.         cout<<"LookupPrivilegeValue failed"
  12.         return 0;   
  13.     }   
  14.     tkp.PrivilegeCount = 1;   
  15.     tkp.Privileges[0].Luid = sedebugnameValue;   
  16.     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;    
  17.     if(!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL))   
  18.     {   
  19.         cout<<"AdjustTokenPrivileges";   
  20.         return  0;   
  21.     }   
  22.     CloseHandle(hToken);

 

     这会就没问题了,注意要SE_BACKUP_NAME权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用C++编写导出注册表的代码,您可以使用Windows API函数来实现。以下是一个示例代码,用于导出注册表中的`HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003E9`键的内容: ```cpp #include <iostream> #include <windows.h> int main() { HKEY hKey; LPCWSTR subKey = L"SAM\\Domains\\Account\\Users\\000003E9"; LPCWSTR fileName = L"registry_export.reg"; // 打开注册表键 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS) { std::cout << "无法打开注册表键" << std::endl; return 1; } // 创建并打开导出文件 HANDLE hFile = CreateFile(fileName, GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); if (hFile == INVALID_HANDLE_VALUE) { std::cout << "无法创建导出文件" << std::endl; RegCloseKey(hKey); return 1; } // 导出注册表键内容到文件 DWORD bufferSize = 4096; BYTE* buffer = new BYTE[bufferSize]; DWORD bytesRead; if (RegSaveKey(hKey, fileName, nullptr) != ERROR_SUCCESS) { std::cout << "无法导出注册表键" << std::endl; CloseHandle(hFile); RegCloseKey(hKey); delete[] buffer; return 1; } std::cout << "成功导出注册表键到文件: " << fileName << std::endl; // 清理资源 CloseHandle(hFile); RegCloseKey(hKey); delete[] buffer; return 0; } ``` 请注意,此代码使用了`RegOpenKeyEx`函数打开指定的注册表键,并使用`RegSaveKey`函数将键的内容保存到文件中。在运行此代码之前,请确保您具有足够的权限来访问和导出注册表。另外,请记得根据您的实际需求进行适当的修改和错误处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值