#include "stdafx.h" #include <stdio.h> #include <windows.h> // 格式化错误码,输出对应错误字符串 void PrintErrorMsg(DWORD dwErrorCode) { char szError[MAX_PATH]; 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[MAX_PATH]; 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[MAX_PATH]; char szValueName[MAX_PATH]; 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; }