Windows守护进程的一种简单实现

一讲到守护进程,很多人都想到了Linux系统,确实在Windows上这个说的比较少。今天上午群里有个朋友问我了下Windows下守护进程的实现问题,我想了想,简单用C++写了个小例子,用来实现系统开机自启动(注册表启动),然后启动并守护指定的进程。基本功能还是挺简单的。和大家分享一下,直接上代码了哈。

/*
@描述:一个简单的Windows守护进程的例子(C++版本)
@作者:kikaylee
@日期:2016-05-13 10:30
*/

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <io.h> 
#include <iostream>

using namespace std;

//隐藏DOS黑窗口
#pragma comment(linker,"/subsystem:\"windows\"  /entry:\"mainCRTStartup\"" ) 

//定义路径最大程度
#define MAX_PATH 4096
//定义守护进程名称
#define PROCCESS_NAME "test.exe"
//定义写入的注册表路径
#define SELFSTART_REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"

//设置本身开机自启动
BOOL SetSelfStart()
{
    //获取程序完整名称
    char pName[MAX_PATH]={0};
    GetModuleFileNameA(NULL,pName,MAX_PATH);

    //在注册表中写入启动信息
    HKEY hKey=NULL;
    LONG lRet=NULL;
    lRet=RegOpenKeyExA(HKEY_LOCAL_MACHINE,SELFSTART_REGEDIT_PATH,0,KEY_ALL_ACCESS,&hKey);

    //判断是否成功
    if(lRet!=ERROR_SUCCESS)
    {
        return FALSE;
    }

    lRet=RegSetValueExA(hKey,"testProtect",0,REG_SZ,(const unsigned char*)pName,strlen(pName)+sizeof(char));

    //判断是否成功
    if(lRet!=ERROR_SUCCESS)
    {
        return FALSE;
    }

    //关闭注册表
    RegCloseKey(hKey);
    return TRUE;
}

