繁体   English   中英

从注册表C ++崩溃中获取价值

[英]Get value from registry C++ crashes

怎么了? 当我想获得AUVersion的价值时,它崩溃了。 此项存在于注册表中,但我无法获取。

int main(int argc, char *argv[])
{
    HKEY key;
    if (RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\JavaSoft\\Auto Update\\"), &key) != ERROR_SUCCESS)
    {
        cout << "Unable to open registry key\n\n";
    }

    char path[1024];
    DWORD value_length = 1024;
//here is the crash
    RegQueryValueEx(key, "AUVersion", NULL, (LPDWORD)REG_SZ, (LPBYTE)&path, &value_length);
    cout << "the value read from the registry is: " << path << endl;


    system("pause");
    return 0;
}

第四个参数是LPDWORD指向DWORD的指针。 您使用了一个常规整数并将其强制转换为指针(当取消引用时)将崩溃。

该参数接收注册表值的类型。 如果您不想知道类型,请将其设置为NULL。

调用RegQueryValueEx()有两个错误:

  • 类型参数被写入,因此必须是有效地址,并且不是:

     (LPDWORD)REG_SZ 

这可能是导致崩溃的原因。

  • &path应该是path

改成:

DWORD type;
RegQueryValueEx(key, "AUVersion", NULL, &type, (LPBYTE) path, &value_length);

您必须检查RegQueryValueEx()的结果以确保已填充path并且后续代码未处理统一变量:

const DWORD result = RegQueryValueEx(key,
                                     "AUVersion",
                                     NULL,
                                     &type,
                                     (LPBYTE) path,
                                     &value_length);

// Check status of the query and ensure it was a string
// that was read.
if (ERROR_SUCCESS == result && REG_SZ == type)
{
    // Success.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM