我正在使用 CreateService 在 Windows XPE 上安装 Windows 服务。我想进行设置,以便只有管理员可以启动/停止/暂停/恢复服务。
现在我正在使用以下内容来安装服务:
schService = CreateService(schSCManager,
ServiceName,
ServiceDisplayName, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
binaryPathName, // service's binary (this program)
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
并且该服务最终具有安全性,因此 PowerUsers 组的成员可以启动和停止该服务。我发现我可以使用 sc sdshow 来检查安全描述符,并且我已经制定了一条 SDDL 行,它可以为我们做正确的事情。
我还了解到我们的 Win XPE 安装没有 sc.exe 二进制文件,所以我们不能真正使用它来设置这个特定的系统。
所以,我需要知道的是:在我调用 CreateService 时,我需要使用哪些 API 来设置该服务的安全描述符。我对 Windows 安全 API 完全不熟悉,所以我不知道从哪里开始。
更新:答案是 SetServiceObjectSecurity(如下)。下一个问题:设置 SecurityDescriptor 的最佳方法是什么?是否最好获取默认描述符,然后对其进行修改?还是我应该创建一个全新的描述符?