通过递归读取register所有信息的算法
来源:互联网 发布:上膛雾化器最佳数据 编辑:程序博客网 时间:2024/05/16 04:16
这段代码是用来就某个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);
}
}
}
...{
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下的一部分数据
- 通过递归读取register所有信息的算法
- 利用register.jar读取注册表信息
- android中读取联系人的所有信息
- 通过request读取所有参数的练习
- 递归读取文件夹信息
- 通过Spring读取properties配置文件的信息 Spring 读取properties
- 递归读取相应路径下的所有文件
- PHP 递归读取指定文件夹下的所有文件名
- 递归读取某个路径下的所有文件
- java递归抵用读取文件夹内的所有文件
- java递归读取目录下的所有文件
- PHP 递归读取指定文件夹下的所有文件名
- 通过递归遍历n位2进制数的所有情况
- 通过PhoneLookup读取所有电话号码
- 通过PhoneLookup读取所有电话号码
- 通过PhoneLookup读取所有电话号码
- 如何读取计算机上面所有的证书信息
- 读取jar包中所有类的信息
- SEO|搜索引擎优化(如何让你的网站排名靠前)
- oracle函数索引
- 视频播放插入代码
- Serialization的概念
- 戏法人人会做, 巧妙各有不同。 你文不会之乎者也, 武不能安国定邦。 只会些鸡鸣狗盗, 雕虫小伎。 智者顺时而谋, 愚者逆理而动。 我接受你的挑战!
- 通过递归读取register所有信息的算法
- 关于表单提交时的get与post方法!
- object 标签参数大全!
- 对学习计算机专业的人一些忠告
- 使用Oracle9i全索引扫描快速访问数据
- Oracle 无法删除表或视图错误,错误代码:ORA-00942
- struts 实现文件上传与下载
- 游戏业界最有影响力的人-席德.梅尔
- oracle数据库自动备份的实现历程