2010-02-01 22 views
0

我正在使用CreateService在Windows XPE上安装Windows服务。我想设置一些东西,只有管理员可以启动/停止/暂停/恢复服务。Windows XPE服务安装 - 如何在CreateService时间设置安全性?

现在,我使用下面的安装服务:

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 

,服务安全,使得超级用户组的成员可以启动和停止服务结束。我已经发现我可以使用sc sdshow来检查安全描述符,并且我已经制定了一条SDDL线路,可以为我们做正确的事情。

我也知道我们的Win XPE安装没有sc.exe二进制文件,所以我们不能真正使用它来设置这个特定的系统。

所以,我需要知道的是:我需要使用什么API来设置这个服务的安全描述符,我在做CreateService调用的时候。我对Windows安全API完全不熟悉,所以我只是不知道从哪里开始。

更新:答案是SetServiceObjectSecurity(如下)。下一个问题:设置SecurityDescriptor的最佳方式是什么?最好是获取默认描述符,然后修改它?或者我应该创建一个全新的描述符?

回答

1

我对Windows XP Embedded并不十分熟悉,但通常在使用SetServiceObjectSecurity函数后,您将达到您的要求。使用您从CreateService获得的句柄,并构建一个符合您需要的安全描述符。