这段代码是用来就某个hKey下的所有的信息写入到一个xmldoc中,该算法用一个递归函数实现
void CBackupRegister::LoopBackup(HKEY hKey, DWORD dwKeyIndex, CXmlNode currentNode, CString strLastName)
...{
HKEY hSubKey;
TCHAR szKeyname[MAX_PATH + 1];
TCHAR szValue[1024];
TCHAR szValueName[MAX_PATH + 1];
DWORD dwValueName = MAX_PATH + 1;
DWORD dwValueIndex = 0;
DWORD dwValueType;
DWORD dwValueSize;
DWORD dwIndex = 0;
if( RegEnumKey(hKey, dwKeyIndex, szKeyname, MAX_PATH + 1) == ERROR_SUCCESS)
...{
strLastName = szKeyname;
CXmlNode node = m_xmlDoc.CreateNode(_T("RegSub"));
m_xmlDoc.SetNodeAttribute(node, _T("RegName"), strLastName);
currentNode.Append(node);
currentNode = node;
while(RegEnumValue(hKey, dwValueIndex++, szValueName, &dwValueName, 0, &dwValueType, LPBYTE(szValue), &dwValueSize) == ERROR_SUCCESS)
...{
CString strType, strValue;
ParseValue(dwValueType, szValue, strType, strValue);
node = m_xmlDoc.CreateNode(_T("RegValueName"));
node.SetValue(szValueName);
currentNode.Append(node);
node = m_xmlDoc.CreateNode(_T("RegValueType"));
node.SetValue(strType);
currentNode.Append(node);
node = m_xmlDoc.CreateNode(_T("RegValueData"));
node.SetValue(strValue);
currentNode.Append(node);
}
if( RegOpenKeyEx(hKey, szKeyname, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
...{
LoopBackup(hSubKey, dwKeyIndex, currentNode, strLastName);
}
}
else
...{
while(RegEnumValue(hKey, dwValueIndex++, szValueName, &dwValueName, 0, &dwValueType, LPBYTE(szValue), &dwValueSize) == ERROR_SUCCESS)
...{
CString strType, strValue;
ParseValue(dwValueType, szValue, strType, strValue);
CXmlNode node = m_xmlDoc.CreateNode(_T("RegValueName"));
node.SetValue(szValueName);
currentNode.Append(node);
node = m_xmlDoc.CreateNode(_T("RegValueType"));
node.SetValue(strType);
currentNode.Append(node);
node = m_xmlDoc.CreateNode(_T("RegValueData"));
node.SetValue(strValue);
currentNode.Append(node);
}
}
while(RegEnumKey(hKey, ++dwKeyIndex, szKeyname, MAX_PATH + 1) == ERROR_SUCCESS)
...{
strLastName = szKeyname;
CXmlNode node = m_xmlDoc.CreateNode(_T("RegSub"));
m_xmlDoc.SetNodeAttribute(node, _T("RegName"), strLastName);
currentNode = currentNode.GetParent();
currentNode.Append(node);
currentNode = node;
if( RegOpenKeyEx(hKey, szKeyname, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
...{
dwIndex = 0;
LoopBackup(hSubKey, dwIndex, currentNode, strLastName);
}
}
}代码可以运行,不过不知为什么RegEnumKey函数只能读出hKey下的一部分数据
本文介绍了一种将Windows注册表信息备份到XML文件的方法。通过递归遍历注册表键值,并利用CXmlNode创建节点来存储注册表项的名称、类型及数据。此过程涉及到RegEnumKey和RegEnumValue函数的使用。
1286

被折叠的 条评论
为什么被折叠?



