SetServiceObjectSecurity函数设置服务对象的安全描述符。
BOOL SetServiceObjectSecurity(
SC_HANDLE 【hService】, | //处理服务 |
SECURITY_INFORMATION 【dwSecurityInformation】, | //请求的安全信息类型 |
PSECURITY_DESCRIPTOR 【lpSecurityDescriptor】 | //安全描述符的地址 |
); |
参数
【hService】
标识服务。该句柄由OpenService或CreateService功能返回。此句柄所需的访问取决于【dwSecurityInformation】参数中指定的安全信息。
【dwSecurityInformation】
指定要设置的安全信息。可以指定以下任何或全部标志:
值 | 含义 |
OWNER_SECURITY_INFORMATION | 设置对象的所有者安全标识符(SID)。【hService】句柄必须具有WRITE_OWNER访问权限,或者调用进程必须是对象的所有者。 |
GROUP_SECURITY_INFORMATION | 设置对象的主组SID。【hService】句柄必须具有WRITE_OWNER访问权限,或者调用进程必须是对象的所有者。 |
DACL_SECURITY_INFORMATION | 设置对象的自由访问控制列表(ACL)。【hService】句柄必须具有WRITE_DAC访问权限,或者调用进程必须是对象的所有者。 |
SACL_SECURITY_INFORMATION | 设置对象的系统ACL。呼叫进程必须具有SE_SECURITY_NAME特权。有关安全权限的详细信息,请参阅特权. |
【lpSecurityDescriptor】
指向包含新安全信息的SECURITY_DESCRIPTOR结构。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
错误
服务控制管理器可以设置以下错误代码。其他错误代码可以由服务控制管理器调用的注册表函数设置。
值 | 含义 | ||||
ERROR_ACCESS_DENIED | |||||
指定的句柄没有打开所需的访问权限,或者调用进程不是对象的所有者。 | |||||
ERROR_INVALID_HANDLE | |||||
指定的句柄无效。 | |||||
ERROR_INVALID_PARAMETER | |||||
指定的安全信息或安全描述符无效。 | |||||
ERROR_SERVICE_MARKED_FOR_DELETE | |||||
指定的服务已被标记为删除。 |
备注
SetServiceObjectSecurity函数根据【lpSecurityDescriptor】缓冲区中指定的信息设置服务对象的安全描述符的指定部分。该函数根据【dwSecurityInformation】参数中设置的标志并根据调用进程的访问权限,替换与服务对象相关联的任何或所有安全信息。
服务对象的初始安全描述符是由服务控制管理器根据调用CreateService功能的进程的安全描述符创建的。可以通过调用SetServiceObjectSecurity功能来更改安全描述符。
也可以看看
CreateService, OpenService, QueryServiceObjectSecurity, SECURITY_DESCRIPTOR