网络安全编程:服务控制管理器实例
几乎每一种操作系统都有一种在系统启动时启动的进程机制,这种机制不会依赖于用户的交互。在Windows下,类似的机制被称为服务或Windows服务。服务是一种程序类型,它在后台运行,服务程序通常可以在本地和通过网络为用户提供一些功能,服务在操作系统启动时就会随之启动的程序。服务程序可能是EXE程序,具有其单独的进程,也有可能是DLL文件依附于某个进程(比如svchost.exe),更有可能是SYS文件而处于系统的内核之中。由于服务所处的核心地位、启动方式等因素,它也是反病毒软件与恶意软件的“兵家必争之地”。对于研究系统安全来说则非常重要。
01 如何查看系统服务
在Windows下,有很多服务是跟随操作系统一起启动的,具体有哪些服务是跟随操作系统一起启动的呢?如何查看呢?其实非常简单。在“我的电脑”上单击鼠标右键,然后在弹出的菜单上选择“管理”,打开“计算机管理”工具,单击左面树形列表的“服务和应用程序”会打开子列表,选择“服务”,则在右侧出现服务项列表。较为简单的方法是直接在“运行”窗口中输入“services.msc”,打开服务管理器。服务管理器主要用于显示系统中已经存在的应用程序服务,显示对服务的描述,还可以控制服务的启动状态和启动方式。服务管理器如图1所示。
图1 Windows下的服务管理程序
在图1显示的服务列表中,只能查看Win32应用程序的服务,无法查看关于驱动程序的服务。可以借助于其他一些工具来查看驱动程序级别的服务,图2使用SREng来查看驱动程序相关的服务列表。
图2 使用SREng查看驱动程序服务列表
接下来会编写一个类似的程序,既可以查看应用程序服务列表,也可以查看驱动程序服务列表。编写完成后的程序界面如图3所示。
图3 服务管理程序界面
编写的服务管理程序既可以查看“Win32服务应用程序”,也可以查看“驱动服务程序”,并且可以对它们的运行状态进行简单的控制。这里开发的服务控制管理器使用MFC的对话框,其中用到了CListCtrl控件。现在就开始打造一个属于自己的服务控制管理器。
02 服务控制管理器的实现
服务控制管理器的开发过程与注册表启动管理器的开发过程比较类似,主要也是枚举服务并显示到列表控件中。对服务状态的控制,是通过服务相关的API函数来完成的。首先来编写代码,希望大家能够掌握服务相关的API函数。在代码的后面,会对开发服务管理器涉及的API进行相应的解释。
学习API函数的使用,MSDN是最好的老师,详细、透彻、权威。在编程的道路上,要不断通过阅读别人的代码来提高自己的编程能力,就需要自己来掌握陌生的API函数,那时一定要想起查阅MSDN。
1. 服务的类型
服务控制管理器的界面都已经熟悉了,界面的布局可以按照自己的方式进行调整。在枚举服务的时候,将“Win32应用程序服务”和“驱动程序服务”分开枚举,这样有助于对各种服务的了解。
枚举这两类服务的主要差别在于调用EnumServicesStatus()函数时为其传递的第二个参数。如果枚举“Win32应用程序服务”,那么传递的参数为SERVICE_WIN32;如果枚举“驱动程序服务”,那么传递的参数为SERVICE_DRIVER。这两个参数其实是系统定义的宏,该宏定义在WinNt.h头文件中,具体定义如下:
SERVICE_DRIVER 和 SERVICE_WIN32 是其他宏的组合,而那些宏又有具体的值。下面解释一下其他宏的含义。
SERVICE_DRIVER 宏由 3 个宏组成,具体如下:
SERVICE_WIN32 宏由两个宏组成,具体如下:
如果想要枚举全部类型的服务,那么使用SERVICE_TYPE_ALL宏即可,该宏的定义如下:
2. 服务的枚举函数
服务的枚举所使用的API函数是EnumServicesStatus(),该函数中需要指定枚举的类型分别是SERVICE_DRIVER和SERVICE_WIN32。
具体来看服务枚举的函数,代码如下:
该函数有一个参数,用来指明枚举类型是“Win32应用程序服务”,还是“驱动程序服务”。该函数的默认参数为“Win32应用程序服务”,该函数的定义如下:
3. 枚举服务相关API函数解释
(1)打开和关闭服务管理器
打开服务管理器的函数定义如下:
参数说明如下。
lpMachineName: 指向欲打开服务控制管理器数据库的目标主机名,本机则设置为 NULL。
lpDatabaseName: 指向目标主机 SCM 数据库名字的字符串。
dwDesiredAccess: 指定对 SCM 数据库的访问权限。
该函数调用成功,返回一个 SCM 句柄,否则返回 NULL。
SCM是服务控制管理器的意思,它是系统服务的一个组成部分,跟开发的软件不是一个概念。
关闭服务句柄的函数定义如下:
该函数用来关闭由OpenSCManager()和OpenService()打开的句柄。
(2)服务的枚举函数
枚举服务的函数定义如下:
参数说明如下。
hSCManager:OpenSCManager()函数返回的句柄。
dwServiceType:指定枚举的服务类型,也就是自定义函数的参数。
dwServiceState:枚举指定状态的服务。
lpServices: 指向 ENUM_SERVICE_STATUS 类型的指针。
cbBufSize:指定缓冲区的大小。
pcbBytesNeeded:返回实际使用的内存空间大小。
lpServicesReturned:返回枚举服务的个数。
lpResumeHandle:返回枚举是否成功。
ENUM_SERVICE_STATUS 结构体的定义如下:
SERVICE_STATUS 结构体的定义如下:
代码中两次调用EnumServicesStatus()函数。第1次没有传递第4个和第5个参数,使得函数返回FALSE,用GetLastError()得到错误的原因为ERROR_MORE_DATA。这时,第6个参数pcbBytesNeeded返回实际需要使用的内存大小,这样可以通过new动态申请所需的堆空间。以这种方式来获取实际所需缓冲区大小的情况是比较多的,请大家一定要理解。
4. 服务的启动与停止
对服务的操作只介绍两种,一种是启动服务,另一种是停止服务,也就是改变服务的状态。经常会用到停止服务的操作,因为系统中有很多用不到的服务,但是它仍然会随着系统的启动而启动,这样既会影响到系统的启动速度,也会占用宝贵的系统资源。因此,没有用的系统服务最好将其停止(其实真正停止服务是改变它的启动状态,而不是这里介绍的运行状态)。
启动服务的代码如下:
停止服务的代码如下:
5. 启动与停止服务相关API函数解释
打开指定服务的函数定义如下:
参数说明如下。
hSCManager: 指定由 OpenSCManager()函数打开的服务句柄。
lpServiceName:指定要打开的服务的名称。
dwDesiredAccess: 对要打开服务的访问权限,这里为了方便,指定为 SC_MANAGER_ALL_ACCESS。
启动服务的函数定义如下:
参数说明如下。
hService: 指定要启动服务的句柄,该句柄由 OpenService()返回。
dwNumServiceArgs:指向启动服务所需的参数个数。
lpServiceArgVectors:指向启动服务的参数。
停止服务的函数定义如下:
参数说明如下。
hService: 指定一个由 OpenService()打开的服务句柄。
dwControl:指定要发送的控制码。
lpServiceStatus:返回服务的状态。
ControlService()可以对服务进行多种控制操作,每种控制操作对应一种控制码。当要停止服务时,使用的控制码为SERVICE_CONTROL_STOP。一定要注意,停止服务不要想当然的使用 StopService()这样的函数,因为没有这个 API 函数。
推荐系统
雨林木风 winxp下载 纯净版 永久激活 winxp ghost系统 sp3 系统下载
系统大小:0MB系统类型:WinXP雨林木风在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业知名品牌,雨林木风WindowsXP其系统口碑得到许多人认可,积累了广大的用户群体,是一款稳定流畅的系统,雨林木风 winxp下载 纯净版 永久激活 winxp ghost系统 sp3 系统下载,有需要的朋友速度下载吧。
系统等级:进入下载 >萝卜家园win7纯净版 ghost系统下载 x64 联想电脑专用
系统大小:0MB系统类型:Win7萝卜家园win7纯净版是款非常纯净的win7系统,此版本优化更新了大量的驱动,帮助用户们进行舒适的使用,更加的适合家庭办公的使用,方便用户,有需要的用户们快来下载安装吧。
系统等级:进入下载 >雨林木风xp系统 xp系统纯净版 winXP ghost xp sp3 纯净版系统下载
系统大小:1.01GB系统类型:WinXP雨林木风xp系统 xp系统纯净版 winXP ghost xp sp3 纯净版系统下载,雨林木风WinXP系统技术积累雄厚深耕多年,采用了新的系统功能和硬件驱动,可以更好的发挥系统的性能,优化了系统、驱动对硬件的加速,加固了系统安全策略,运行环境安全可靠稳定。
系统等级:进入下载 >萝卜家园win10企业版 免激活密钥 激活工具 V2023 X64位系统下载
系统大小:0MB系统类型:Win10萝卜家园在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的萝卜家园品牌,(win10企业版,win10 ghost,win10镜像),萝卜家园win10企业版 免激活密钥 激活工具 ghost镜像 X64位系统下载,其系统口碑得到许多人认可,积累了广大的用户群体,萝卜家园win10纯净版是一款稳定流畅的系统,一直以来都以用户为中心,是由萝卜家园win10团队推出的萝卜家园
系统等级:进入下载 >萝卜家园windows10游戏版 win10游戏专业版 V2023 X64位系统下载
系统大小:0MB系统类型:Win10萝卜家园windows10游戏版 win10游戏专业版 ghost X64位 系统下载,萝卜家园在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的萝卜家园品牌,其系统口碑得到许多人认可,积累了广大的用户群体,萝卜家园win10纯净版是一款稳定流畅的系统,一直以来都以用户为中心,是由萝卜家园win10团队推出的萝卜家园win10国内镜像版,基于国内用户的习惯,做
系统等级:进入下载 >windows11下载 萝卜家园win11专业版 X64位 V2023官网下载
系统大小:0MB系统类型:Win11萝卜家园在系统方面技术积累雄厚深耕多年,windows11下载 萝卜家园win11专业版 X64位 官网正式版可以更好的发挥系统的性能,优化了系统、驱动对硬件的加速,使得软件在WINDOWS11系统中运行得更加流畅,加固了系统安全策略,WINDOWS11系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。
系统等级:进入下载 >
相关文章
- 如何解决锐龙2200g死机蓝屏
- Win8.1本地搜索为什么无法使用
- Win8.1无线网络不稳定/掉线怎么办
- 电脑机箱漏电怎么消除?电脑机箱漏电是哪里的问题?
- 电脑开不了机怎么办?电脑无法开机怎么解决?
- 硬盘双击无法打开的问题该怎么办
- 风行下载速度慢甚至是为0怎么办?风行播放器下载问题及解决方法汇总
- 苹果回应新的iOS恶意软件YiSpector:已在iOS8.4中解决该问题
- 没有路由器怎么连无线 160wifi 解决没有路由器连接无线问题
- 维棠FLV下载视频失败问题汇总及解决方法
- Word2016 出现“此功能看似已中断 并需要修复”问题解决方案(图文)
- Cisco管理的35个常见问题及解答
- NanoStudio怎么用?NanoStudio使用方法及常见问题
- IE浏览器登录网上银行时出现崩溃问题的解决办法
热门系统
推荐软件
推荐应用
推荐游戏
热门文章
常用系统
- 1win11最新娱乐版下载 技术员联盟x64位 ghost系统 ISO镜像 v2023
- 2电脑公司windows7纯净版 ghost x64位 v2022.05 官网镜像下载
- 3外星人系统Win11稳定版系统下载 windows11 64位稳定版Ghost V2022
- 4win11一键装机小白版下载 外星人系统 x64位纯净版下载 笔记本专用
- 5萝卜家园Ghost win10 64位中文版专业版系统下载 windows10纯净专业版下载
- 6【国庆特别版】番茄花园Windows11高性能专业版ghost系统 ISO镜像下载
- 7青苹果系统 GHOST WIN7 SP1 X64 专业优化版 V2024
- 8深度技术ghost win7纯净版最新下载 大神装机版 ISO镜像下载
- 9雨林木风windows11中文版免激活 ghost镜像 V2022.04下载