プログラムを 2 つのプロセスに分割する予定です。1 つ目は GUI で、2 つ目は管理者アカウントで実行されるバックグラウンド プロセスです。両者は互いに通信する必要があります。
これには名前付きパイプを使用することを考えていますが、気になることが 1 つあります。
自分のプログラムだけが名前付きパイプにアクセスできるようにする方法はありますか?
プログラムを 2 つのプロセスに分割する予定です。1 つ目は GUI で、2 つ目は管理者アカウントで実行されるバックグラウンド プロセスです。両者は互いに通信する必要があります。
これには名前付きパイプを使用することを考えていますが、気になることが 1 つあります。
自分のプログラムだけが名前付きパイプにアクセスできるようにする方法はありますか?
名前付きパイプを作成する場合、通常、セキュリティ記述子を使用して(両側で)名前付きパイプへのアクセスを保護できます。ただし、セキュリティ記述子はユーザー向けであり、アプリケーション向けではありません(そして、正当な理由から、セキュリティの観点から、アプリケーションではなくユーザーを保護する必要があります)。
そうは言っても、クライアントとサーバーが実行されるユーザーを作成することができ、そのアカウントを安全に保つ限り、問題はありません(そのユーザーのセキュリティ記述子でパイプを保護します)。
したがって、プログラムがそのユーザーIDを使用している唯一のプログラムである場合、技術的にはそうです。パイプはプログラムでのみ使用できます。ただし、その後、アカウントのセキュリティを管理する必要があります。
Windows Vista 以降のバージョンのみをサポートする必要がある場合は、接続が確立された後に、パイプの反対側のプロセスの ProcessId や SessionID を見つけるために呼び出すことができる Windows API があります (例: GetNamedPipeClientProcessId およびファミリ)。 . これらを使用して明示的なチェックを実装し、パイプを介して通信したいアプリケーションのみが通信できるようにすることができます。