文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络技术创建SvcHost.exe调用的服务原理与实践
精品推荐
特别推荐
·新手轻轻松松做网管必须掌握的步骤
·ADSL路由方式的NAT(端口映射)
·保护系统 彻底清除Infostealer.Gampass病毒
·网管高招另类方法解决离奇断网故障二例
·Windows2000 下管理员账户真的不安全
·Windows下权限设置详解
·网络排障实战:路由器和交换机为何不通?
·安装网卡驱动常见故障及解决方法
·多种方法让网络共享资源自动映射
·Delphi中的流技术- 详细篇
·秘籍宝典:Ping命令的使用
·教你伪装MAC地址
·掌握超五类 双绞线的 原理与制作方法
·让你的ADSL不再自动掉线
·快速增强路由器安全的十个小技巧
·高手教你实测无线路由器的安全功能
·无线上网搭配方案
·UNIX 常用的指令/终结完整编
·解决南北网络问题 千渡南北互通
·ADSL上网的常见问题及分析集锦
热点TOP10
·惊恐:知道对方IP就能入侵别人的电脑
·窥视计算机病毒的磁盘存储结构
·保护系统 彻底清除Infostealer.Gampass病毒
·Windows 安全诊所:清除间谍软件下篇
·光辉回忆录:黑客创下的“重大战绩”
·ADSL Modem防攻击“修炼秘技”
·数千黑客狂攻世界杯 上演网络狙击战
·真的无罪吗?窥视Serv-U密码破解
·从入门到精通 网吧免费上网狙击战
·网络江湖传奇:认识中国的黑客精英
·批量查询域名工具Domain Inspect 1.5 汉化注册版
·汉化软件教程
·世界上最好的磁盘碎片整理工具原版+汉化+注册机
·SQL Navigator
·配置 VMware通过令牌访问LAN
·狂拽~用别人的服务器做硬盘!
·无图像、无声音、图像声音不同步问题的解决办法
·[常用]更快的文件打包 Ultraiso 软件教学
·驯服你的Windows Firewall
·windows溢出随笔

创建SvcHost.exe调用的服务原理与实践

日期:2005年10月30日 作者: 查看:[大字体 中字体 小字体]


转载:CSDN.Net

1. 多个服务共享一个Svchost.exe进程利与弊

windows 系统服务分为独立进程和共享进程两种,在windows NT时只有服务器管理器SCM(Services.exe)有多个共享服务,随着系统内置服务的增加,在windows 2000中ms又把很多服务做成共享方式,由svchost.exe启动。windows 2000一般有2个svchost进程,一个是RPCSS(Remote Procedure Call)服务进程,另外一个则是由很多服务共享的一个svchost.exe。而在windows XP中,则一般有4个以上的svchost.exe服务进程,windows 2003 server中则更多,可以看出把更多的系统内置服务以共享进程方式由svchost启动是ms的一个趋势。这样做在一定程度上减少了系统资源的消耗,不过也带来一定的不稳定因素,因为任何一个共享进程的服务因为错误退出进程就会导致整个进程中的所有服务都退出。另外就是有一点安全隐患,首先要介绍一下svchost.exe的实现机制。


2. Svchost原理


Svchost本身只是作为服务宿主,并不实现任何服务功能,需要Svchost启动的服务以动态链接库形式实现,在安装这些服务时,把服务的可执行程序指向svchost,启动这些服务时由svchost调用相应服务的动态链接库来启动服务。


那么svchost如何知道某一服务是由哪个动态链接库负责呢?这不是由服务的可执行程序路径中的参数部分提供的,而是服务在注册表中的参数设置的,注册表中服务下边有一个Parameters子键其中的ServiceDll表明该服务由哪个动态链接库负责。并且所有这些服务动态链接库都必须要导出一个ServiceMain()函数,用来处理服务任务。


