微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编辑注册表值会破坏整个系统

如何解决编辑注册表值会破坏整个系统

我在制作一个需要编辑一些注册表值的程序时遇到了一些麻烦,而不是让我的整个电脑变砖。所以下面是在错误之前运行的代码也在下面。我已经确认手动编辑注册表值是有效的,但由于某种原因,这会使我的整个电脑变砖(我正在使用虚拟机进行演示)

void startBCPE(DWORD SSIP,DWORD ST,DWORD SP,char CL[20]) {
    //Sets registery values for BCPE 
    HKEY key;
    RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SYstem\\Setup",KEY_ALL_ACCESS,&key);
    if (RegSetValueExA(key,"SystemSetupInProgress",REG_DWORD,(LPBYTE)&SSIP,sizeof((LPBYTE)&SSIP)) != ERROR_SUCCESS || 
        RegSetValueExA(key,"SetupType",(LPBYTE)&ST,sizeof((LPBYTE)&ST)) != ERROR_SUCCESS ||
        RegSetValueExA(key,sizeof((LPBYTE)&ST) != ERROR_SUCCESS ||
        RegSetValueExA(key,"SetupPhase",(LPBYTE)&SP,sizeof((LPBYTE)&SP)) != ERROR_SUCCESS ||
        RegSetValueExA(key,"CmdLine",REG_SZ,(LPBYTE)&CL,sizeof(CL)) != ERROR_SUCCESS)) {
        printf("error"); //runs if any above instruction results in an error,THIS CODE DOES NOT RUN
    }
    
    RegCloseKey(key);
    return;
}

因此在代码运行后,您将无法以管理员身份运行任何内容,并且如果您注销或重新启动,计算机将不会登录

编辑:你好,我回来了一些新信息,它写入的注册表值似乎已损坏或其他原因,因为 CMDline 是“8}-”

解决方法

这是错误的:

RegSetValueExA(key,"CmdLine",REG_SZ,(LPBYTE)&CL,sizeof(CL));

sizeof(CL) 不是字符串的长度,而是平台上指针的大小(在您的情况下为 4 或 8)。

也不是 sizeof(CL) 声明可能暗示的 char CL[20] 20。在这种情况下,char CL[20] 严格等同于这个 char *CL

还有(LPBYTE)&CL是错误的,你不想要指针的地址,你想要数据的地址,你需要(LPBYTE)CL(没有&)。 CL 也已经是指针做你的数据了。

因此,您基本上是在注册表中 Cmdline 键的 SYSTEM\\Setup 值中写入了一些垃圾,这很可能会弄乱 Windows。

所以你想要这个:

RegSetValueExA(key,(LPBYTE)CL,strlen(CL) + 1);

+ 1 用于考虑字符串空终止符。

仔细阅读 RegSetValueExA documentationlpDatacbData 部分。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。