手机
当前位置:查字典教程网 >编程开发 >C语言 >清除3389远程登录日志
清除3389远程登录日志
摘要:复制代码代码如下:/*3389登录日志清除软件*/#include#include#include#includevoidUsage(cha...

复制代码 代码如下:

/*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举例: clear3389 -hn"

"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="SoftwareMicrosoftTerminal Server ClientDefault";

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=%sn",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=%xn",ret);

if(ret!=ERROR_SUCCESS) {

printf("RegOpenKeyEx error! %xn",GetLastError());

return ;

}

printf("n(%d)本机的3389登录项目为:n",j++);

printf("key=HKEY_CURRENT_USER%sn",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.数值名称:%sn",i,T_name);

printf(" 数值键值:"%s"n",name);

printf(" 数据类型:REG_SZnn");

}

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=%xn",ret);

if(ret!=ERROR_SUCCESS) {

printf("RegOpenKeyEx error! %xn",GetLastError());

return ;

}

printf("n(%d)本机的3389登录项目为:n",j++);

printf("key=HKEY_CURRENT_USER%sn",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.数值名称:%sn",i,T_name);

printf(" 数值键值:"%s"n",name);

printf(" 数据类型:REG_SZnn");

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! %xn",GetLastError());

return ;

}

ret=RegDeleteValue(hkey, value);

if(ret!=ERROR_SUCCESS) {

printf("RegDeleteValue %s error! %xn",value,GetLastError());

return ;

}

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

RegCloseKey(hkey);

}

//-------------------------------------------------

/*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举例: clear3389 -hn"

"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="SoftwareMicrosoftTerminal Server ClientDefault";

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=%sn",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=%xn",ret);

if(ret!=ERROR_SUCCESS) {

printf("RegOpenKeyEx error! %xn",GetLastError());

return ;

}

printf("n(%d)本机的3389登录项目为:n",j++);

printf("key=HKEY_CURRENT_USER%sn",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.数值名称:%sn",i,T_name);

printf(" 数值键值:"%s"n",name);

printf(" 数据类型:REG_SZnn");

}

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=%xn",ret);

if(ret!=ERROR_SUCCESS) {

printf("RegOpenKeyEx error! %xn",GetLastError());

return ;

}

printf("n(%d)本机的3389登录项目为:n",j++);

printf("key=HKEY_CURRENT_USER%sn",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.数值名称:%sn",i,T_name);

printf(" 数值键值:"%s"n",name);

printf(" 数据类型:REG_SZnn");

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! %xn",GetLastError());

return ;

}

ret=RegDeleteValue(hkey, value);

if(ret!=ERROR_SUCCESS) {

printf("RegDeleteValue %s error! %xn",value,GetLastError());

return ;

}

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

RegCloseKey(hkey);

}

【清除3389远程登录日志】相关文章:

用C++实现,将一句话里的单词进行倒置的方法详解

Eclipse对printf()不能输出到控制台的快速解决方法

c++中for双循环的那些事

C/C++ 多线程的学习心得总结

探讨C语言中关键字volatile的含义

基于typedef的用法详解

strncpy与snprintf 的用法比较

C/C++可变参数的使用

使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)的方法

C 语言基础教程(我的C之旅开始了)[八]

精品推荐
分类导航