例如rpcss(Remote Procedure Call)在注册表中的位置是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs,它的参数子键Parameters里有这样一项:
"ServiceDll"=REG_EXPAND_SZ:"%SystemRoot%\system32\rpcss.dll"
当启动rpcss服务时,svchost就会调用rpcss.dll,并且执行其ServiceMain()函数执行具体服务。


既然这些服务是使用共享进程方式由svchost启动的,为什么系统中会有多个svchost进程呢?ms把这些服务分为几组,同组服务共享一个svchost进程,不同组服务使用多个svchost进程,组的区别是由服务的可执行程序后边的参数决定的。


例如rpcss在注册表中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs 有这样一项:
"ImagePath"=REG_EXPAND_SZ:"%SystemRoot%\system32\svchost -k rpcss"
因此rpcss就属于rpcss组,这在服务管理控制台也可以看到。


svchost的所有组和组内的所有服务都在注册表的如下位置: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost,例如windows 2000共有4组rpcss、netsvcs、wugroup、BITSgroup,其中最多的就是netsvcs=REG_MULTI_SZ:EventSystem.Ias.Iprip.Irmon.Netman.Nwsapagent.Rasauto.Rasman.Remoteaccess.SENS.Sharedaccess.Tapisrv.Ntmssvc.wzcsvc..


在启动一个svchost.exe负责的服务时,服务管理器如果遇到可执行程序内容ImagePath已经存在于服务管理器的映象库中,就不在启动第2个进程svchost,而是直接启动服务。这样就实现了多个服务共享一个svchost进程。


3. Svchost代码


现在我们基本清楚svchost的原理了,但是要自己写一个DLL形式的服务,由svchost来启动,仅有上边的信息还有些问题不是很清楚。比如我们在导出的ServiceMain()函数中接收的参数是ANSI还是Unicode?我们是否需要调用RegisterServiceCtrlHandler和StartServiceCtrlDispatcher来注册服务控制及调度函数?


这些问题要通过查看svchost代码获得。下边的代码是windows 2000+ service pack 4 的svchost反汇编片段,可以看出svchost程序还是很简单的。


主函数首先调用ProcCommandLine()对命令行进行分析,获得要启动的服务组,然后调用SvcHostOptions()查询该服务组的选项和服务组的所有服务,并使用一个数据结构 svcTable 来保存这些服务及其服务的DLL,然后调用PrepareSvcTable() 函数创建SERVICE_TABLE_ENTRY 结构,把所有处理函数SERVICE_MAIN_FUNCTION 指向自己的一个函数FuncServiceMain(),最后调用API StartServiceCtrlDispatcher() 注册这些服务的调度函数。



[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 下一页 




上一篇:张朝阳:谁忽略了互联网 谁就忽略了赚钱

下一篇:RAID技术详解

创建SvcHost.exe调用的服务原理与实践 相关文章:
·socket编程原理
·IE7.0浏览器有用的9个使用技巧
·图文详解 Windows 2003服务器集群安装
·绝对好用的注册表技巧
·Helix流媒体服务器架设及RMVB制作教程
·解决与HTTP 500 – 内部服务器错误错误信息有关的问题
·自己电脑做smtp服务器不求人
·非主流ps教程实用的技巧大全
·服务器端口大全
·何谓HTTP 500内部服务器错误
创建SvcHost.exe调用的服务原理与实践 相关软件:
·精通.Net核心技术原理与构架
·2006年考研政治强化班·马克思主义政治经济学原理 刘儒 07
·城市规划原理模拟试题(附答案)
·2006年考研政治强化班·马克思主义政治经济学原理 刘儒 08
·2006年考研政治强化班·马克思主义哲学原理 任汝芬 10
·腾讯企业QQ 服务器端 V 3.0.3
·马克思主义哲学原理自学宝典 V1.00
·2006年1月自考政治经济学原理模拟试卷(一)
·自学考试试题2005年4月自考马克思哲学原理试题
·2006年考研政治强化班·马克思主义政治经济学原理 刘儒 12.25

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot