RegCreateKeyEx 始终返回 5 ERROR_ACCESS_DENIED,即使是管理员

问题描述 投票:0回答:1

我真的陷入困境...我有一个 Windows 程序,我试图简单地向注册表写入一个值。

问题是

RegCreateKeyEx()
返回 5 (
ERROR_ACCESS_DENIED
)。

我的登录用户名属于本地管理员组。

lpdwDisposition
中的
RegCreateKeyEx()
参数设置为2 (
REG_OPENED_EXISTING_KEY
),但
RegCreateKeyEx()
仍然返回
ERROR_ACCESS_DENIED

这是一个 32 位程序,所以我将 SAM 设置为

KEY_WOW64_32KEY | KEY_WRITE

这是最小的工作示例代码:

#include <Windows.h>
#include <time.h>
#include <strsafe.h>

void GetCurrentDateAndTimeWithMs(WCHAR *sValueData, DWORD dwSizeValueData)
{
    CONST INT iSize = 64;
    WCHAR sDate[iSize] = {0};
    WCHAR sTime[iSize] = {0};
    SYSTEMTIME lt = {0};

    GetLocalTime(&lt);
    GetDateFormat(LOCALE_USER_DEFAULT, NULL, &lt, NULL, sDate, iSize);
    GetTimeFormat(LOCALE_USER_DEFAULT, NULL, &lt, NULL, sTime, iSize);

    StringCchPrintf(sValueData, dwSizeValueData, L"%s %s.%u",sDate, sTime, lt.wMilliseconds);
}

DWORD SaveToRegistry(CONST WCHAR *sPath, CONST WCHAR *sValueName, CONST WCHAR *sValueData)
{
    LSTATUS dwRV = 0;
    HKEY hKey = NULL;
    DWORD rv = 0;
    DWORD dwType_Local = REG_SZ;

    dwRV = RegCreateKeyExW(HKEY_LOCAL_MACHINE, sPath, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WOW64_32KEY | KEY_WRITE, NULL, &hKey, &rv);
    if (dwRV == ERROR_SUCCESS)
    {
        DWORD dwLenData = (DWORD) wcslen(sValueData) +1;
        dwRV = RegSetValueExW(hKey, sValueName, 0, dwType_Local, (LPBYTE) sValueData, dwLenData * sizeof(WCHAR));
    }
    
    RegCloseKey(hKey);

    return dwRV;
}

int main()
{
    WCHAR sDT[64] = {0};
    GetCurrentDateAndTimeWithMs(sDT, 64);
    SaveToRegistry(L"Software\\Company\\Product\\Settings", L"CurrentDateTime", sDT);
}
c++ windows registry
1个回答
0
投票

出乎意料的答案,但创建密钥的方法实际上对我有用。谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.