请尽快帮帮我 我正在编写一个c ++代码来运行服务,它在管理员帐户上工作正常但在非管理员用户帐户上,OpenSCManager()函数返回null.请告诉我如何授予非管理员用户帐户启动和停止服务的权限.或者我是否需要做其他事情.请尽快回复
Mat*_*lia 12
可能你正在调用OpenSCManager指定SC_MANAGER_ALL_ACCESS标志,这实际上需要一组默认情况下仅给予管理员的权限.要在此处启动/停止服务,您只需指定SC_MANAGER_CONNECT标志,该标志默认授予任何经过身份验证的用户.
现在您已拥有服务管理器的句柄,您必须使用它OpenService来获取服务的句柄.要有权启动/停止,你应该指定服务GENERIC_READ | GENERIC_EXECUTE根据需要访问(其实我觉得你甚至可以缩小需要的权利,只是SERVICE_START和SERVICE_STOP,如有必要,SERVICE_INTERROGATE).
这里的问题是:标准服务DACL没有授予此类权利普通用户,所以你应该改变你需要开始让普通用户启动/停止该服务的DACL; 看到这里.有关服务访问权限的更多信息,请参见此处.
如果您希望允许普通用户启动/停止任何服务,而不是单个服务,我不知道是否可以在不更改所有DACL的情况下进行,但在我看来,这绝对是一个坏主意.
请注意,即使在单一服务情况下,如果服务在特权帐户下运行(例如LocalSystem),或者如果它是一项重要的系统服务,那么让没有特权的用户弄乱它,这仍然是一个坏主意.您应该允许用户仅启动/停止对系统不重要的服务.
出于好奇,为什么需要让用户启动/停止服务?