Я пытаюсь извлечь значение из реестра 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);
}
}
}
сравнение buffer
и devName
не будет одинаковым из-за лишних нулевых символов. Если я приведу буфер к строке, я просто получу "{"это первое значение. Мне нужно получить значение devename
в реестре, прежде чем я смогу изменить «NetworkAddress» в реестре.