SetServiceObjectSecurity 函数 (winsvc.h)
[SetServiceObjectSecurity 可用于“要求”部分中指定的操作系统。 它可能在后续版本中变更或不可用。 请改用 SetNamedSecurityInfo 函数。]
SetServiceObjectSecurity 函数设置服务对象的安全描述符。
语法
BOOL SetServiceObjectSecurity(
[in] SC_HANDLE hService,
[in] SECURITY_INFORMATION dwSecurityInformation,
[in] PSECURITY_DESCRIPTOR lpSecurityDescriptor
);
参数
[in] hService
服务的句柄。 此句柄由 OpenService 或 CreateService 函数返回。 此句柄所需的访问权限取决于 dwSecurityInformation 参数中指定的安全信息。
[in] dwSecurityInformation
指定要设置的安全描述符的组成部分。 此参数可以是以下值的组合。 请注意, SetServiceObjectSecurity 未处理的标志将被无提示忽略。
值 | 含义 |
---|---|
|
(对象的 DACL) 设置 任意访问控制列表 。 hService 指定的句柄必须具有WRITE_DAC访问权限,或者调用进程必须是对象的所有者。 |
|
(对象的 SID) 设置主组 安全标识符 。 hService 指定的句柄必须具有WRITE_OWNER访问权限,或者调用进程必须是对象的所有者。 |
|
设置对象的所有者的 SID。 hService 指定的句柄必须具有WRITE_OWNER访问权限,或者调用进程必须是对象的所有者或启用SE_TAKE_OWNERSHIP_NAME特权。 |
|
(对象的 SACL) 设置 系统访问控制列表 。 hService 指定的句柄必须具有ACCESS_SYSTEM_SECURITY访问权限。
获取ACCESS_SYSTEM_SECURITY访问权限 |
[in] lpSecurityDescriptor
指向包含新安全信息的 SECURITY_DESCRIPTOR 结构的指针。
返回值
如果函数成功,该函数将返回非零值。
如果函数失败,则返回零。 要获得更多的错误信息,请调用 GetLastError。
服务控制管理器可以设置以下错误代码。 其他错误代码可由服务控制管理器调用的注册表函数设置。
返回代码 | 说明 |
---|---|
|
指定的句柄未使用所需的访问权限打开,或者调用进程不是对象的所有者。 |
|
指定的句柄无效。 |
|
指定的安全信息或安全描述符无效。 |
|
指定的服务已标记为待删除。 |
注解
SetServiceObjectSecurity 函数根据 lpSecurityDescriptor 缓冲区中指定的信息设置服务对象安全描述符的指定部分。 此函数根据 dwSecurityInformation 参数中设置的标志替换与服务对象关联的任何或所有安全信息,并受调用 进程的访问权限的约束。
创建服务时,服务控制管理器会将默认安全描述符分配给服务对象。 若要检索服务对象的安全描述符的副本,请调用 QueryServiceObjectSecurity 函数。 有关服务对象的默认安全描述符的说明,请参阅 服务安全和访问权限。
请注意,向不受信任的用户授予某些访问权限 ((例如SERVICE_CHANGE_CONFIG或SERVICE_STOP) )可能会允许他们干扰服务的执行,并可能允许他们在 LocalSystem 帐户下运行应用程序。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | winsvc.h (包括 Windows.h) |
Library | Advapi32.lib |
DLL | Advapi32.dll |