从RegQueryValueEx获取正确的值

时间:2011-02-08 10:16:31

标签: c++ windows registry

我试图从REG_SZ类型的Windows注册表中提取一个值,使用RegQueryValueEx,我得到了值,除了它在每个字母之前都充满了奇怪的“\ 000”。告诉你这里我的意思是一些图片:

我想要的值(它是无线适配器的设备名称) enter image description here

我得到的价值:

enter image description here

这是代码:

    HKEY hlistkey = NULL;
    HKEY hkey = NULL;

    int dwIndex=0;

    string devName = returndevName(); //return current selected device name using iphlpapi.h  
    WCHAR KeyNameBuf[512];
    DWORD keyNameSizBuf = 512;

    char buffer[512];


    RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}") ,0,KEY_READ, &hlistkey );
    if(!hlistkey)
    {
        cout << "failed" << endl;
    }
    while(RegEnumKeyEx(hlistkey,dwIndex++,KeyNameBuf,&keyNameSizBuf,0,NULL,NULL,NULL) == ERROR_SUCCESS )
    {

        RegOpenKeyEx(hlistkey, KeyNameBuf, 0, KEY_READ | KEY_SET_VALUE, &hkey);
        if(hkey)
        {
            keyNameSizBuf = 512;
            if(RegQueryValueEx(hkey,TEXT("NetCfgInstanceId"), 0,NULL,(LPBYTE)buffer,&keyNameSizBuf ) == ERROR_SUCCESS )
            {
                if(strcmp(buffer,devName.c_str() ) ==0)
                {
                    //set value here
                }
            }
            RegCloseKey(hkey);
        }        
    }
}

比较bufferdevName因为额外的空字符而不一样。如果我将缓冲区转换为字符串,我只需要一个“{”这是第一个值。我需要在我可以更改注册表中的“NetworkAddress”之前,在注册表中获取devename的值。

1 个答案:

答案 0 :(得分:6)

由于您使用的是WCHAR,我假设您正在使用Unicode支持进行编译。如果这是真的,那么buffer也需要WCHAR