访问被拒绝注册表

Sma*_*ery 3 c++ registry debugging winapi

我是第一次以编程方式使用注册表,并且效果不佳(但至少我没有销毁我的计算机).具体来说,我一直在从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;
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:绝对路径仅暂时存在.宝贝步骤;-)

Mic*_*urr 15

您不是要求任何访问权限.您可能想要KEY_WRITE为第6个参数(samDesired)指定(或某些东西).

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