Получение правильного значения от RegQueryValueEx - PullRequest
2 голосов
/ 08 февраля 2011

Я пытаюсь извлечь значение из реестра Windows типа REG_SZ, используя 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);
        }        
    }
}

сравнение buffer и devName не будет одинаковым из-за лишних нулевых символов. Если я приведу буфер к строке, я просто получу "{"это первое значение. Мне нужно получить значение devename в реестре, прежде чем я смогу изменить «NetworkAddress» в реестре.

1 Ответ

6 голосов
/ 08 февраля 2011

Поскольку вы используете WCHAR, я предполагаю, что вы компилируете с поддержкой Unicode.Если это так, то buffer также должно быть WCHAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...