VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 606|回复: 1

请教vc中的注册表备份函数调用问题

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-23 16:30:01 | 显示全部楼层 |阅读模式
在vc中,我是调用RegSaveKey函数来备份注册表的,主要代码如下:
     RootKey="HKEY_LOCAL_MACHINE";
     subkey="SAM\\SAM\\Domains\\Account\\Users";
        if(S_OK != SetPrivilege(SE_BACKUP_NAME,TRUE)) //设置权限
        {
                printf("SetPrivilege BACKUP failed!\n");
                return ;
        }
        int ret;
        char filename[24]="2.tmp";
        if(PathFileExists(filename)) //如果文件存在,不能保存
           DeleteFile(filename);   //删除已有文件
        if(RegOpenKeyEx(RootKey,subKey,0,KEY_READ,&hKey4)==ERROR_SUCCESS)
        {
                ret=RegSaveKey(hKey4,filename,NULL);  //备份
                if(ret==ERROR_SUCCESS)
                {
                        printf("save subkey HKEY_LOCAL_MACHINE\\%s   OK!\n",subKey);
                }
                else printf("save failed! error %d\n",ret);
        }
        if(hKey4) RegCloseKey(hKey4);

我的目的是想把users下的项和子项都导出保存,可不知道为什么函数调用成功,但备份出来的总是把最高节点SAM下的项和子项全部备份,不知这是怎么回事?请教各位了。
回复

使用道具 举报

0

主题

9

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-7-18 09:45:01 | 显示全部楼层
没看出问题来。
试试我这个:
// 注册表改名
int RegReName(TCHAR oldKey[], TCHAR newKey[])
{
        static int i;
        HKEY hk;

        // 备份旧键
        if(EnablePrivilege(SE_BACKUP_NAME,TRUE) == 0)
        {
                if (RegOpenKey(HKEY_LOCAL_MACHINE, oldKey, &hk) == ERROR_SUCCESS)
                {
                        if (RegSaveKey(hk, "bak", NULL) != ERROR_SUCCESS)
                                if (i == 0) i = 1;
                }
        }

        // 将旧键恢复到新键上
        if(EnablePrivilege(SE_RESTORE_NAME,TRUE) == 0)
        {
                if (RegOpenKey(HKEY_LOCAL_MACHINE, newKey, &hk) != ERROR_SUCCESS)
                {
                        RegCreateKey(HKEY_LOCAL_MACHINE, newKey, &hk);
                }
                if (RegRestoreKey(hk, "bak", 0x00000008L) != ERROR_SUCCESS)
                        if (i == 0) i = 2;
        }

        // 删除旧键
        RegDelete(HKEY_LOCAL_MACHINE, oldKey);
        DeleteFile("bak");
        RegCloseKey(hk);

        return i;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表