gpt4 book ai didi

c - 使用 RegQueryValueExA() api 从注册表读取 "OS install date"值失败

转载 作者:行者123 更新时间:2023-11-30 19:04:08 25 4
gpt4 key购买 nike

我想使用 Windows API 从注册表中读取 Windows 安装日期 值,如下所示:

HKEY hKey = { 0 };
LONG lResult = ERROR_SUCCESS;

// Open a registry key
lResult = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
0, KEY_READ, &hKey);

// If registry key opened
if (lResult == ERROR_SUCCESS)
{
// Get OS install date/time
DWORD dwInstallDate = 0;
dwBufferSize = sizeof(DWORD);
if (RegQueryValueExA(hKey, "InstallDate", 0, NULL, (LPBYTE)&dwInstallDate, &dwBufferSize) == ERROR_SUCCESS)
{
printf("OS Install Date is : %lu", dwInstallDate);
}
else
{
printf("The specific key not found!");
}

// Finally we should close the key when we finished with it
RegCloseKey(hKey);
}

但输出始终为0,而“InstallDate”值为1520291827:

OS Installe Date is : 0

此外,我使用 "%ld""d" 格式,但它具有相同的输出...
注册表中的“InstallDate”值包含 REG_DWORD 类型。
顺便说一句,当我创建新的 REG_DWORD 值时,我的代码无法读取它:

例如,我在下面的 reg-address 中创建一个值为 "test" 的值,其中包含 123 数据:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

但是dwInstallDate将是0而不是123:

RegQueryValueExA(hKey, "test", 0,
NULL, (LPBYTE)&dwInstallDate,
&dwBufferSize);

有什么建议吗?我对这个 Action 感到困惑......

最佳答案

根据微软:

  • KEY_WOW64_32KEY (0x0200):

    指示 64 位 Windows 上的应用程序应在 32 位注册 TableView 上运行。 32 位 Windows 会忽略此标志。欲了解更多信息,请参阅Accessing an Alternate Registry View 。必须使用 OR 运算符将该标志与该表中查询或访问注册表值的其他标志组合起来。Windows 2000:不支持此标志。

  • KEY_WOW64_64KEY (0x0100):

    指示 64 位 Windows 上的应用程序应在 64 位注册 TableView 上运行。 32 位 Windows 会忽略此标志。欲了解更多信息,请参阅Accessing an Alternate Registry View 。必须使用 OR 运算符将该标志与该表中查询或访问注册表值的其他标志组合起来。Windows 2000:不支持此标志。

我使用了KEY_WOW64_64KEY | KEY_READ 无论是 x86 还是 x64:

// Open a registry key
lResult = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
0, KEY_WOW64_64KEY | KEY_READ, &hKey);

它确实有效。

关于c - 使用 RegQueryValueExA() api 从注册表读取 "OS install date"值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52740356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com