如何使用RegCreateKeyEx?

时间:2015-03-18 06:28:46

标签: c++ registrykey

我有一个关于在C ++中使用RegCreateKeyEx的问题。 当我试图在HKLM下创建一个密钥时 - 它不起作用, 但其他情况(在HKCU创建密钥) - 它确实运行良好(可以创建密钥)。

我的操作系统是win7 x86 - 使用RegCreateKeyEx时有用吗?

我正在运行的代码如下:

#include<Windows.h>
#include<stdio.h>

int main()
{
    HKEY hKey;
    LONG result = 0;
    char filename[] = "C:\test.jpg";
    char *path = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\test";

    if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, path, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
        printf("1. success \n"); // ← doesn`t work 
    else printf("fail\n");

    if (RegCreateKeyEx(HKEY_CURRENT_USER, "Console\papadaks", 0, NULL,       
            REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
        printf("2. success \n");  // ← works well 
    else printf("fail\n");

    return 0;
}

感谢。

1 个答案:

答案 0 :(得分:1)

您几乎肯定会收到错误5(访问被拒绝),因为即使您是该计算机的管理员,对于UAC下的NT6变体,您也需要提升。仅仅因为您使用管理员帐户登录并不意味着您拥有实际的管理员权限,这要归功于UAC的奇迹。这实际上是的事情。

您可以通过临时修改您正在创建的HKLM注册表项的安全性来测试此假设,以允许每个人编写功能(请记住之后将其设置回来)。那么你的代码就可以了......而且你的系统安全性会稍差。

适当的方法是为您的应用程序提供一个标记为需要提升的清单,因此用户必须确认允许更改(如果他们是管理员)或者去找某人实际管理员输入密码。