[Win32] 服务程序开发(1)基本概念和服务程序的框架

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/47604179

一。服务程序基本概念

在Windows中,有一个特殊的群体,他们天生拥有极高的权限,在一些特殊用户,比如“SYSTEM”的用户中工作。他们享受很高的优待。很多系统功能(更新服务,触摸屏服务。。。)都是以服务运行的。应用程序也可以安装控制自己的服务(使用服务管理器API,以后会讲)。下面,让我们看看如何编写一个Win32服务。

图:系统中安装的服务

二。服务程序的编写框架

1。StartServiceCtrlDispatcher函数

BOOL WINAPI StartServiceCtrlDispatcher(
  _In_ const SERVICE_TABLE_ENTRY *lpServiceTable
);

函数功能:连接服务控制管理器

参数:一个SERVICE_TABLE_ENTRY结构的指针,成员最后一必须具有NULL指定末尾

如果 函数 成功 返回 为零 如果 函数 失败 返回

2。SERVICE_TABLE_ENTRY结构:

typedef struct _SERVICE_TABLE_ENTRY {
  LPTSTR                  lpServiceName;
  LPSERVICE_MAIN_FUNCTION lpServiceProc;
} SERVICE_TABLE_ENTRY, *LPSERVICE_TABLE_ENTRY;


lpServiceName:要服务进程运行服务名称,不能和其他程序的重了。我一般把这个名称设为注册到系统的服务名称一致。

如果服务安装的是SERVICE_WIN32_OWN_PROCESS服务类型成员忽略为 NULL,可以字符串("")。

lpServiceProc指针指向ServiceMain函数

3。ServiceMain函数:(服务启动回调函数)

VOID WINAPI ServiceMain(
  _In_ DWORD  dwArgc,
  _In_ LPTSTR *lpszArgv
);

dwArgc:lpszArgv数组中字符串个数

lpszArgv:启动参数

服务控制管理器收到请求启动服务便启动服务进程(如果尚未运行)。服务进程线程调用StartServiceCtrlDispatcher函数SERVICE_TABLE_ENTRY结构数组指针然后服务控制管理器启动请求发送服务控制调度程序

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值