首页  >  文章  >  后端开发  >  非管理员用户如何用 C 启动和停止 Windows 服务?

非管理员用户如何用 C 启动和停止 Windows 服务?

Barbara Streisand
Barbara Streisand原创
2024-10-25 04:07:28983浏览

How Can Non-Administrator Users Start and Stop Windows Services in C  ?

在没有管理员权限的情况下从应用程序启动 Windows 服务(C )

问题:

如何用户可以在不需要管理员权限的情况下从非管理员应用程序启动或停止 Windows 服务吗?

答案:

授予非管理员用户此功能要启动和停止 Windows 服务,请修改服务权限。理想情况下,此过程应在服务安装期间执行。

使用以下步骤:

  1. 获取服务句柄:使用以下命令打开目标服务的句柄: WRITE_DAC 权限。
  2. 创建安全描述符 (SDDL): 构造一个 SDDL 字符串,指定各个用户组所需的权限,例如允许交互式用户启动服务:
<code class="pre">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
  ;</code>
  1. 转换并设置 SD: 将 SDDL 字符串转换为安全描述符并使用 SetServiceObjectSecurity 函数将其设置在服务对象上:
<code class="pre">PSECURITY_DESCRIPTOR sd;

if (!ConvertStringSecurityDescriptorToSecurityDescriptor(sddl, SDDL_REVISION_1, &amp;sd, NULL))
{
   fail();
}

if (!SetServiceObjectSecurity(service, DACL_SECURITY_INFORMATION, sd))
{
   fail();
}</code>

要授予非管理员用户停止服务的权利,请将 WP 权限包含在 SDDL 字符串中:

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

请参阅 Wayne Martin 的博客文章以获取其他 SDDL 代码服务权利。

以上是非管理员用户如何用 C 启动和停止 Windows 服务?的详细内容。更多信息请关注PHP中文网其他相关文章!

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