Windows Vista 的服务更改

为了提高服务的性能、可靠性、安全性、管理和管理服务,服务模型进行了重大更改。

下表总结了 Windows Vista 服务增强功能。

增强功能 说明
延迟的自动启动
延迟的自动启动服务在系统启动后不久启动。 这可以提高系统启动性能,同时仍为这些服务提供自动启动。 若要设置延迟的自动启动标志,请使用 SERVICE_CONFIG_DELAYED_AUTO_START_INFO调用 ChangeServiceConfig2 函数。
故障检测和恢复
如果服务失败,服务控制管理器 (SCM) 可以执行失败操作,例如重启服务以尝试从该故障中恢复。 若要配置失败操作,请使用 SERVICE_CONFIG_FAILURE_ACTIONS 调用 ChangeServiceConfig2
Preshutdown 通知
服务可以注册以在其 HandlerEx 函数中接收SERVICE_CONTROL_PRESHUTDOWN通知,然后才能收到实际的关闭通知。 这为服务提供了较长的关闭过程,让其有更多时间正常关闭。 若要设置超时值,请使用 SERVICE_CONFIG_PRESHUTDOWN_INFO 调用 ChangeServiceConfig2
受限网络访问
可以使用服务 SID 来限制对端口、协议或网络流量方向的访问。 若要限制服务对网络的访问权限,请使用 INetFwServiceRestriction 接口。
以最低特权运行
服务可以在包含所需权限的任何帐户下运行, (LocalService、NetworkService、LocalSystem、域帐户或本地帐户) ,并通过使用 SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 调用 ChangeServiceConfig2 来指示所需的权限。 SCM 会删除不需要的任何特权。
服务隔离
服务可以通过使用包含服务 SID 的访问控制项保护它们来隔离对象(例如文件或注册表项),供其独占使用。 将此 SID 分配给服务后,服务所有者可以修改对象的访问控制列表,以授予对 SID 的访问权限。 这使服务能够访问特定对象,而无需在高特权帐户下运行或降低对象的安全性。 若要设置服务 SID,请使用 SERVICE_CONFIG_SERVICE_SID_INFO 调用 ChangeServiceConfig2
服务状态更改通知
使用 NotifyServiceStatusChange 函数,服务可以注册为在创建、删除服务或状态发生更改时收到通知。 这比在循环中调用 QueryServiceStatusEx 函数来轮询状态更高效。
会话 0 隔离
服务始终在会话 0 中运行。 在 Windows Vista 之前,第一个登录的用户也已分配到会话 0。 现在,会话 0 专用于与交互式用户会话不关联的服务和其他应用程序。 (第一个登录用户连接到会话 1,第二个登录用户连接到会话 2,等等。) 会话 0 不支持与用户交互的进程。
此更改意味着服务无法向应用程序发布或发送消息,并且应用程序无法向服务发送或发布消息。 此外,服务无法直接显示用户界面项,例如对话框。 服务可以使用 WTSSendMessage 函数在另一个会话中显示对话框。

服务