首页  >  文章  >  后端开发  >  应用程序如何在没有管理员权限的情况下控制Windows服务?

应用程序如何在没有管理员权限的情况下控制Windows服务?

DDD
DDD原创
2024-10-25 09:27:28576浏览

How Can Applications Control Windows Services Without Administrator Privileges?

在没有管理员权限的情况下从应用程序控制 Windows 服务

Windows 服务提供了一种在后台运行长时间运行任务的便捷方法,无需用户干预。但是,默认情况下,启动或停止这些服务需要管理员权限。这对需要代表用户管理服务的应用程序造成了限制。

解决方案

这个问题的解决方案在于修改服务对象的权限。这允许应用程序与服务交互,而无需提升权限。以下是使用 C 的建议方法:

<code class="c++">wchar_t sddl[] = L"D:"
  L"(A;;CCLCSWRPWPDTLOCRRC;;;SY)"           // default permissions for local system
  L"(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)"   // default permissions for administrators
  L"(A;;CCLCSWLOCRRC;;;AU)"                 // default permissions for authenticated users
  L"(A;;CCLCSWRPWPDTLOCRRC;;;PU)"           // default permissions for power users
  L"(A;;RP;;;IU)"                           // added permission: start service for interactive users
  ;

PSECURITY_DESCRIPTOR sd;

if (!ConvertStringSecurityDescriptorToSecurityDescriptor(sddl, SDDL_REVISION_1, &amp;sd, NULL))
{
   // Handle error
}

if (!SetServiceObjectSecurity(service, DACL_SECURITY_INFORMATION, sd))
{
   // Handle error
}</code>

说明

此代码打开指定服务的安全描述符并修改其 DACL(自由访问控制列表)。它添加了一个新的 ACE(访问控制条目),该 ACE 向交互用户(非管理员用户)授予“启动服务”权限。

要停止服务,请添加“停止服务”权限(WP ) 到列表中:

<code class="c++">L"(A;;RPWP;;;IU)"                           // added permissions: start service, stop service for interactive users</code>

通过修改服务对象的权限,您可以赋予应用程序无缝管理 Windows 服务的能力,而无需管理员提升。

以上是应用程序如何在没有管理员权限的情况下控制Windows服务?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn