访问注册表被拒绝。

3
我第一次通过编程操作注册表,但是效果不太好(至少我没有毁坏我的电脑)。具体来说,我一直从RegCreateKeyEx和RegSetValueEx中得到错误5(拒绝访问)的返回值。最奇怪的是,当HKEY_CURRENT_USER\Software\dir1\Sub Directory已经存在时,RegCreateKeyEx返回错误5,但当它不存在时,它可以成功创建;然后在RegSetValueEx上失败。
请问这段代码有什么问题吗?
BOOL MyDialog::SaveLocationsToRegistry()
{
    HKEY   hkey;
    DWORD  dwDisposition;
    DWORD dwType, dwSize;
    LONG result = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\dir1\\Sub Directory"), 
                                 0, NULL, 0, 0, NULL, &hkey, &dwDisposition);
    if(result == ERROR_SUCCESS)
    {
        LPCTSTR szLastFolder = "C:\\Documents and Settings\\user\\My Documents\\Copy of item\0";
        dwType = REG_SZ;
        dwSize = strlen(szLastFolder)+1;
        LONG setResult = RegSetValueEx(hkey, TEXT("LastFolder"), 0, dwType, 
        (PBYTE)&szLastFolder, dwSize);
        RegCloseKey(hkey);
        return setResult == ERROR_SUCCESS;
    }
    else
    {
        return false;
    }
}

注意:绝对路径只是暂时存在的。踏踏实实地走步骤;-)

你是以管理员身份运行的吗?还是有一些受限制的访问权限? - Naveen
1个回答

16

您没有请求任何访问权限。您可能需要为第6个参数(samDesired)指定KEY_WRITE(或其他内容)。

LONG result = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\dir1\\Sub Directory"),
                 0, NULL, 0, KEY_WRITE, NULL, &hkey, &dwDisposition);

那些无意义的东西原来是错误的间接级别或类似的东西。再次感谢您的帮助! - Smashery
1
KEY_WRITE 包含多个访问权限。如果其中任何一个未被授予调用用户,RegCreateKeyEx() 将失败。由于代码只想调用 RegSetValueEx(),因此我会仅指定 KEY_SET_VALUE - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接