1.读取内容如图所示:获得的值
2. 注册表表中的值:
3.具体内容,即代码如下所示
// 解析注册表二进制类型的数据,处理还原成注册表中显示的16进制字符串
// 数字处理,注册表二进制数据解析
void NumToHexStrW(DWORD dwNum, CAtlStringW& str)
{
UINT Temp = 0;
UINT index = 0;
while (dwNum > 0)
{
Temp = dwNum % 16;
if (Temp < 10) {
str.AppendChar(Temp + _T('0'));
}
else {
str.AppendChar(_T('A') + Temp - 10);
}
dwNum = dwNum >> 4;
index++;
}
// 补全字符串
for (UINT j = 0; j < 4 - index; j++)
{
str.AppendChar(L'0');
}
str.MakeReverse();
CAtlStringW aa = str.Mid(2, 3);
CAtlStringW bb = str.Left(2);
str.Format(L"%ws %ws", aa, bb);
}
// 还原注册表二进制数据类型格式
CAtlStringW RegBinaryStrProcessingW(LPCWSTR lpszData, DWORD dwLength)
{
CAtlStringW strData;
for (ULONG i = 0; i < dwLength; i++)
{
CAtlStringW str;
NumToHexStrW(lpszData[i], str);
strData.AppendFormat(L"%ws ", str);
}
return strData;
}
CAtlString ReadRegBinaryValue(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValue)
{
CAtlString strBinaryValue;
DWORD dwFlags = REG_BINARY;
HKEY hKeyResult;
BOOL ret = RegOpenKeyEx(hKey, lpSubKey, 0, KEY_READ, &hKeyResult);
if (ERROR_SUCCESS == ret)
{
DWORD dwLength = 0;
// 获得读取键值有多少个字符
RegQueryValueEx(hKeyResult, lpValue, NULL, &dwFlags, NULL, &dwLength);
// 申请一段空间,并初始化为空
TCHAR* BinaryInfo = new TCHAR[dwLength + 1];
memset(BinaryInfo, 0, sizeof(TCHAR) * (dwLength + 1));
if (ERROR_SUCCESS == RegQueryValueEx(hKeyResult, lpValue, NULL, &dwFlags, (LPBYTE)BinaryInfo, &dwLength))
{
// 解析还原成字符串
strBinaryValue = RegBinaryStrProcessingW(BinaryInfo, dwLength + 1);
}
delete[] BinaryInfo;
}
RegCloseKey(hKeyResult);
return strBinaryValue;
}