控制处理函数

【勇芳软件工作室】汉化HomePreviousNext

每个服务都有一个控制处理程序处理器功能,当服务进程从服务控制程序接收到控制请求时,控制调度程序调用该控制处理程序。因此,该函数在控制调度程序的上下文中执行。

每当调用处理器函数时,服务必须调用SetServiceStatus函数来向SCM报告其状态。无论状态是否改变,都必须完成此操作。

服务控制程序使用ControlService功能发送控制请求。所有服务必须接受并处理SERVICE_CONTROL_INTERROGATE控制代码。您可以通过致电SetServiceStatus启用或禁用其他标准控制代码的接受。服务还可以处理其他用户定义的控制代码。

控制处理程序必须在30秒内返回,否则SCM将返回错误。如果服务在执行控制处理程序时需要进行冗长的处理,则应该创建一个辅助线程来执行冗长的处理,然后返回。这样可以防止服务绑定控制分派器。例如,当处理需要很长时间的服务的停止请求时,创建另一个线程来处理停止进程。控制处理程序应简单地使用SERVICE_STOP_PENDING消息调用SetServiceStatus并返回。

当用户关闭系统时,所有控制处理程序都会收到SERVICE_CONTROL_SHUTDOWN控制代码。它们按照它们出现在已安装服务的数据库中的顺序通知。默认情况下,服务在系统关闭前执行清理任务大约需要20秒。但是,如果系统处于关闭状态(未重新启动或关闭),则服务将继续运行。您可以通过修改以下注册表项中的WaitToKillServiceTimeout值来更改系统等待服务关闭的时间:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

有关详细信息,请参阅编写控制处理函数.