gpt4 book ai didi

c++ - 在非管理员帐户上,OpenSCManager() 函数返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:10 25 4
gpt4 key购买 nike

请尽快帮助我。我正在编写一个 C++ 代码来运行服务,它在管理员帐户上运行良好但在非管理员用户帐户上,OpenSCManager() 函数返回空值。请告诉我如何授予非管理员用户帐户启动和停止服务的权限。或者我需要做其他事情吗?请尽快回复

最佳答案

可能您在调用 OpenSCManager 时指定了 SC_MANAGER_ALL_ACCESS 标志,这实际上需要一组默认情况下仅授予管理员的权限。要在此处启动/停止服务,您只需指定 SC_MANAGER_CONNECT 标志,该标志默认提供给任何经过身份验证的用户。

现在您有了服务管理器的句柄,您必须使用 OpenService 来获取服务的句柄。要有权启动/停止服务,您应该指定 GENERIC_READ | GENERIC_EXECUTE 作为所需的访问权限(实际上,我认为您甚至可以将所需的权限缩小到 SERVICE_STARTSERVICE_STOP,如果有必要,SERVICE_INTERROGATE).

这里是问题所在:标准服务 DACL 不会将此类权限授予普通用户,因此您应该更改需要启动的服务的 DACL 以允许普通用户启动/停止它;见here .有关服务访问权限的更多信息,请参阅 here .

如果您想允许普通用户启动/停止任何服务而不是单个服务,我不知道在不更改所有 DACL 的情况下是否可行,但在我看来这绝对是个坏主意。

请注意,即使在单个服务案例中,如果该服务在特权帐户(例如 LocalSystem)下运行,或者如果它是一个重要的系统服务,让非特权用户弄乱它仍然是一个不好的主意。您应该允许用户仅启动/停止对系统来说不是那么重要的服务。

出于好奇,为什么需要让用户启​​动/停止服务?

关于c++ - 在非管理员帐户上,OpenSCManager() 函数返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3279392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com