ホームページ >バックエンド開発 >C++ >管理者以外のユーザーが C で Windows サービスを開始および停止するにはどうすればよいですか?

管理者以外のユーザーが C で Windows サービスを開始および停止するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-25 04:07:281082ブラウズ

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>

管理者以外のユーザーにもサービスを停止する権限を付与するには、SDDL 文字列に WP 権限を含めます。

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

追加の SDDL コードについては、Wayne Martin のブログ エントリを参照してください。サービスの権利

以上が管理者以外のユーザーが C で Windows サービスを開始および停止するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。