蒋懿08 发表于 2013-1-26 12:27:09

注册表的小应用

#include "stdafx.h"#include <stdio.h>#include <windows.h>// 格式化错误码,输出对应错误字符串void PrintErrorMsg(DWORD dwErrorCode){char szError;FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwErrorCode, 0, szError, MAX_PATH, NULL);printf("%s\n", szError);}// 可以设置函数,递归调用,实现遍历主键下面的所有信息int main(int argc, char* argv[]){HKEY hKey;long lReturn = -1;// 打开主键lReturn = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion", 0, KEY_QUERY_VALUE | KEY_READ, &hKey);if(ERROR_SUCCESS != lReturn){PrintErrorMsg(lReturn);return -1;}DWORD dwIndex = 0;DWORD dwKeySize = MAX_PATH;char szKeyName;ZeroMemory(szKeyName, MAX_PATH);FILETIME ftm;// 遍历主键下面的所有子键lReturn = RegEnumKeyEx(hKey, dwIndex, szKeyName, &dwKeySize, NULL, NULL, NULL, &ftm);while (ERROR_MORE_DATA == lReturn || ERROR_SUCCESS == lReturn){printf("%s, size = %d\n", szKeyName, dwKeySize);dwIndex++;dwKeySize = MAX_PATH;ZeroMemory(szKeyName, MAX_PATH);lReturn = RegEnumKeyEx(hKey, dwIndex, szKeyName, &dwKeySize, NULL, NULL, NULL, &ftm);}dwIndex = 0;DWORD dwValueType = 0;DWORD dwDataSize = MAX_PATH;DWORD dwValueNameSize = MAX_PATH;BYTE szDataName;char szValueName;ZeroMemory(szDataName, MAX_PATH);ZeroMemory(szValueName, MAX_PATH);// 遍历主键本身包含的键值lReturn = RegEnumValue(hKey, dwIndex, szValueName, &dwValueNameSize, 0, &dwValueType, szDataName, &dwDataSize);if(ERROR_SUCCESS != lReturn){PrintErrorMsg(lReturn);}while ( ERROR_SUCCESS == lReturn){printf("KeyName\t= %s\nValue\t= %s\n", szValueName, szDataName);dwIndex++;dwValueNameSize = MAX_PATH;dwDataSize = MAX_PATH;ZeroMemory(szDataName, MAX_PATH);ZeroMemory(szValueName, MAX_PATH);lReturn = RegEnumValue(hKey, dwIndex, szValueName, &dwValueNameSize, 0, &dwValueType, szDataName, &dwDataSize);}RegCloseKey(hKey);return 0;}
页: [1]
查看完整版本: 注册表的小应用