Windows XP下Service的编程入门[1]

// _dse.cpp : Defines the entry point for the console application.
// 作者: 秋镇菜
// E-mail: cyin8@msn.com

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
 LPCTSTR lpServiceName = "Themes"; // 本例为关闭 Themes 服务

SC_HANDLE scman = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
/* =============================================================================
SC_HANDLE OpenSCManager(LPCTSTR lpszMachineName,
                        LPCTSTR lpszDatabaseName,
                        DWORD fdwDesiredAccess);
== Open SCManager 函数打开指定计算机上的service control manager database。
== 其中参数lpszMachineName指定计算机名,若为空则指定为本机。
== 参数lpszDatabaseName指定要打开的service control manager database,默认为空。
== 参数fdwDesiredAccess指定操作的权限,可以为下面取值之一
SC_MANAGER_ALL_ACCESS        //所有权限
SC_MANAGER_CONNECT           //允许连接service control manager
SC_MANAGER_CREATE_SERVICE    //允许创建服务对象并把它加入service control manager database
SC_MANAGER_ENUMERATE_SERVICE //允许枚举service control manager database中的服务
SC_MANAGER_LOCK              //允许锁住service control manager database
SC_MANAGER_QUERY_LOCK_STATUS //允许获取servicecontrolmanagerdatabase的封锁信息
== 函数返回值:函数执行成功则返回一个指向service control manager database的句柄,失败则返回NULL。
============================================================================== */
 if (scman)
 {
  SC_HANDLE sh = ::OpenService(scman, lpServiceName, SERVICE_STOP);
/* ========================================================================
SC_HANDLE OpenService(SC_HANDLE schSCManager,
                      LPCTSTR lpszServiceName,
                      DWORD fdwDesiredAccess);
== OpenService函数打开指定的Service。
== 其中参数schSCManager是指向service control manager database的句柄,
由OpenSCManager函数返回。
== 参数lpszServiceName要打开的服务的名字,注意大小写。
== 参数fdwDesiredAccess指定操作的权限,可以为下面取值之一
SERVICE_ALL_ACCESS            //所有权限
SERVICE_CHANGE_CONFIG         //允许更改服务的配置
SERVICE_ENUMERATE_DEPENDENTS  //允许获取依赖于该服务的其他服务
SERVICE_INTERROGATE            //允许立即获取服务状态
SERVICE_PAUSE_CONTINUE        //允许暂停和唤醒服务
SERVICE_QUERY_CONFIG           //允许获取服务配置
SERVICE_QUERY_STATU            //允许通过访问service control manager获取服务状态
SERVICE_START                  //允许启动服务
SERVICE_STOP                   //允许停止服务
SERVICE_USER_DEFINE_CONTROL    //允许用户指定特殊的服务控制码
== 函数返回值:函数执行成功则返回指向某项服务的句柄,失败则返回NULL。
========================================================================== */
  if (sh)
  {
   BOOL ctrl;
   SERVICE_STATUS ServiceStatus;
   ctrl = ::ControlService(sh, SERVICE_CONTROL_STOP, &ServiceStatus);
/* ==========================================================================
BOOL ControlService(SC_HANDLE hService,
     DWORD dwControl,
     LPSERVICE_STATUS lpServiceStatus);
== ControlService函数向Win32service发送控制码。
== 其中参数hService是指向某项服务的句柄,由OpenService函数返回。
== 参数dwControl为控制码,常用的有
    SERVICE_CONTROL_STOP     //停止服务
    SERVICE_CONTROL_PAUSE    //暂停服务
    SERVICE_CONTROL_CONTINUE    //唤醒暂停的服务
    SERVICE_CONTROL_INTERROGATE//刷新某服务的状态
== 参数lpServiceStatus指向SERVICE_STATUS结构,用于存放该服务最新的状态信息。
== 函数返回值:函数执行成功则返回True,失败则返回False。
============================================================================= */
   DWORD dwControl;
   if (ctrl)
   {
    printf("success to stop the service /"%s/"/n",lpServiceName);
   }
   else
   {
    dwControl = ::GetLastError();
    switch(dwControl){
     case ERROR_ACCESS_DENIED:
      printf("The specified handle was not opened with the necessary access./n");
      break;
     case ERROR_SERVICE_NOT_ACTIVE:
      printf("The service has not been started./n");
      break;
     case ERROR_DEPENDENT_SERVICES_RUNNING:
      printf("The service cannot be stopped because other running services are dependent on it./n");
      break;
     case ERROR_INVALID_SERVICE_CONTROL:
      printf("The requested control code is not valid, or it is unacceptable to the service./n");
      break;
     case ERROR_SERVICE_CANNOT_ACCEPT_CTRL:
      printf("The requested control code cannot be sent to the service because the state of the service is SERVICE_STOPPED, SERVICE_START_PENDING, or SERVICE_STOP_PENDING./n");
      break;
     case ERROR_SERVICE_REQUEST_TIMEOUT:
      printf("The service did not respond to the start request in a timely fashion./n");
      break;
    }
   }
  }
  CloseServiceHandle(sh); // 关闭该Service
 }
 CloseServiceHandle(scman); // 关闭该Service
 printf("Hello World!/n");
 return 0;
}

