管理者権限のないアプリケーションから 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, &sd, NULL)) { // Handle error } if (!SetServiceObjectSecurity(service, DACL_SECURITY_INFORMATION, sd)) { // Handle error }</code>
説明
このコードは、指定されたサービスのセキュリティ記述子を開き、その DACL (随意アクセス制御リスト) を変更します。これにより、対話型ユーザー (非管理ユーザー) に「サービスの開始」権限を付与する新しい ACE (アクセス コントロール エントリ) が追加されます。
サービスを停止するには、「サービスの停止」権限も追加します (WP ) リストへ:
<code class="c++">L"(A;;RPWP;;;IU)" // added permissions: start service, stop service for interactive users</code>
サービス オブジェクトのアクセス許可を変更すると、管理者の昇格を必要とせずに Windows サービスをシームレスに管理できるようにアプリケーションを強化できます。
以上が管理者特権なしでアプリケーションはどのように Windows サービスを制御できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。