SERVICE_STATUS 结构中各成员分析
来源:互联网 发布:广东统计局经济数据 编辑:程序博客网 时间:2024/06/06 01:49
在编写Windows服务的时候,需要调用API函数::SetServiceStatus()向服务控制管理器(SCM)提交更新当前服务的状态信息,其第2个参数为指向SERVICE_STATUS结构的指针,SERVICE_STATUS结构中包含了表示当前服务状态的信息,对其各成员一一分析:
typedef struct _SERVICE_STATUS {
} SERVICE_STATUS, *LPSERVICE_STATUS;
dwServiceType:指明服务可执行文件的类型。如果可执行文件中只有一个单独的服务,就把这个成员设置成SERVICE_WIN32_OWN_PROCESS;如果拥有多个服务的话,就设置成SERVICE_WIN32_SHARE_PROCESS。除了这两个标志之外,如果你的服务需要和桌面发生交互(当然不推荐这样做),就要用“|”运算符附加上SERVICE_INTERACTIVE_PROCESS。这个成员的值在服务的生存期内绝对不应该改变。
dwCurrentState:用于通知SCM此服务的现行状态。为了报告服务仍在初始化,应该把这个成员设置成SERVICE_START_PENDING。
dwControlsAccepted:指明服务接受什么样的控制通知。如果允许一个服务控制程序(SCP)去暂停/继续服务,就把它设成SERVICE_ACCEPT_PAUSE_CONTINUE。很多服务不支持暂停或继续,就必须自己决定在服务中它是否可用。如果你允许一个SCP去停止服务,就要设置它为SERVICE_ACCEPT_STOP。如果服务要在操作系统关闭的时候得到通知,设置它为SERVICE_ACCEPT_SHUTDOWN可以收到预期的结果。这些标志可以用“|”运算符组合。
dwWin32ExitCode和dwServiceSpecificExitCod
dwCheckPoint和dwWaitHint:是一个服务用来报告它当前的事件进展情况的。当成员dwCurrentState被设置成SERVICE_START_PENDING的时候,应该把dwCheckPoint设成0,dwWaitHint设成一个经过多次尝试后确定比较合适的超时毫秒数,这样服务才能高效运行。一旦服务被完全初始化,就应该重新初始化SERVICE_STATUS结构的成员,更改dwCurrentState为SERVICE_RUNNING,然后把dwCheckPoint和dwWaitHint都改为0。【MSDN:Estimated time required for a pending start, stop, pause, or continue operation, in milliseconds. Before the specified amount of time has elapsed, the service should make its next call to theSetServiceStatus function with either an incremented dwCheckPoint value or a change indwCurrentState. If the amount of time specified by dwWaitHint passes, and dwCheckPoint has not been incremented or dwCurrentState has not changed, the service control manager or service control program can assume that an error has occurred and the service should be stopped.】在dwWaitHint指定的超时时间到达之前,服务应该进行新的一次::SetServiceStatus()函数的调用,递增 dwCheckPoint或者改变dwCurrentState,如果dwWaitHint指定的超时时间已经过去(已经超时),既没有递增dwCheckPoint,又没有改变dwCurrentState,则服务控制管理器(SCM)或者服务控制程序(SCP)将假设一个错误已经发生,且服务应该停止。
- SERVICE_STATUS 结构中各成员分析
- SERVICE_STATUS结构各成员解析
- SERVICE_STATUS结构各成员解析
- SERVICE_STATUS
- 简要分析C中结构的位域成员
- 结构体 net_device常用成员分析
- termios结构体各成员
- termios结构体各成员
- 得到结构体中成员的偏移
- task_struct结构体中comm成员
- 结构体中成员变量偏移量
- c语言中结构体成员访问
- 结构体中存在string类型成员
- 结构体中指针成员的动态分配
- 结构体中string类型成员
- 关于结构体成员变量的字节对齐的分析
- 块设备驱动 block_device_operations结构体 主要成员函数分析
- FFmpeg源代码简单分析:结构体成员管理系统-AVClass
- linux下安装java
- 第9周项目1(3)-for语句
- fgets函数的理解
- poj 3107 Godfather
- SpringMVC事例
- SERVICE_STATUS 结构中各成员分析
- PCI设备读取配置空间
- Apache,PHP,MySQL的安装,配置
- 设计模式之工厂方法和抽象工厂
- 《编写高质量代码:改善Java程序的151个建议》 建议6
- Foundation--NSArray
- 关于objective-c中的set和get方法
- Hduoj1170【水题】
- PCI配置空间