Service Control Manager 服务管理器简介

这篇具有很好参考价值的文章主要介绍了Service Control Manager 服务管理器简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在windows驱动开发流程中,写完sys驱动binary之后,为了让OS能够正确的从注册表中读取到对应的信息,并且将其load运行起来,还需要编写inf文件来描述配置驱动文件。不过这也不是必须的,可以通过ServiceControlManager直接创建一个指定驱动binary的Service并且启动。如下code:

HANDLE hSCManager;
HANDLE hService;

hSCManager = OpenSCManagerW(
                    NULL, // 可以指定一个远端服务器名
                    SERVICES_ACTIVE_DATABASE, // 目前应当指定SERVICES_ACTIVE_DATABASE
                    SC_MANAGER_CREATE_SERVICE); // 指定该SCM需要进行的操作
if (hSCManager == NULL)
{
    printf("\nOpenSCManager failed");
    return false;
}
    
hService = CreateService(hSCManager, // 之前创建的SCM句柄
                        "Test", // 服务器名
                        "TestDriver", // 显示名
                        SERVICE_START | DELETE | SERVICE_STOP, // 拥有的操作
                        SERVICE_KERNEL_DRIVER, // 创建的服务类型,和普通的服务不同,指明了创建的服务为内核驱动
                        SERVICE_DEMAND_START, // 服务的启动选项,可以选择自动启动,手动启动,以及Demand Start,只有在明确调用的时候才会被启动,重启之后不会被启动。
                        SERVICE_ERROR_IGNORE, // 当服务出现error的时候会怎么处理
                        "C:\\TestDriver.sys", // 需要被load的binary文件
                        NULL, NULL, NULL, NULL, NULL // 一些组和权限的参数
                        );

if(!hService)
{
    hService = OpenService(hSCManager, 
                            "Example", 
                            SERVICE_START | DELETE | SERVICE_STOP
                            );
}

if(hService == NULL)
{
    printf("\nCreate or Open Service failed");
    return false
}

StartService(hService, 0, NULL); // 启动之前创建的Driver Serivce。如果该服务是驱动,不需要传2,3的参数

而通常我们也会使用服务程序来控制或与驱动程序进行通信。所以先来介绍一下关于服务。

Service Control Manager管理着一个数据库,该数据库管理这所有的服务程序和驱动。并且提供了统一的访问控制方式。通过任务管理器就可以看到

Service Control Manager 服务管理器简介

可以看到里面由服务名,描述,以及状态。并且同通过右键可以控制。

同时SCM提供了一系列的API可以让开发者可以开发自己的服务,以及服务控制程序。

值得注意的一点是SCM不止是可以访问本地的服务database,如果具有远端的设备的权限则还能够管理远端的服务数据库。

要了解SCM就需要先知道它所管理的服务的基本信息。

服务程序

服务器程序本质上是一个控制台程序。入口点也是main。不同与普通的桌面应用程序,启动它的不再是用户,而是由服务管理器。当服务程序被服务管理器启动之后需要马上调用StartServiceCtrlDispatcher。从这里开始才是真正区别于桌面程序的地方。普通控制台程序当启动之后,基本就是将所有控制权力交给了开发者。而服务却需要服务启动之后第一时间在主线程中通过StartServiceCtrlDispatcher来注册ServiceMain回调函数。而在其中需要服务程序实现一系列的任务来相应SCM的各种控制指令,从而能够按照SCM的操作来进行响应。主要包含下列操作

  1. 调用RegisterServiceCtrlHandler来注册一个Handler来相应SCM所发送的所有的控制命令control code。例如SERVICE_CONTROL_SHUTDOWN,SERVICE_CONTROL_SHUTDOWN等。
  2. 服务本身需要通过SetServiceStatus来报告当前服务的状态,该状态也能在服务管理器中看到。例如初始化需要用较长时间时需要设置SERVICE_START_PENDING来在未初始化完毕时禁止接收来自于SCM的控制。
  3. 初始化任务完成之后需要将服务状态设置成SERVICE_RUNNING,此时SCM才会正常发送控制命令。
  4. 最后加入遇到了错误,需要负责设置服务SERVICE_STOP_PENDING和SERVICE_STOP从而报告当前服务停止,将错误码设置到SERVICE_STATUS中向SCM报告具体错误。

如果不考虑复杂场景下的实现,完成一个服务程序,完成上面所述的一些步骤就可以了。不过SCM为SC设计了一系列的状态转换,其中会对应于SCM对应的控制请求。具体如下图。

Service Control Manager 服务管理器简介

当实现一个服务程序之后,就能将器注册到服务数据库中,并且由SCM进行管理了。主要分为了配置和管理两种类型。文章来源地址https://www.toymoban.com/news/detail-448717.html

