清除3389远程登录日志_C 语言

复制代码 代码如下:

/*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 -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);

}

//-------------------------------------------------
/*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 -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);

}

时间: 2024-11-01 22:16:30

清除3389远程登录日志_C 语言的相关文章

记录Windows远程登录日志

1.建立一个名为RDPlog.bat的批处理文件,内容为: date /t >>Z:\IIS\RDPlog.txt time /t >>Z:\IIS\RDPlog.txt netstat -n -p tcp | find ":3389">>Z:\IIS\RDPlog.txt 2.创建Windows计划任务 服务管理器--诊断--事件查看器--Windows日志--安全 找到任务类别为登录的时间,点击鼠标右键,将任务附加到此时间 选择启动,选择到上边脚

3389远程登录怎么优化最有效

  电脑中的windows系统会出现许多的问题,那是很正常的,就像是在远程登入时,出现蓝屏或者是黑屏的问题,所以今天就教大家怎么优化3389登录,解决问题!一去来看看吧! 优化3389登录,解决蓝屏黑屏等原因.下边看图文操作记录.: 先打开远程登录软件.或者CMD命令MSTSC.显示选项里边选择15位,位数越大,显示的图像越细腻,但是越卡,位数小的显示图像有些失真,15位的刚好.且不影响操作. 本地资源选项,远程计算贡声音:不要播放.磁盘驱动器,打印机,串口行,去掉勾.这些普通用户都用不上的.且

清除3389远程桌面连接记录的批处理_DOS/BAT

复制代码 代码如下: @echo off @reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f @del "%USERPROFILE%\My Documents\Default.rdp" /a @exit /va 删除项下面所有键值 /f不提示 /a 删除隐藏文件 保存为批处理.运行即可.

修改服务器远程登录端口给服务器安全保障

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 就黑客而言,扫描端口入侵是常见的手段,批量扫描数据库,弱口令,如1433(MMSQL数据库默认端口),3306(MYSQL数据库默认端口)等,而批量扫描入侵的第一步,就是扫描3389远程登录端口,通过这个端口,可以判断该IP是不是活的,是不是服务器,是不是广域网,这样通过第一步的筛选,可得到一些有用的IP数据信息.从而进行更深入的渗透.接下来

清除Win8远程桌面登录历史痕迹的方法

  有时候是因为工作的需要,或是教学上的需要,用户都会用到远程桌面,这的确是一个非常便捷的功能,但是对于经常使用远程桌面的用户来说,帐户安全是一个非常重要的关键,一般情况下都会选择清除远程登录历史痕迹来保护帐户安全,那么在新系统win8下,用户该如何来完成这个清除工作呢? 清除Win8远程桌面登录历史痕迹的方法: 1.按"Windows+R"输入"Regedit.exe"回车(如果出现UAC提示,请点击是),依次打开HKEY_CURRENT_USERSoftware

关于3389远程桌面使用SSL加密登录解决方案

3389远程桌面连接为啥要使用ssl加密? 为了保护敏感数据在传送过程中的安全,全球许多知名企业都采用SSL(Security Socket Layer)加密机制.SSL在浏览器和Web服务器之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上.应用层之下,为应用程序提供加密数据通道,它采用了RC4.MD5以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密. 一.服务器远程桌面设置: 默认情况下远程桌面功能是不支持SSL加密认证的,即使我们申请并安装了证书. 第一步:通过任

MYSQL远程登录权限设置

Mysql默认关闭远程登录权限,如下操作允许用户在任意地点登录: 1. 进入mysql,GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION; IDENTIFIED BY后跟的是密码,可设为空. 2. FLUSH privileges; 更新 Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许ro

清除SQL SERVER错误日志出现操作系统错误

  之前在UAT环境搭建的SQL SERVER 2008 R2数据库一直用得比较正常,但最近发现在Sharepoint中不能进行任何操作了,开始以为是什么配置出了问题(因为一直在研究一些新的应用和集成,需要不断地测试),但后来发现是数据库硬盘没用一点空间了,那么自然是不能存任何数据了,所以最先开始清理一些无用的数据库日志,磁盘空间多了几个G的容量,但是等到第二天情况依然如此,数据库硬盘还是满了,问题依旧存在,后台仔细检查了一下所有数据库的容量(因为最初以为是数据库空间每天增长太快了把硬盘占满了)

清除SQL SERVER错误日志出现操作系统错误的解决方案

之前在UAT环境搭建的SQL SERVER 2008 R2数据库一直用得比较正常,但最近发现在Sharepoint中不能进行任何操作了,开始以为是什么配置出了问题(因为一直在研究一些新的应用和集成,需要不断地测试),但后来发现是数据库硬盘没用一点空间了,那么自然是不能存任何数据了,所以最先开始清理一些无用的数据库日志,磁盘空间多了几个G的容量,但是等到第二天情况依然如此,数据库硬盘还是满了,问题依旧存在,后台仔细检查了一下所有数据库的容量(因为最初以为是数据库空间每天增长太快了把硬盘占满了),发