C ++ Windows获取注册表值不一致的返回

时间:2013-07-11 17:20:23

标签: c++ windows visual-studio-2010

我正在编写一个简单的C ++程序来获取64位计算机上的Windows注册表值。 问题是它仅适用于大约50%的注册表,而另一半“ret”不会返回ERROR_SUCCESS(0)。

我的问题是为什么我得到这些不一致的返回,当我尝试使路径长于两个目录时,它也会中断。 恩。

keypath = TEXT("SOFTWARE\\Perl\\ASDF");

这是我的代码。

LPCTSTR keypath = TEXT("SOFTWARE\\Perl");
HKEY key = NULL;
LONG ret = ERROR_SUCCESS;
DWORD BufferSize = TOTALBYTES;
DWORD cbData;
DWORD dwRet;
DWORD type;
char registry[256] = {'\0'};

ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, keypath, 0, KEY_QUERY_VALUE, &key);

PPERF_DATA_BLOCK PerfData = (PPERF_DATA_BLOCK) malloc( BufferSize );
cbData = BufferSize;

if (ret == ERROR_SUCCESS)
{
    dwRet = RegQueryValueEx( key,
                         TEXT("BinDir"),
                         NULL,
                         &type,
                         (LPBYTE) PerfData,
                         &cbData );
    RegCloseKey(key);
    printf("\nFinal buffer size is %d\n", BufferSize);
    int i = 0;
    while ((*PerfData).Signature[i] != NULL)
    {
        registry[i] = (char)(*PerfData).Signature[i];
        i++;
    }
    printf("registery: %s\n", registry);
}

修改修补程序。

0 个答案:

没有答案