Windows XP下Service的编程入门[1]相关推荐

  1. Windows XP下Service的编程入门[2]

    Windows XP下Service的编程入门[2] // _dse.cpp : Defines the entry point for the console application. // 作者: ...

  2. linux操作系统下 c语言编程入门

    linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...

  3. linux操作系统下c语言编程入门

    linux操作系统下c语言编程入门  整理编写:007xiong  原文:Hoyt等 (一)目录介绍 1)Linux程序设计入门--基础知识  2)Linux程序设计入门--进程介绍  3)Linux ...

  4. 【转贴】linux操作系统下c语言编程入门

    [转贴]linux操作系统下c语言编程入门 发信人: Lerry (驴是的念来过倒·杏红等头墙上爬), 信区: Linux 标 题: linux操作系统下c语言编程入门 发信站: 哈工大紫丁香 (Fr ...

  5. 用Javascript代码实现浏览器菜单命令(以下代码在 Windows XP下的浏览器中调试通过

    每当我们看到别人网页上的打开.打印.前进.另存为.后退.关闭本窗口.禁用右键等实现浏览器命令的链接,而自己苦于不能实现时,是不是感到很遗憾?是不是也想实现?如果能在网页上能实现浏览器的命令,将是多么有 ...

  6. Windows XP 下的 MySQL+Apache+PHP 运行环境架设 (顶)

    原址:http://shisanfeng.blogspot.com/search/label/%23-WAMP 一.概述 本文详细描述了如何在 Windows 系统上手工架设 PHP 服务器运行环境. ...

  7. linux c++编程教程,Linux下的C++编程入门教程.ppt

    <Linux下的C++编程入门教程.ppt>由会员分享,可在线阅读,更多相关<Linux下的C++编程入门教程.ppt(14页珍藏版)>请在人人文库网上搜索. 1.Linux下 ...

  8. linux下的c 编程入门教程,Linux下的C编程入门教程.ppt

    <Linux下的C编程入门教程.ppt>由会员分享,可在线阅读,更多相关<Linux下的C编程入门教程.ppt(14页珍藏版)>请在装配图网上搜索. 1.Linux下c+编程, ...

  9. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

最新文章

  1. Gitea 1.7.6 发布,一键部署的自助 Git 服务
  2. mysql 字段相同条数_用sql语句统计数据库某个字段中相同的数据有多少条?
  3. 列出本机安装的所有硬件设备
  4. php pdo 查询语句,PDO:预处理语句(参数化查询)
  5. iMac 是什么?苹果2021新款 iMac 购买建议
  6. 仅用18天,英伟达新型GAN合成真假难辨高清明星脸
  7. 基于Opencv3.0对图像进行透视变换
  8. uniapp 分享缩略图过大怎么办_经验分享| 反击破转子断裂的应急处理方法
  9. 测试过程中常用的linux命令之【删除指定的文件行】
  10. Windows多用户远程桌面-采用RDP Wrapper Library支持10.0.18363.900、10.0.18362.836、10.0.19041.789之前所有的Windows版本
  11. Questa-sim安装最后一步点了是之后,安装了hardlock.sys文件导致电脑无限蓝屏重启的解决方案
  12. android 看图片tv版,易图浏览_易图浏览TV版APK下载_电视版 for 安卓TV_ZNDS软件
  13. sudo_拔剑-浆糊的传说_新浪博客
  14. 红黑树时间复杂度为什么是O(logn)?
  15. 基于 Sentinel-2 卫星数据的像元三分法模型
  16. 推荐:雨林木风Linux
  17. 2014025640《大四实习》第*周学习总结
  18. 关于SAP十个常见问题集锦
  19. “熬夜导致秃头”,因果关系推断说这话有问题!
  20. python+pyqt5

热门文章

  1. 32位操作系统,为什么最大支持4G存储空间,2的32次方 = 4294967296bit = 4G,这个怎么计算出来的,
  2. 产品案例:这些呼声很高功能,微信为何还不做?
  3. 如何考核产品经理的绩效?
  4. 技术人员转行产品经理读这些书就够了
  5. 数据异常HTML,@ Html.DropDownListFor的数据绑定异常
  6. android打不开,android加入权限应用打不开
  7. python开发小型数据库_python web开发之数据库ORM的 peewee库 动手学习实践笔记
  8. 首届中国信息通信大数据大会将于4月20-21日在京召开
  9. 作者:杨琪,数据堂(北京)科技股份有限公司企业发展部副总监。
  10. 【数据库系统】DBMS、DBS、DBA、DB的区别