3389登录日志清除

/*3389登录日志清除*/
   #include <windows.h>
   #include <string.h>
   #include <stdio.h>
   #include <stdlib.h>
   void Usage(char *progname);
   void OpenKey(char *key);
   void DelKey(char *key,char *value);
   void QueryKey(char *key,char *value);
   void ValidateArgs(int argc, char **argv);
   int j=1;

   int main(int argc, char** argv)
   {
   
       //解析命令行输入:
       ValidateArgs(argc, argv);

       return 0;
   }

   //输出帮助的典型方法:
   void Usage (char *progname)
   {
       fprintf(stdout,"===============================================================================/n"
           "/t名称:3389登录日志清除软件/n"
           "/t作者:MSN:pt007@vip.sina.com/n"
           "/tQQ号:7491805/n"
           "/t声明:本软件由pt007原创,转载请注明出处,谢谢!/n"
           "/t举例:  clear3389 -h/n"
           "/t      /"clear3389 -h/" //帮助信息/n"
           "/t      /"clear3389 -a/" //显示本机3389所有登录记录/n"
           "/t      /"clear3389 -d MRU9/" //删除指定的3389登录记录/n"
           "===============================================================================/n");
       exit(0);
   }

   //解析命令行输入的典型方法:
   void ValidateArgs(int argc, char **argv)
   {  
       //打开指定的注册表键:
       char *Key="Software//Microsoft//Terminal Server Client//Default";
       char buff[100]={0};
       int  i,i1,length;
       if(argc<2)
       {
           Usage(argv[0]);
       }
           for(i=1;i<argc;i++)
         {
           if ((argv[i][0] == '-') || (argv[i][0] == '/'))
           {
               switch (tolower(argv[i][1])) //转换成小写字母
               {
                   case 'd': //删除指定的3389登录记录
                       if (argc!=3)
                       Usage(argv[0]);
                       strcpy(buff,argv[2]);
                       length = strlen(argv[2]);
                       for (i1=0; i1<length; i1++)
                       {
                           buff[i1] = toupper(buff[i1]);
                       }
                       //printf("buff=%s/n",buff);
                       QueryKey(Key,buff);
                       exit(0);
                   case 'h'://打印帮助
                       Usage(argv[0]);
                       exit(0);
                   case 'a': //显示本机3389所有登录记录
                       if (argc!=2)
                       Usage(argv[0]);
                       OpenKey(Key);
                       exit(0);
                   default:
                       Usage(argv[0]);
                       return;
               }
           }
         
       }
       printf("继续.../n");
           return;
   }

   //下面是列出所有键值:
   void OpenKey(char *key)
   {
       HKEY hkey;//注册表键值的句柄
       DWORD dwIndex=0,Index=0,lpcbname=1000,ret=0,Type=0,namesize=1500;
       char *T_name=(char *)malloc(1000);
       unsigned char *name=(unsigned char *)malloc(1500);//保存子键名的字符数组
       int i=0;

       //下面是字符数组清0:
       //ZeroMemory(Buffer,1000);
       //ZeroMemory(T_name,1000);


       ret=RegOpenKeyEx(HKEY_CURRENT_USER, //根键名或已打开项的句柄
           key,              //传递一个参数,欲打开的注册表项
           0,                //未用,设为0即可
           KEY_ALL_ACCESS,  //描述新键值安全性的访问掩码
                             //它们的组合描述了允许对这个项进行哪些操作
           &hkey);          //装载上面打开项的句柄

       //printf("ret=%x/n",ret);

       if(ret!=ERROR_SUCCESS) {
           printf("RegOpenKeyEx error! %x/n",GetLastError());
           return ;
       }

       printf("/n(%d)本机的3389登录项目为:/n",j++);
       printf("key=HKEY_CURRENT_USER//%s/n",key);
       for(i=1;ret==ERROR_SUCCESS;i++,dwIndex++)//遍历子键中的每个值
       {
           ret=RegEnumValue(hkey,dwIndex,T_name,&lpcbname,
               NULL,&Type,name,&namesize);
           //dwIndex:欲获取的子项的索引。第一个子项的索引编号为零
           //T_name:用于装载指定索引处项名的一个缓冲区
           //&lpcbname:指定一个变量,用于装载lpName缓冲区的实际长度(包括空字符)。
           if(Type==REG_SZ)
           {
               printf("%d.数值名称:%s/n",i,T_name);
               printf("  数值键值:/"%s/"/n",name);
               printf("  数据类型:REG_SZ/n/n");
           }
           if(Type==REG_DWORD)
           {
               printf("类型为REG_DWORD!/n");
           }
           ZeroMemory(T_name,1000);
           lpcbname=1000;

           ZeroMemory(name,1500);
           namesize=1500;
       }

       RegCloseKey(hkey); //关闭注册键
       free(T_name);
       free(name);
   }

   //下面是查询指定的键值:
   void QueryKey(char *key,char *value)
   {
       HKEY hkey;//注册表键值的句柄
       DWORD dwIndex=0,Index=0,lpcbname=1000,ret=0,Type=0,namesize=1500;
       char *T_name=(char *)malloc(1000);
       unsigned char *name=(unsigned char *)malloc(1500);//保存子键名的字符数组
       int i=0,ret1=0;

       //下面是字符数组清0:
       //ZeroMemory(Buffer,1000);
       //ZeroMemory(T_name,1000);


       ret=RegOpenKeyEx(HKEY_CURRENT_USER, //根键名或已打开项的句柄
           key,              //传递一个参数,欲打开的注册表项
           0,                //未用,设为0即可
           KEY_ALL_ACCESS,  //描述新键值安全性的访问掩码
                             //它们的组合描述了允许对这个项进行哪些操作
           &hkey);          //装载上面打开项的句柄

       //printf("ret=%x/n",ret);

       if(ret!=ERROR_SUCCESS) {
           printf("RegOpenKeyEx error! %x/n",GetLastError());
           return ;
       }

       printf("/n(%d)本机的3389登录项目为:/n",j++);
       printf("key=HKEY_CURRENT_USER//%s/n",key);
       for(i=1;ret==ERROR_SUCCESS;i++,dwIndex++)//遍历子键中的每个值
       {
           ret=RegEnumValue(hkey,dwIndex,T_name,&lpcbname,
               NULL,&Type,name,&namesize);
           //dwIndex:欲获取的子项的索引。第一个子项的索引编号为零
           //T_name:用于装载指定索引处项名的一个缓冲区
           //&lpcbname:指定一个变量,用于装载lpName缓冲区的实际长度(包括空字符)
         
           if(stricmp(T_name,value)==0){
           if(Type==REG_SZ)
           {
               printf("%d.数值名称:%s/n",i,T_name);
               printf("  数值键值:/"%s/"/n",name);
               printf("  数据类型:REG_SZ/n/n");
               ret1=1;
               DelKey(key,value);
           }
           if(Type==REG_DWORD)
           {
               printf("类型为REG_DWORD!/n");
           }
           }
           ZeroMemory(T_name,1000);
           lpcbname=1000;

           ZeroMemory(name,1500);
           namesize=1500;
     
       }
       if(!ret1)
       { printf("/n注意:数值名称%s不存在,请重新输入,注意大小写!/n",value);
       }
       RegCloseKey(hkey); //关闭注册键
       free(T_name);
       free(name);
   }


   //下面是删除指定的键值:
   void DelKey(char *key,char *value)
   {
       HKEY hkey;
       DWORD ret;
       ret=RegOpenKeyEx(HKEY_CURRENT_USER, //根键名或已打开项的句柄
           key,              //传递一个参数,欲打开的注册表项
           0,                //未用,设为0即可
           KEY_ALL_ACCESS,  //描述新键值安全性的访问掩码
                             //它们的组合描述了允许对这个项进行哪些操作
           &hkey);          //装载上面打开项的句柄
       if(ret!=ERROR_SUCCESS) {
           printf("RegOpenKeyEx error! %x/n",GetLastError());
           return ;
       }
     
   
     ret=RegDeleteValue(hkey, value);
     if(ret!=ERROR_SUCCESS) {
           printf("RegDeleteValue %s error! %x/n",value,GetLastError());
           return ;
       }

       printf("RegDeleteValue %s success!/n",value);
       RegCloseKey(hkey);
     

   }
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值