当进程使用OpenSCManager函数打开已安装服务的数据库的句柄时,它可以请求不同类型的访问。系统在授予所请求的访问权限之前执行安全检查。允许所有进程对数据库进行以下访问:
*SC_MANAGER_CONNECT
*SC_MANAGER_ENUMERATE_SERVICE
*SC_MANAGER_QUERY_LOCK_STATUS
这使得任何进程都可以打开一个可以在调用OpenService,EnumServicesStatus和QueryServiceLockStatus函数中使用的SCManager对象的句柄。只有具有管理员权限的进程才能打开可由CreateService和LockServiceDatabase功能使用的SCManager对象的句柄。
当进程使用OpenService功能时,系统会执行访问检查。访问不同用户的访问类型取决于与服务对象关联的SECURITY_DESCRIPTOR结构。当服务由CreateService功能安装时,SCM创建一个服务对象的安全描述符。您可以使用QueryServiceObjectSecurity和SetServiceObjectSecurity函数来查询和设置服务对象的安全描述符。服务对象的默认安全描述符允许以下访问:
*所有用户都有SERVICE_QUERY_CONFIG,SERVICE_QUERY_STATUS,SERVICE_ENUMERATE_DEPENDENTS,SERVICE_INTERROGATE和SERVICE_USER_DEFINED_CONTROL访问。
* Power Users组和LocalSystem帐户的成员具有SERVICE_START,SERVICE_PAUSE_CONTINUE和SERVICE_STOP访问权限,以及授予所有用户的访问权限。
*管理员和系统操作员组的成员具有SERVICE_ALL_ACCESS访问权限。