我正在使用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的最佳方法是什么?最好先获取默认描述符,然后再修改它吗?还是应该创建一个全新的描述符?