RegEnumValueW返回值234,什么情况?

最近不少反馈说字体少了,于是排查了一下,居然是注册表查询的时候丢弃了,问题就出在RegEnumValueW这个函数上。

 

经过一番debug,查到RegEnumValueW返回值为234,然后无法获取键值的字符串。查询了一下,在winerror.h有记录。

win error

所以只能改改代码,对返回值进行处理。

下面是完整的读注册表操作:


		LONG result;
		DWORD maxValueNameSize, maxValueDataSize;
		result = RegQueryInfoKeyW(hKey, 0, 0, 0, 0, 0, 0, 0, &maxValueNameSize, &maxValueDataSize, 0, 0);
		if (result != ERROR_SUCCESS) {
			return 0;
		}
		DWORD valueIndex = 0;
		wchar_t *valueName = (wchar_t *)malloc(maxValueNameSize * sizeof(wchar_t));
		unsigned char *valueData = (unsigned char *)malloc(maxValueDataSize * sizeof(wchar_t));
		DWORD valueNameSize, valueDataSize, valueType;
		do {
			valueDataSize = maxValueDataSize;
			valueNameSize = maxValueNameSize;
			valueName[0] = 0;
			valueData[0] = 0;
			result = RegEnumValueW(hKey, valueIndex, valueName, &valueNameSize, 0, &valueType, valueData, &valueDataSize);
			if (result == ERROR_MORE_DATA)
			{
				maxValueNameSize <<= 1;
				maxValueDataSize <<= 1;
				if (valueName)
				{
					free(valueName);
				}
				if (valueData)
				{
					free(valueData);
				}
				valueName = (wchar_t *)malloc(maxValueNameSize * sizeof(wchar_t));
				valueData = (unsigned char *)malloc(maxValueDataSize * sizeof(wchar_t));
				if (valueName && valueData)
				{
					continue;
				}
			}
			valueIndex++;
			if (result != ERROR_SUCCESS || valueType != REG_SZ) {
				continue;
			}
			// Found a match
			//wprintf(L"valueName=%s\n", valueName);
			//wprintf(L"valueData=%s\n", (wchar_t *)valueData);
			//....
		} while (result != ERROR_NO_MORE_ITEMS);
		
	if (valueName)
	{
		free(valueName);
	}
	if (valueData)
	{
		free(valueData);
	}
	//.....

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值