能力值:
( LV9,RANK:260 )
2 楼
不知道在win8里,微软有没有修复这个bug
能力值:
( LV2,RANK:10 )
3 楼
这不是微软的错,是你没看MSDN
LONG WINAPI RegSetValueEx(
__in HKEY hKey,
__in_opt LPCTSTR lpValueName,
__reserved DWORD Reserved,
__in DWORD dwType,
__in_opt const BYTE* lpData,
__in DWORD cbData
);
第五个参数的说明是:
lpData
The data to be stored.
For string-based types, such as REG_SZ, the string must be null-terminated . With the REG_MULTI_SZ data type, the string must be terminated with two null characters.
接口已经说得很详细了,你不按套路出牌当然要出问题了。
能力值:
( LV9,RANK:260 )
4 楼
你试试就知道了,只要你是个以空字符结尾的字符串就行了,你设置的数据是1024,但注册表只显示一个空字符串,其他的数据你读取字符串的时候会读取到的是1024长度,而不是读到一个空字符串,因此这个方法还可以把数据隐藏在字符串结尾的后面。
能力值:
( LV2,RANK:10 )
5 楼
没看明白你说的什么,需要注意的是你设置的1024不是字节,而是unicode字符,换算成字节后应该是2048,MSDN上说,设置注册表值的时候使用的是字节,读取失败可能是因为你指定的空间大小不对,看我下面的代码是不是能解决你读取注册表的问题:
#include <Windows.h>
#include <Stdio.h>
#include <Tchar.h>
int _tmain(int argc, TCHAR *argv[])
{
HKEY hKey;
WCHAR szBuf[1024];//查询结果与这里是否清零无关
lstrcpyW(szBuf, L"计算机\\HKEY_CLASSES_ROOT\\*");//这里可以是任意子健
if(RegOpenKeyW(HKEY_CURRENT_USER,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit",
&hKey) == ERROR_SUCCESS)
{
RegSetValueExW(hKey, L"LastKey", 0, REG_SZ, (LPBYTE)szBuf, sizeof(szBuf));
DWORD dwType;
DWORD size = 0;
LONG retVal = RegQueryValueEx(hKey, L"LastKey", 0, &dwType, NULL, &size);
WCHAR *pszRdBuf = new WCHAR[size/2];
retVal = RegQueryValueEx(hKey, L"LastKey", 0, &dwType, (LPBYTE)pszRdBuf, &size);
RegCloseKey(hKey);
}
return 0;
}
能力值:
( LV2,RANK:140 )
6 楼
嗯.确实有问题..栈溢出哦.
能力值:
( LV2,RANK:140 )
7 楼
regqueryvalueex的时候穿进去的大小是0x800,但是buffer大小却没这么大..MS的人也会犯这种错误??