我试图从REG_SZ
类型的Windows注册表中提取一个值,使用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
因为额外的空字符而不一样。如果我将缓冲区转换为字符串,我只需要一个“{”这是第一个值。我需要在我可以更改注册表中的“NetworkAddress”之前,在注册表中获取devename
的值。
答案 0 :(得分:6)
由于您使用的是WCHAR
,我假设您正在使用Unicode支持进行编译。如果这是真的,那么buffer
也需要WCHAR
。