win service story

Upload: liuyl

Post on 06-Jul-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 Win Service Story

    1/16

     

    Service的故事 

    Smallfrogs

    [[email protected], http://www.KZTechs.com]

    修订:1.01,2005/4/19

  • 8/18/2019 Win Service Story

    2/16

     

    注意: 

    1. 本文内容用于描述 Service,作者拥有本文的全部版权。 

    2. 未经许可,严禁任何个人、组织将本文用于任何商业场所、各种平面媒体和各种商业网站上。违

    者需要承担相应的法律责任。 

    3. 对于本文提供的内容,作者保留随时进行修订而不告知的权利。 

    4. 对于本文所列举软件、书籍的版权,均由软件持有者和书籍作者所有。 

  • 8/18/2019 Win Service Story

    3/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 3-

    说起 Service,大家可能直接想到的是服务,也就是在 NT   环境下经常被提及的

    services.msc 里面的东西。实际上,service 在微软的文档里面的含义有很多的,可以指常

    规意义上的 Windows 服务(也就是 MMC1  snap-in services.msc 里面的内容),也可以指

    各种驱动。 

    本文将以四个章节介绍 Service 以及和 Service 相关的知识。 

    一 什么是

    Service

    Service 可以分作 2 个大类:服务应用程序(service application)和驱动服务(driver

    service)。 

    服务应用程序指那些遵照 Service Control Manager 2  接口要求的,能够在系统启动时

    自动启动的,用户能够通过服务控制面板控制的那些即使没有一个用户登陆也能够运作的

    程序。 

    驱动服务和服务应用程序非常类似,一般指那些设备驱动程序协议等,大家安装的各种

    驱动程序,如显卡驱动都算作这一个范畴的东西。 

    为了简便起见,Service   一般特指服务应用程序。不过有时候,Service   也会被指为驱

    动服务。这个要根据具体情况具体分析了。 

    本文中服务专门指服务应用程序,驱动服务将以驱动的形式具体指明。 

    1  Microsoft Management Console 的缩写。MMC 是一个用于管理网络、服务、计算机等其他系统组件

    的一个工具。可以运行 mmc.exe 打开 MMC 控制界面。 2  Service Control Manager :Windows 中用于管理注册表中所有服务的服务进程。 

  • 8/18/2019 Win Service Story

    4/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 4-

    二 系统里面的

    Service存储在什么地方

     

    2.1 服务配置信息的保存 

    无论是服务应用程序还是驱动服务,其所有配置信息均保存在注册表里面,具体来说保

    存在%systemroot%\system32\config\system 文件里面,说 Windows 注册表作为 Windows

    系 统 的 核 心 一 点 不 为 过 。 要 查 看 配 置 信 息 , 只 需 要 运 行 regedit.exe , 定 位 到

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services  就可以看到当前系统里

    面所有和服务有关的内容了。 

    提示

    ControlSetNNN和 CurrentControlSet的关系 

    为什么要使用 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet 分支而不使用其他的类似于 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001   等的分支呢?这是因为

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN(NNN 代表数字,例如 001、002 等)

    分 支 在 整 个 Windows   环 境 中 显 得 非 常 重 要 , 为 了 避 免

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN   分支被损坏导致 Windows   不能够启

    动,微软在设计的时候加入了一个备份。由于不知道当前正在使用的分支是 001 还是 002(后

    面 有 方 法 教 你 如 何 判 断 的 ) , 因 此 不 推 荐 直 接 采 用

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN 分支的方法操作。 

    现 在 说 说 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet   ,

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet   分 支 是 当 前 正 在 使 用 的

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN 分支的一个完全映射,或者说是一个符号连接。修改 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet 分支可以把你所做的

    修改直接反映到当前正在使用的 HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN上面,

    而无须你去自己修改 HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN  里面的内容。因

    此建议大家查看/修改 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet  而不是查看/

    修改 HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN。 

    如何确定当前正在使用的 ControlSetNNN

    在 某 些 时 候 , 我 们 还 是 需 要 直 接 操 作

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN分支的,例如:由于一些特殊的原因,

    造 成 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001   和

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002 都出现问题,要解决问题需要直接控制

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN( 在 另 外 一 个 系 统 里 面 加 载 注 册 表

    Hive),这个时候就要确定当前正在使用的 NNN 值是多少。其实,当前正在使用的 NNN 值

    可以通过查看 HKEY_LOCAL_MACHINE\SYSTEM\Select\Current 获得,如果值为 1 则表示

    是 001,值为 2 则表示 002 等待。另外,HKEY_LOCAL_MACHINE\SYSTEM\Select\ Failed

    表 示 上 次 Windows   启 动 失 败 时 的 NNN   值 , 如 果 是 1   则 表 示 上 次 使 用

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001   的 数 据 启 动 失 败 了 。 在

    HKEY_LOCAL_MACHINE\SYSTEM\Select 下还有一个键值叫做 LastKnownGood,这里的

    表示的是最后一次正确配置的 NNN 值是多少。如果你启动的时候按下 F8 调出 Windows 启动菜单,那么会看到一个叫做使用最后一次正确配置的启动项目出现。如果选择这个启动项

  • 8/18/2019 Win Service Story

    5/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 5-

    目 启 动 , 那 么 系 统 会 读 取 LastKnownGood   值 确 定 是 由 哪 一 个

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSetNNN 分支启动系统。如果 LastKnownGood

    值是 2 则表示使用 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002 启动。 

    在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services  下面,有若干子项。

    每一个子项对应了一个服务,包括服务应用程序和驱动服务。如图所示。 

    图:记录服务信息的注册表分支 

    任意选择一个子项,可以看到各种键值,这里介绍一下一些常用的键值的用途: 

    名字  类型  用途 

    ErrorControl REG_DWORD 错误控制。标示如果该服务/驱动发生错误,应该进行的

    操作是什么。值的含义如下: 

    值 含义 解释 

    0 忽略 系统记录这个错误并且忽略这个错误,继

    续启动。 

    1 正常 系统记录这个错误并且弹出一个提示消

    息,继续启动。 

    2 严重 系统记录这个错误。如果当前正在使用的模式是最后一次正确配置模式,则继续,

    否则重启并使用最后一次正确配置模式。

    3 关键 系统记录这个错误。如果当前正在使用的

    模式是最后一次正确配置模式但是还是发

    生错误,那么启动失败,Windows 出现蓝

    屏,否则会重启并使用最后一次正确配置

    模式。 

    不要修改这里的数值除非你明确的知道你正在做什么。 ImagePath REG_SZ 对应的 2 进制文件路径。如果该值未指定,则 Windows

    会搜 索%systemroot%\system32\drivers   目录和环境变

  • 8/18/2019 Win Service Story

    6/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 6-

    量 Path 里面指定的路径。 

    不要修改这里的数值除非你明确的知道你正在做什么。 

    DisplayName REG_SZ 显示名。由于 Windows 对服务/驱动的控制是基于服务名

    (每个子项的名字就是一个服务名),而服务名命名很多

    是一些缩写,不便于用于识别。因此出现了显示名。例如:RpcSS   服 务 的 显 示 名 就 是 Remote Procedure Call

    (RPC)。 

    该值可以不存在。 

    Description REG_SZ 描述信息。用于在 MMC Snap-in (Service.msc) 里面显

    示某一个服务的描述信息。通常用于服务应用程序。如果

    这个键值不存在,则描述信息为空。 

    Start REG_DWORD 启动类型。用于标示一个服务/驱动应该怎样启动。启动

    类型供有 5 种: 

    值 含义

     解释

     

    0 Boot Start Ntldr   或 OSLoader   预加载驱动

    在系统启动的时候。使用这种启

    动类型,比 System Start 更早一

    点。 

    1 System Start 在系统核心初始化的时候,开始

    对驱动被加载和初始化。 

    2 Auto Start 当 SCM 进程 services.exe 启动

    以后开始加载驱动或服务。在

    MMC Snap-in 里面,对应的启动模式是自动。 

    3 Demand Start 当某个服务处于这种类型的时

    候,如果系统发现有申请这个服

    务,则由 SCM 启动这个服务。

    在 MMC Snap-in 里面,对应的

    启动模式是手动。 

    提示:如果你需要修改一个不

    需要的服务的启动类型,建议

    设置为手动模式,这样如果以

    后有其他程序需要这个服务,则 Windows 会启动这个服务。

    如果没有需要,则这个服务将

    不会被启动而表现为已停止。 4 Disabled 服务将不会被启动。在 MMC

    Snap-in   里面,对应的启动模式

    是已禁止。 

    不要修改这里的数值除非你明确的知道你正在做什么。 

    Type REG_DWORD 类型。如 1 表示是设备驱动,2 表示是核心模式的文件系统驱动。注意,该值是可以叠加的。 

  • 8/18/2019 Win Service Story

    7/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 7-

    不要修改这里的数值除非你明确的知道你正在做什么。 

    DependOnService REG_MULTI_SZ 依赖于何种服务。可以在 MMC Snap-in Services.msc 里

    面看到 

    不要修改这里的数值除非你明确的知道你正在做什么。 

    ObjectName REG_SZ 确定服务运行于何种账户下。如果不存在,则默认使用LocalSystem。这个值不适用于驱动服务。 

    不要修改这里的数值除非你明确的知道你正在做什么。 

    另外,还有其他一些键值可以在每一个子项里面看到,由于其他的键值较少的通过直接编

    辑注册表操作,因此这里不再介绍。 

    2.2 服务运行于何种权限下 

    下面说说服务运行于何种账户下。在 Windows XP/Server 2003 下面,服务可以运行于

    不同的账户下面,常见的有 Local System、Network Service 和 Local Service,根据需要

    也可以配置运行于  Administrator   或其他账户下面。在任务管理器里面,Local System、

    Network Service 和 Local Service 分别对应的用户名是: 

    Local System SYSTEM

    Network Service NETWORK SERVICE

    Local Service LOCAL SERVICE

    如下图所示运行于不同账户下的服务。 

    图:运行于不同用户下的服务 

    之所以要区分账户,主要是为了考虑到权限问题。如果一个服务有了很高的权限,那么

    他能够进行的操作就很多,当然,也带来了更多的不安全隐患。 

      Local System : 该 账 户 具 有 相 当 高 的 权 限 。 首 先 , 该 账 户 也 隶 属 于 本 地

     Administrators 用户组,因此所有本地 Administrators 用户能够进行的操作该账户

    也能够进行,其次,该账户还能够控制文件的权限(NTFS 文件系统)和注册表权

    限,甚至占据所有者权限来取得访问资格。如果机器处于域中,那么运行于 Local

    System   账户下的服务还可以使用机器账户在同一个森林中得到其他机器的自动认

    证,最后一点就是运行于 Local System 下的进程能够使用空会话(null session)

    去访问网络资源。而且,其他一些 Windows  用户模式下的核心组件也运行于该账

    户下,例如 system32\Smss.exe   等。需要注意的是,运行于此账户下的进程使用

  • 8/18/2019 Win Service Story

    8/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 8-

    的是 HKEY_USERS\.Default 账户配置,因此它不能够访问其他账户的配置。 

      Network Service:该账户也是为了使用机器账户在网络上的其他计算机上认证而设

    定的。但是他没有 Local System 那么多的权限。运行于此账户下的进程使用网络

    账 户 配 置 文 件 HKEY_USERS\S-1-5-20   和 Documents and

    Settings\NetworkService。 

      Local Service:运行于此账户下的进程和运行于 Network Service 账户下的进程的区别在于运行于 Local Service 账户下的进程只能访问允许匿名访问的网络资源。

    运行于Local Service 下的账户使用的配置文件是HKU\S-1-5-19 和Documents and

    Settings\LocalService。 

    下表对照了 3 种账户用户组关系(摘自 Microsoft Windows Internals 4th) 

    Local System Network Service Local Service

    Everyone Everyone Everyone

     Authenticated Users Authenticated Users Authenticated Users

     Administrators User User

    Local LocalNetwork Service Local Service

    Service Service

    2.3 服务的宿主程序 

    最后,说说一个经常被提起到的程序:svchost.exe。 

    服务对应的 2 进制文件可以分作可执行文件和 DLL 动态链接库文件两类。对于可执行

    文件来说,其本身就是服务的宿主程序,而对于 DLL 动态链接库来说,需要一个宿主程序

    来引导服务的启动。 

    Svchost.exe,是大多数 WIndows 服务的宿主程序。Svchost.exe 程序就是一个用于加

    载服务对应的 2 进制文件类型为 DLL 的宿主程序。 

    Svchost.exe 一般位于%systemroot%\system32 目录下面,另外,如果启用了 DllCache

    功能,还可能存在于%systemroot%\system32\dllcache   目录下。另外,如果 Windows

    Service Pack  不是使用集成安装的,那么还可能存在于%systemroot%\ServicePack  目录

    下。除此之外,svchost.exe 不应该存在于其他的目录下面。如果存在,那么这个 svchost.exe

    可能不是系统自带的而是计算机病毒等一些恶意软件生成的,请小心检查。 

    Svchost.exe 作为服务的宿主程序,在启动的时候,通过以下方法来启动服务:系统启动的时候,系统读取注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

    NT\CurrentVersion\SvcHost 下的键值。在这个分支下,有很多键值类型为 REG_MULTI_SZ

    的键值,每一个键值代表一组服务。Svchost.exe   的每个实例将执行一个键值类型为

    REG_MULTI_SZ 的键值,举例来说,当 svchost.exe 开始读取 netsvcs 的时候,系统将创

    建一个 svchost.exe 的实例(在任务管理器里面呈现为进程)来处理 netsvcs 键值的数据。

    所有在 netsvcs   里面描述的服务将运行于一个 svchost.exe   进程里面,也就是说,一个

    svchost.exe 将处理所有 netsvcs 里面记录的服务。这就是所谓的宿主的概念。不过有一点

    需要注意,如果有任何一个服务发生问题,可能导致宿主程序 svchost.exe 崩溃,甚至导致

    Windows 崩溃。 

    在不同的系统中,svchost.exe 的实例数目是不相同的。这是因为微软将不同的服务归结到不同的 svchost.exe 实例,在 Windows Server 2003 下,RpcSs 服务就单独的由一个

  • 8/18/2019 Win Service Story

    9/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 9-

    svchost.exe 负责,这是为了保证不会由于其他服务的错误而导致整个 svchost.exe 进程错

    误。我们可以这样理解:如果有一个 svchost.exe 作为 2 个服务的宿主,其中一个是系统重

    要的服务 A,如果 A 停止,则整个系统就崩溃,而另外一个服务是 B,B 不是一个重要的

    服务,停止 B 不会引起整个系统的崩溃。如果某一天服务 B 发生异常,导致 B 的宿主程序

    svchost.exe 崩溃,那么也会导致服务 A 崩溃,从而导致系统崩漏。因此,一个 svchost.exe

    作为几个服务的宿主是很重要的,也不要对比自己的系统里面的 svchost.exe 实例数量为什么要比别人的多,影响 svchost.exe 实例数量完全决定于你开启的服务的数量。 

    要确定一个 svchost.exe 作为哪些服务的宿主,可以在命令行方式下运行  tasklist /svc

    查看(Windows XP/Server2003)。如图所示。 

    图:使用 tasklist /svc 查看 svchost.exe 作为哪些服务的宿主 

  • 8/18/2019 Win Service Story

    10/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 10-

    Troubleshooting Service

    3.1 Troubleshooting 的工具 

    Troubleshooting,大意就是故障排除。排除由于服务引起的故障一般需要花费大量的

    时间,所以碰到此类问题,请一定要有足够的耐心。由于直接操作注册表比较麻烦,而操

    作服务 MMC Snap-in Service.msc 大家都比较熟悉了,因此下面我将介绍其他的 3 种方法

    用于 troubleshooting。 

      SC.EXE

    SC.EXE 是一个由微软开发的一个服务/驱动控制、配置程序。SC.EXE 运行于

    命 令 行 模 式 下 , 在 Windows XP/Server 2003   中 , 由 系 统 直 接 提 供 , 位 于

    %systemroot%\system32 目录下面。如果是 Windows 2000,可以从 Windows

    2000 Resource Kit 里面获取,也可以使用 Windows XP/Server 2003 自带的版本。

     

    图:SC.EXE

    SC.EXE   能够创建、删除、启动、暂停、停止、查询、枚举、配置各种服务,

    也包括驱动服务。具有相当强大的功能。 

    常用的操作有: 

    操作  命令 

    删除服务  sc delete

    创建服务  sc create binpath=

    停止服务  sc stop

    启动服务  sc start 等等等等……

  • 8/18/2019 Win Service Story

    11/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 11-

    另外,sc.exe 支持多级帮助,也就是说如果你不清楚 sc create 后面跟的参数,

    还可以输入 sc create /? 进行查询。 

    可以这样说,sc.exe 提供的一个用户创建、管理、控制自己的服务/驱动的可能,

    只要用户写出一个服务/驱动程序,就可以使用 sc.exe 创建、管理、控制一个服务/

    驱动。 

    不过,sc.exe 也有一些缺点:第一个缺点就是操作是在命令行下完成的,操作上有些不便,第二个缺点就是要直观的查询一个服务/驱动的状态,需要提供服务/

    驱动名或使用枚举参数,不过由于是在命令行下,枚举出来的结果有点混乱。 

    瑕不掩瑜,SC.EXE 绝对是一个强大的、适用于高级管理人员的极好的服务/驱

    动管理工具。 

      Services/Drivers Configure Tool

    由于 SC.EXE 需要在命令行下使用,而且参数复杂、众多,让人难以上手,基

    于这个原因,我设计、开发了一个基于图形化操作的服务 /驱动配置管理工具: 

    Services/Drivers Configure Tool。Services/Drivers Configure Tool 可以从我的网

    站:http://www.KZTechs.com 上面免费下载使用。 

    图:Services/Drivers Configure Tool

    从名称上看,这个工具针对的不仅仅是服务,还可以针对驱动。 

    首先,Services/Drivers Configure Tool 能够枚举系统里面安装的全部服务和驱

    动,并且能够将结果输出为文件供分析使用; 

    其次,Services/Drivers Configure Tool 能够隐藏所有发行者标示为 Microsoft

    的项目,这样一是可以减小数量,二是可以避免不必要的操作。 

    再次,Services/Drivers Configure Tool 基于图形化操作,而且提供了多语言支

    持,进一步降低了操作难度。 

    在功能上,考虑到大家使用最多的操作,Services/Drivers Configure Tool 提供

  • 8/18/2019 Win Service Story

    12/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 12-

    了设置服务启动类型和删除服务/驱动的功能(功能可以根据反馈不断的增加)。由

    于服务作为系统关键部分,对服务,特别是关键服务进行不正常操作会导致系统崩

    溃,因此在 Services/Drivers Configure Tool 里面,我加入了对关键服务操作的限

    制以最大可能的保证系统的安全。 

      设备管理器 设备管理器也能够 troubleshooting?对!设备管理器也具有 troubleshooting 的

    功能。设备管理器能够显示系统里面所有安装的驱动,并且设置这些驱动的启动类

    型。要实现这个功能,需要进行一定的配置: 

    打开命令行提示窗口,输入以下命令: 

    set devmgr_show_nonpresent_devices=1

    回车接着输入: 

    devmgmt.msc

    就会启动能够显示特殊状态的设备管理器。在这种模式下,设备管理器能够显

    示所有没有和系统相连接的设备以及他们安装的驱动,由于大多数硬件设备都是

    PnP 的,一般情况下不需要操作。今天我们要关注的是非 PnP 设备的操作。因为很多驱动都不是 PnP 的,特别是一些非硬件设备的驱动。 

    选择设备管理器的查看菜单,再选择显示隐藏设备,完成以后可以看到设备管

    理器界面里面多了一个 Non-Plug and Play Drivers 的项目,在这个项目下面可以看

    到所有的非 PnP 设备的驱动,例如一些反病毒软件或防火墙软件安装的驱动程序。

     图:配置显示非 PnP 设备以后设备管理器 

    双击任何一个项目可以对这个驱动进行配置,例如我对 Outpost 防火墙软件的

    驱动进行配置: 

  • 8/18/2019 Win Service Story

    13/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 13-

    图:配置驱动状态 

    3.2为什么要配置服务

     /驱动

     

    这一节最后的内容是关于为什么要配置服务和驱动。 

    由于服务是为某个特定事物服务的,停止了某一个服务将停止对这个事物的支持。例如

    我将 Telnet 服务停止以后,远程用户将不能够使用 Telnet 登录到我的系统。对于驱动来说

    也是这个道理。 

    但是为什么要停止驱动甚至删除驱动呢?一般来说,一个驱动总有一些管理程序来控

    制,正常模式下,如果这个管理程序向驱动发出的停止工作的指令或我们卸载了这个管理程序连同这个驱动,那么操作完成以后系统不应该再受到这个驱动的影响。但是,如果这

    个驱动有 BUG 或卸载过程中产生错误造成驱动没有卸载掉,在这个时候,我们就必须人工

    的对驱动进行控制,包括停止、删除等操作。 

    需要知道的是,驱动由于工作在系统底层,且一般不提供直接人机交流,用户难以知道

    驱动的工作状态,再加上驱动在工作时往往会嵌入到正常的系统处理中,如果驱动的 BUG

    发作,那么系统的正常处理将受到严重的影响。如果碰到这类问题,我们就需要将含有 BUG

    的驱动停止掉或删除掉,而且产生此类 BUG 的驱动往往是非 PnP 类型的,特别是一些反

    病毒软件或防火墙软件引入的驱动。 

  • 8/18/2019 Win Service Story

    14/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 14-

    四 计算机病毒和

    Service

    计算机病毒,很熟悉的名字了吧? 

    计算机病毒的发展和反计算机病毒软件的发展和 Service 是密切相关的。计算机病毒为

    了让系统运行(没有被运行的计算机病毒不会对系统有任何破坏),常常使用一些隐蔽的加

    载方法。随着大家对计算机病毒的重视,计算机病毒程序的加载方法已经逐渐走向使用

    Service 的方法来加载。使用服务应用程序加载的计算机病毒已经很多,而使用驱动加载的

    计算机病毒也不是没有。 

    对于反病毒软件来说,要完成实时监控功能,必须有一个驱动在底层工作。驱动的作用

    就是截断系统的 IO 等操作,然后把 IO 操作目标传递给反病毒引擎检查,如果是病毒则拦

    截,否则放行。说着很简单,但是做起来就不那么简单了。 

    要发现使用 Service 启动的计算机病毒程序,一是要能够识别常见的服务/驱动,并确认

    其对应的 2 进制文件是否正确(Windows 下系统自带的服务或驱动对应的 2 进制文件一般

    位于%systemroot%\system32   目录下面);二是要检查系统工作状态。一般情况下,我采用的方法是;使用 MsConfig.EXE 或 Services/Drivers Configure Tool 将系统自带的服务/

    驱动隐藏掉,然后对剩下的项目逐一检查。 

    另外,如果发现系统里面已经安装的反病毒软件或某些配置程序如注册表编辑器

    regedit.exe  无法启动,那么可以肯定地说你的系统已经感染了计算机病毒,而且这种计算

    机病毒能够杀死进程。碰到这种情况,一是可以使用其它工具或修改这些配置工具的文件

    名为其他(在 Windows 环境下,进程名是可执行文件的名字,大多数计算机病毒杀进程的

    实现方式是根据进程名确定的,如果进程名不在查杀范围内则不会被查杀。不过也有一部

    分计算机病毒通过窗口标题确定进程是否应该被杀死)。二是可以使用安全模式或在其它系

    统下使用注册表编辑器的加载其它配置单元功能(Load Hive)把染毒系统的注册表打开,

    清除掉病毒的自动启动项。如果病毒没有启动,那么也就不能造成任何破坏了。 

  • 8/18/2019 Win Service Story

    15/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 15-

    五 后记

     

    Service 是一个广泛而复杂的问题,要想讲清楚不是 10 多页能够完成的。本文简单的

    描述了 Service 的性质和一些大家容易碰到的问题,希望能够帮助大家对 Service 有一个更

    好的认识。 

    由于本人水平有限,如果发现有不正确的或有疏漏的地方,请指出;如果对本文有什么

    意见,也可以告知我。我的 Email 是:[email protected],谢谢各位! 

    感谢您的阅读! 

    Smallfrogs

    2005/4/19

  • 8/18/2019 Win Service Story

    16/16

    Service 的故事  Smallfrogs ( http://www.KZTechs.com )

    - 16-

    六 附录

    参考资料: 

    Microsoft Corporation, Microsoft MSDN Library, http://msdn.microsoft.com/library/ 

    Microsoft Corporation, Microsoft Technet, http://technet.microsoft.com/ 

    Mark E.Russinovich & David A.Solomon, Microsoft Windows Internals 4th

    , Microsoft Press

    Microsoft Corporation, Windows Server 2003 System Services Reference,

    http://www.microsoft.com/downloads/details.aspx?FamilyID=b38a0682-2997-4678-9d9e-

    a07cc66a3bba&displaylang=en 

    Microsoft Corporation, Windows XP Professional Resource Kit Documentation, Microsoft

    Press