从RegQueryValueEx获取正确的值

cft*_*mon 2 c++ windows registry

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

我想要的价值(这是无线适配器的设备名称) 在此输入图像描述

我得到的价值:

在此输入图像描述

这是代码:

    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);
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

由于额外的空字符,比较bufferdevName不一样.如果我将缓冲区转换为字符串,我只需要一个"{"这是第一个值.devename我需要在注册表中获取值才能更改注册表中的"NetworkAddress".

Log*_*orn 6

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