到了这里,关于Service Control Manager 服务管理器简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx简介与安装配置,目录结构和配置文件介绍,配置nginx的service管理

    目录 一.nginx简介 1.简介 2.特性 二.nginx安装 1.rpm包方式 (1)下载扩展源 (2)安装扩展rpm包,nginx -V查看配置参数,后面源码安装时要用到 (3)默认的配置文件位置和html存放位置 2.源码方式 (1)建议提前下好所需要的部分包 (2)下载tar.gz包 (3)建议将包解压到/usr/local

    2024年02月04日
    浏览(43)
  • 【C#】Windows服务(Service)安装及启停

    目录 一、创作背景 二、问题解决 2.1 安装Windows service服务 2.2 主方法Main()主方法改写 2.3 安装service服务/卸载service服务 2.4 服务启停 2.5 服务调用运行 2.6 关于权限的提升 三、资源分享 3.1 引入组件 3.2 新手使用 我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,

    2023年04月08日
    浏览(39)
  • 【微服务】Idea中使用Service管理微服务,解决错误:找不到主类

    如何在本地一键启动很多个微服务,下面介绍下IDEA开发工具中得Services管理管理功能 1、在IDEA中下栏bar中如果存在Services,请看第二步。 2、如果没有请按照以下步骤打开 View - Tool Windows - Services 刚创建好的窗口是空白的,需要我们把服务加进去。也是比较简单:点击最右侧加号

    2024年02月11日
    浏览(41)
  • Windows系统如何将frp或其他应用配置为service服务并开机自启?

    本文使用WinSW实现service服务配置 WinSW(Windows Service Wrapper)是一个开源的 Windows 服务包装器,它可以将任何可执行文件(如 Java 应用程序、Python 脚本、Ruby 脚本等)转换为 Windows 服务,并为其提供了一些额外的功能,如重新启动、日志记录、配置文件管理等。 1. 下载WinSW安装

    2024年02月09日
    浏览(38)
  • 【个人笔记】Linux 服务管理两种方式service和systemctl

    service 命令 与传统的 SysVinit 和 Upstart 初始化系统相关。较早期的 Linux 发行版(如早期的 Ubuntu、Red Hat 等)使用了这些初始化系统。service 命令用于启动、停止、重启和查询系统服务的状态。虽然许多现代 Linux 发行版已经转向使用 systemd,但它们通常仍然提供 service 命令作为向

    2024年02月14日
    浏览(40)
  • Job for DmServiceDMSERVER.service failed because the control process exited with error code.

    Job for DmServiceDMSERVER.service failed because the control process exited with error code. See \\\"systemctl status DmServiceDMSERVER.service\\\" and \\\"journalctl -xe\\\" for details. 这个报错是发生测试数据库备份恢复功能时。系统环境 麒麟linuxV10 + 达梦V8。 备份全库,停止  system stop DmServiceDMSERVER console 界面选择刚做的全

    2024年02月13日
    浏览(48)
  • Job for mysqld.service failed because the control process exited with error code.

    通过百度翻译如下: mysqld.service 的作业失败,因为控制进程退出并显示错误代码。有关详细信息,请参阅 “systemctl status mysqld.service” 和 “journalctl -xe”。 得到的结论时与进程相关 先查询一下mysql的进程 直接简单粗暴的吧红框的两个进程杀掉 每个人的进程号都不一样,注意

    2024年01月17日
    浏览(52)
  • Job for nginx.service failed because the control process exited with error code.

    1. nginx启动报错: 这个错误是nginx.conf配置文件里面配置错误,可以使用命令检查在哪里出错 出错的地方: 进行改正,并再次检查。输出以下信息表示ok。 启动nginx: 建议每次更改配置文件都先执行命令检查一下配置文件是否配置成功。 2.nginx相关命令 查看nginx启动状态 重启加

    2024年02月15日
    浏览(57)
  • Job for network.service failed because the control process exited with error code.

    Linux Centos7 修改为静态iP后重启网络服务遇到的问题 重启网络:service network restart                   /etc/init.d/network restart 报错问题描述:Job for network.service failed because the control process exited with error code. See \\\"systemctl status network.service\\\" and \\\"journalctl -xe\\\" for details.   查看 cat /etc/sy

    2024年02月08日
    浏览(57)
  • 关于Job for network.service failed because the control process exited with error code.

    重启网络出现报错 Job for network.service failed because the control process exited with error code. See \\\"systemctl status network.service\\\" and \\\"journalctl -xe\\\" for details. 1.执行systemctl restart network.service命令后出现下面的错误 2.按照报错提示输入了systemctl status network.service 3.解决方法 3.1网络配置工具network和

    2024年02月11日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包