SetServiceObjectSecurity

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

SetServiceObjectSecurity函数设置服务对象的安全描述符。

BOOL SetServiceObjectSecurity(

SC_HANDLE 【hService】,//处理服务
SECURITY_INFORMATION 【dwSecurityInformation】,//请求的安全信息类型
PSECURITY_DESCRIPTOR 【lpSecurityDescriptor】//安全描述符的地址
); 

参数

【hService】

标识服务。该句柄由OpenServiceCreateService功能返回。此句柄所需的访问取决于【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