int main()
{
    //设置程序开机自启动
    if(!SetSelfStart())
    {
        cout<<"守护进程开机自启动失败"<<endl;
        return -1;
    }

    STARTUPINFOA si;
    //进程对象
    PROCESS_INFORMATION pi;
    //初始化
    ZeroMemory(&si,sizeof(si));
    si.cb=sizeof(si);
    ZeroMemory(&pi,sizeof(pi));

    //获取当前程序的路径
    char pPath[MAX_PATH]={0};
    GetCurrentDirectoryA(MAX_PATH,pPath);

    //拼接需要守护的程序
    strcat(pPath,"\\");
    strcat(pPath,PROCCESS_NAME);

    //构造cmd执行守护进程的字符串
    char pCmd[MAX_PATH]={0};
    strcat(pCmd,"cmd /c ");
    strcat(pCmd,pPath);

    //无限循环,监视守护进程
    do{
        //检查守护程序是否存在
        if(_access(pPath,0)!=-1)
        {
            //创建子进程,判断是否执行成功
            if(!CreateProcessA(NULL,pCmd,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
            {
                cout<<"守护进程启动失败,程序即将退出"<<endl;
                return -1;
            }

            //启动成功,获取进程的ID
            cout<<"守护进程成功,ID:"<<pi.dwProcessId<<endl;
            //无限等待子进程退出
            WaitForSingleObject(pi.hProcess,INFINITE);
            //如果退出了
            cout<<"守护进程退出了。。。"<<endl;
            //关闭进程和句柄
            CloseHandle(pi.hProcess);
            CloseHandle(pi.hThread);
        }
        else
        {
            cout<<"守护程序不存在"<<endl;
        }
        //睡一下,重启
        Sleep(2000);
    }
    while(true);
    return 0;
}
  • 13
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
每天,有近900万存在于互联网中的站点受到安全攻击(数据来源:Rising.com.cn),其中绝大多数网站租用虚拟主机搭建, 无权在服务器端安装专用防护软件以及进行必要的安全配置,即使站点采用独立服务器运行,目前市面上大多数杀毒软件针对恶意 脚本的查杀力度远远不够,主要针对于服务器的安全防护方面,稍微进行一些代码变形即可轻松绕过查杀。     Guardian Genius(守护精灵)由此应运而生,该程序与网站程序同样使用脚本代码编写,基于脚本语言ASP、PHP开发的能够运 行在 Windows IIS 6/7/7.5 ASP/PHP下(Linux Apache2 PHP5 的支持将视情况尽快开发完毕),无须在服务器端安装任何应用程序 。也就是说,只要您的服务器能够运行网站程序就能运行本程序。     本程序的诸多业内首创特性和特殊的针对性使之全面超越当前网络上各种安全防护产品的能力和性能。     多脚本支持:程序自带ASP/PHP双重脚本语言支持功能,运行时自动检测网站所支持的脚本类型,并且自动启用,无须用户选择 ASP/PHP版本单独下载,如若服务器同时支持ASP/PHP两种语言,程序将在登录界面提供ASP/PHP的选择,以此方便切换;同时无论切 换何种语言,均使用同一数据库。     主动防御:此功能作为本软件的重点功能被提到开发的最前沿位置!在前述各项功能在非即时状态保障网站程序不受到木马后 门等恶意代码程序威胁的同时,此主动防御功能将在您网站运行的同时时时保障您的站点安全。主动防御技术采用正则表达式进行 最精确的匹配,寻找用户提交信息中包含的各项威胁,并且由于是采用正则表达式逻辑匹配方式,因此误报几率几乎为零,匹配准 确度高达99%。截止本功能从09年3月开发完毕至今为其8个月时间,该功能核心代码经过三次修改完善,已经可以确保可以对当前国 内外任何一款公开版内部版网站漏洞扫描程序进行有效拦截,针对手工方式注入和注入代码变形绕过IDS等方式也有非常高的拦截率 ;与此同时对于程序正常使用中的各种数据提交不会产生误报,这是与当前网络上所有商业版及免费版SQL注入拦截代码(程序)最 大的不同之处。在执行效率上,测试发现对一般页面提交数据的检测只需要0.05-0.1秒左右,可以忽略不计。     变型不可绕过:我们知道,有一些正常的网站程序中一些关键代码会被杀毒软件误报,网站程序开发商的处理办法仅仅是稍微 对关键代码进行一些变形即可轻松让杀毒软件“哑口无言”,同样,木马程序经过稍微的变形也一样可以让杀毒软件“哑口无言” 。本程序利用正则表达式对代码中的关键代码变形进行特殊检测,任你怎么变形,照样可以检测出威胁,绝不“哑口无言”。仅此 一项,本程序已彰显在脚本安全领域完全超越其他杀毒软件。     扫描方式:程序可以根据用户设置针对当前网站脚本代码进行索引,然后对索引文件进行扫描,扫描过程中将与自身的木马后 门程序特征库进行比对,程序自身的特征库可随时连接中心服务器进行升级同步,以确保能够及时防御网络上最新的攻击;同时附 带的智能扫描功能不依靠特征库而采用正则泛匹配方式寻找可疑代码和其中存在的威胁。在进行大批量扫描时,大约每秒可扫描一 个文件,任意多个文件均可逐个扫描,扫描过程中可暂停扫描,随时可恢复。     队列机制:因为脚本语言的特殊性,无法做到类似应用程序(.exe程序)一样在对大量文件扫描时逐个扫描并且反馈扫描结果 ,因此目前网络任何一款Web安全扫描程序都存在对大量文件进行扫描时极度占用服务器资源,并且容易在执行过程中导致IIS进程 假死从而影响网站运行。针对此现象,本程序首创缓冲扫描机制,利用Ajax技术对文件进行队列扫描,扫描过程将逐个文件的进行 ,并且每个文件扫描完成立刻反馈扫描结果,同时在进度条上直观显示扫描进度和当前状态。经过实际测试,程序在执行扫描过程 中对于一台Inter Core 双核 2.2Ghz CPU 4G 内存的服务器所造成的CPU压力稳定在1%左右,内存占用忽略不计。     在线更新:这种只能在常规安全产品上出现的功能也首次被本程序提到Web程序层面上来;对于安全防护产品,时时更新同步网 络上的最新漏洞信息才是关键所在,一款不更新的防护产品在安全领域这个攻与防的此消彼长的战斗中将被直接淘汰,本程序的在 线更新功能将自动连接中心服务器进行最新特征库的下载更新,以确保时时让您的网站处于最新的防护当中。     数据库文件检索:由于主动防御功能的特殊性,需要对网站原有数据库连接文件进行修改,这对于一般的网站站长多有不便, 因此特开发数据库文件检索功能,当您不确定数据库文件位置时,你可以任意填写一个跟数据库有联系的脚本文件位置,程序将自 动“顺藤摸瓜”找到数据库连接文件的准确位置,并且自动修改数据库连接文件进行主动防御核心引擎的挂接工作,一些都无需用 户干预。     在线支持:由于多年处于IT业产品开发维护的最前沿,深知用户使用反馈的珍贵,以及用户的遇到问题是迫切需要解决时的焦 急心情,特此开发在线支持功能,您无需登录网站、论坛、发送电子邮件等,即可将您的反馈信息在本程序中通过“支持中心”立 刻发送到官方站点支持中心等待解决。     守护精灵程序官方网站:http://www.guardiangenius.com
### 回答1: Windows守护进程工具是用于在Windows操作系统中创建和管理守护进程的软件。守护进程是在后台运行的程序,它可以执行各种任务,如监控系统资源,处理文件传输,执行备份和维护任务等。Windows守护进程工具是一种易于使用的软件,它可以方便地管理和监控多个守护进程,从而提高系统管理的效率和可靠性。 Windows守护进程工具的主要功能包括:创建和关闭守护进程、监控守护进程的状态、重新启动守护进程、配置守护进程的参数、查看守护进程的日志信息等。该工具支持多种操作系统版本,包括Windows Server 2003、Windows Server 2008、Windows Server 2012等。 使用Windows守护进程工具可以帮助管理员更好地管理系统资源,并提高服务器的运行效率和可靠性。例如,在配置守护进程的参数时,管理员可以根据系统资源的使用情况来优化守护进程的设置,从而避免资源耗尽或冲突等问题。在监控守护进程的状态时,管理员可以及时发现和解决守护进程的异常情况,保障系统的稳定性和可靠性。 总之,Windows守护进程工具是一款非常有用的软件,可以方便地创建和管理守护进程,保证系统的正常运行并提高系统的安全性和稳定性。 ### 回答2: Windows守护进程工具是一种用于管理、监控和控制Windows操作系统中后台运行的程序或服务的工具。守护进程也称为服务,它能够在系统启动时自动启动,并在系统运行期间一直执行,以提供一些背景或后台任务。 Windows守护进程工具通常由操作系统自带的服务管理器或任务管理器等工具提供。用户可以通过该工具来查看和管理正在运行的服务或进程,包括启动、停止、重启、暂停、继续等操作。此外,用户也可以通过该工具监视服务或进程的状态,并进行报警或手动处理。 在实际应用中,Windows守护进程工具对于系统管理员和开发人员来说非常重要。管理员可以使用该工具来管理各种系统服务,如网络连接、数据库管理、Web服务器等;而开发人员则可以使用该工具来编写、测试和调试自己的应用程序和服务。 总之,Windows守护进程工具为用户提供了一种方便、快捷、安全的管理方式,能够在保证系统稳定性的同时,提升工作效率和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值