欢迎来到 - 多学网 - http://www.duoxue8.com !
当前位置:多学网学习教育电脑学习组网通信组网技巧替换服务但原服务不失效的方法

替换服务但原服务不失效的方法

[11-11 12:19:17]   来源:http://www.duoxue8.com  组网技巧   阅读:110
替换服务但原服务不失效的方法,标签:家庭组网,网方案,电脑基础知识,http://www.duoxue8.com

替换系统服务是做的一个好办法,ring3实现,稳定可靠,也具有一定的隐蔽性。这里简单说说怎么样使用自己的服务替换系统服务,并且保证原来真实的系统服务不失效。 


替换服务,主要有两种常见的办法,第一是修改注册表中对应服务的可执行文件路径,第二个是直接替换服务文件。第一个办法的缺陷是修改注册表,第二个是需要关闭SFC。而他们共有的缺点是替换了服务之后原来的老服务就失效了,以至没法替换系统关键服务。服务的执行是从ServiceMain函数开始的(当然也可以自己定义一个别的名字), 因此如果在我们的服务执行的时候,在我们的ServiceMain里面,顺便执行一下真实服务的ServiceMain函数,老服务就不会失效了。最方便 这么做的,莫过于老服务是依附于svchost启动的dll了。LoadLibrary一下,再GetProcAddress一下,再执行一下就好了。 


具体的代码实现很简单,我就不贴了。需要注意的是RegisterServiceCtrlHandler函数的调用,一个服务只能调用 一次,原服务的ServiceMain里面一定会调用的,因此我们自己的ServiceMain里面就不用写了,反而代码变得更少,更干净。另外一个注意 点,服务一般都是要做成死循环的,所以要在调用老服务的ServiceMain之前,创建线程来执行自己的服务主功能。 

有意思的是,这样替换了依附svchost的服务之后,如果线程里面拒绝退出,服务还是可以停掉,但是即使停掉了,我们自己的dll却还是在svchost的空间中执行。 


 




替换服务但原服务不失效的方法 结束。
Tag: 组网技巧家庭组网,网方案,电脑基础知识电脑学习 - 组网通信 - 组网技巧