3

別のユーザー アカウントの (昇格されていない) 資格情報で、そのユーザーが既にログインしている間にアプリケーションを実行したいと考えています。具体的には、アプリケーションのインストーラー (任意の管理者アカウントで実行される) が、ログインしている各ユーザーのデスクトップ セッションにプロセスを生成するようにします。これらのプロセスはサービスと通信し、ユーザーが操作できるようにデスクトップにウィンドウを表示します。

通常、 として実行されているサービスからLocalSystemのアプローチはWTSQueryUserToken->CreateProcessAsUserです。ただし、アカウントWTSQueryUserTokenの外部で(特権を使用して) 実行されないため、ここではそのアプローチは失敗します。LocalSystemSE_TCB_NAME

ユーザーがまだログインしていない場合は、アプリケーションを で実行するように登録するだけで、ログインしているHKLM\...\Runユーザーはログイン時にアプリケーションのコピーを取得できます。しかし、ユーザーが既にログインしている場合は、どちらも機能しません (少なくとも、ログアウトして再度ログインするまでは機能しません)。

考えられる答えは 2 つあります。

  1. これはできません。ごめん。

  2. 別の場所からトークンを取得し (おそらく、explorer.exe プロセスを列挙し、それぞれからアクセス トークンを取得しますか?)、 を呼び出しDuplicateTokenExて、 に渡しCreateProcessAsUserます。このアプローチを試してみたところ、OpenProcessToken別のユーザー セッションで実行中のプロセスを実行しようとすると、デバッグ権限が有効になっており、プロセスがPROCESS_ALL_ACCESS.

どう思いますか?

答えが #1 (「これを行うことはできません」) の場合、昇格されていないプロセスを生成してサービスとユーザーの間を仲介するための推奨されるベスト プラクティスは何ですか? サービスが CreateProcessAsUser を介してこれらのプロセスを各セッションに生成するのがベスト プラクティスですか? または、昇格されていないプロセスを個別に実行するのがベスト プラクティスですか (たとえば、HKLM\...\Runまたはを介し​​てHKCU\...\Run)?

4

0 に答える 0