CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

发给系统服务进程的控制请求(暂停,继续,停止等)是由windows的服务控制管理器SCM发出的吗?又是由谁具体实现的?

楼主chtw999(敢问敢答)2004-08-02 23:10:45 在 VC/MFC / 基础类 提问

发给系统服务进程的控制请求(暂停SERVICE_CONTROL_PAUSE,继续SERVICE_CONTROL_CONTINUE,停止SERVICE_CONTROL_STOP等)是由windows的服务控制管理器SCM发出的吗?服务进程的暂停,继续,停止又是由谁具体实现的?  
   
  我所看到的一篇service程序代码,是在服务程序自身的ServiceCtrlHandler函数(服务状态控制函数)里利用CreateThread(),ResumeThread(),SuspendThread()等有关线程的winapi实现的。程序代码经简化后如下::  
   
  //   服務狀態控制函數  
  void   WINAPI   ServiceCtrlHandler(DWORD   dwCode)  
  {  
  WriteToLog("[ServiceCtrlHandler]   Function   begin");  
   
  switch(dwCode)  
  {  
  case   SERVICE_CONTROL_PAUSE:    
  ServiceStatus.dwCurrentState   =   SERVICE_PAUSED;  
            //对下处不能把握,请指教!!!!  
                              SuspendThread(该服务进程的线程句柄);  
                              break;  
   
  case   SERVICE_CONTROL_CONTINUE:   //   繼續  
  ServiceStatus.dwCurrentState   =   SERVICE_RUNNING;  
  //对下处不能把握,请指教!!!!  
                                      ResumeThread(该服务进程的线程句柄);  
                                        break;  
   
  case   SERVICE_CONTROL_STOP:   //   終止  
   
  ServiceStatus.dwCurrentState     =   SERVICE_STOPPED;  
  ServiceStatus.dwWin32ExitCode   =   0;  
  ServiceStatus.dwCheckPoint         =   0;  
  ServiceStatus.dwWaitHint             =   0;  
   
  //对下处不能把握,请指教!!!!  
                                        CloseHandle(该服务进程的线程句柄);  
                                      return   ;  
   
  case   SERVICE_CONTROL_INTERROGATE:    
  break;  
   
  default:  
  break;  
  }  
   
   
  }  
   
   
  多谢!!!!  
  问题点数:0、回复次数:13Top

1 楼sohou(2007的春天)回复于 2004-08-02 23:54:31 得分 0

markTop

2 楼chtw999(敢问敢答)回复于 2004-08-03 09:02:30 得分 0

应该是由   SCP发给SCM,再由SCM发给服务进程的吧?Top

3 楼microyzy(人不在牛,分高就行;分不在高,人牛也行)回复于 2004-08-03 09:59:37 得分 0

我想应该是windows的服务进程吧Top

4 楼aspnetwuxueyou(SHIP IT)回复于 2004-08-03 10:28:07 得分 0

A   user   wanting   to   start,   stop,   or   configure   a   service   uses   an   SCP.   Although   Windows   2000   supplies   built-in   SCPs   that   provide   general   start,   stop,   pause,   and   continue   functionality,   some   service   applications   include   their   own   SCP   that   allows   administrators   to   specify   configuration   settings   particular   to   the   service   they   manage.  
  Top

5 楼aspnetwuxueyou(SHIP IT)回复于 2004-08-03 10:30:54 得分 0

Refer   to    
  chapter   5   Inside   Windows   2000Top

6 楼aspnetwuxueyou(SHIP IT)回复于 2004-08-03 10:43:18 得分 0

OpenScManager,StartService   through   SCP->scm->main   thread   in   service   process(StartServiceCtrlDispatcher)->service   thread  
   
  StartServiceCtrlDispatcher   creates   a   service   thread   for   each   start   command   from   scm.  
   
  servide   thread   calls   RegisterServiceCtrlHandler   immediately   it   is   created  
  The   start   command   is   from   the   scp.This   function   receives   and   stores   a   table   of   functions   that   the   service   implements   to   handle   various   commands   it   receives   from   the   SCM.  
  Top

7 楼chtw999(敢问敢答)回复于 2004-08-03 17:22:10 得分 0

感谢楼上几位的回答,但我依旧不得要领。我的问题是:服务进程的暂停,继续,停止又是由谁具体实现的?也就是说是在服务程序自身的ServiceCtrlHandler函数(服务状态控制函数)里利用CreateThread(),ResumeThread(),SuspendThread()等有关线程的winapi实现呢?还是利用其他方法,定义在其他地方?  
  Top

8 楼aspnetwuxueyou(SHIP IT)回复于 2004-08-03 17:25:11 得分 0

你没有搞明白!  
  启动服务的程序和服务本身其实是两个程序。  
  比如我我开发了一个驱动,我把它作为系统服务。  
  我需要另外开发一个客户端程序来启动服务(利用scp指令和SCM交互)Top

9 楼aspnetwuxueyou(SHIP IT)回复于 2004-08-03 17:27:15 得分 0

当然可以配置这个服务是自动启动的,那么操作系统在进入登录界面之前,  
  services.exe进程会通过帮助你启动这些服务的Top

10 楼aspnetwuxueyou(SHIP IT)回复于 2004-08-03 17:28:42 得分 0

客户端程序   --〉发送指令给SCM--〉SCM启动服务的主线程   --〉启动service   threadTop

11 楼chtw999(敢问敢答)回复于 2004-08-03 20:02:43 得分 0

感谢楼上讲的,我明白你说讲的。我的问题是谁去暂停、继续一个服务,代码写在什么地方?启动好理解,但暂停、继续不好理解。  
  多谢!!!!Top

12 楼chtw999(敢问敢答)回复于 2004-08-04 21:03:03 得分 0

希望高人继续指点!!Top

13 楼louifox(兰陵笑笑生)回复于 2004-08-04 23:57:31 得分 0

都是在服务程序里实现的,具体可以参考<w2k服务器端应用程序设计>这本书Top

相关问题

  • SQL Server企业管理器未能创建对发布"pubs"的请求订阅,why?
  • 关于COleDataSource在桌面及资源管理器会得到多次数据请求的问题
  • 资源管理器
  • 数据库停止问题!!errorlog显示"由于服务控制管理器发出了“停止”请求,SQL Server 将终止运行。"
  • 关于布局管理器
  • windows 资源管理器
  • 调出"设备管理器"
  • 任务管理器变了?
  • mssqlserver服务管理器
  • iis管理器打不开?

关键词

  • scm
  • 控制
  • 函数
  • 线程
  • 系统
  • 代码
  • service
  • 服务
  • 进程
  • 暂停

得分解答快速导航

  • 帖主:chtw999

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo