c++枚举和搜索注册表

来源:互联网 发布:网页电子书制作软件 编辑:程序博客网 时间:2024/06/05 00:11

原文链接:http://blog.csdn.net/earbao/article/details/8486593


#include <stdio.h>#include <windows.h>#define SUBKEYS 1//枚举注册表void EnumRegKey(){HKEY hKey=NULL,h=NULL;char str[MAX_PATH];DWORD num=sizeof(str),index=0,rc;#if SUBKEYSrc=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE",0,KEY_ALL_ACCESS,&hKey);#elserc=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion",0,KEY_ALL_ACCESS,&hKey);#endifif(rc==ERROR_SUCCESS){#if SUBKEYSwhile(RegEnumKeyEx(hKey,index,str,&num,NULL,NULL,NULL,NULL)==0)#elsewhile(RegEnumValue(hKey,index,str,&num,NULL,NULL,NULL,NULL)==0)#endif{printf("%s \n",str);index++;num=MAX_PATH;}printf("\n\nNumber of index =%d\n\n",index);}else{printf("Can't open the key !\n");}RegCloseKey(h);RegCloseKey(hKey);}#define  MAINKEY HKEY_LOCAL_MACHINEint ResultCount=0;bool StealReg(char KeyValue[MAX_PATH],char Virus[MAX_PATH]){if(strcmp(KeyValue,Virus)==0){return true;}else{return false;}}//搜索注册表// 该函数唯一的参数是SubKey,比如"software\\Microsoft"void EnumReg(char SubKey[MAX_PATH]){char temp[MAX_PATH];HKEY hKey = NULL;char str[MAX_PATH];DWORD num = sizeof(str),index = 0,rc;rc = ::RegOpenKeyEx(MAINKEY,SubKey,0,KEY_ALL_ACCESS,&hKey);if(rc == ERROR_SUCCESS){while( RegEnumValue(hKey,index,str,&num,NULL,NULL,NULL,NULL)==0 ){//首先遍历值,进行处理printf("\t%s\n",str);if(StealReg(str,"E:\\Program Files\\Borland\\CBuilder6")){//上面第二个参数就是你要查找的值ResultCount++;}index++;num = MAX_PATH;}index = 0;while( RegEnumKeyEx(hKey,index,str,&num,NULL,NULL,NULL,NULL)==0 ){//然后遍历子项后进行递归printf("%s\n",str);strcpy(temp,SubKey);strcat(temp,"\\");strcat(temp,str);EnumReg(temp);//递归index++;num = MAX_PATH;}}else{printf("Can't Open The Key!\n");}RegCloseKey(hKey);}void main(){//EnumRegKey();EnumReg("software");printf("\n\n符合条件的值共有:%d 条!\n\n",ResultCount);}


0 0
原创粉丝点击