首頁  >  文章  >  後端開發  >  應用程式如何在沒有管理員權限的情況下控制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