問題タブ [createprocessasuser]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - Win32 - 通常のユーザー プロセスとして、highestAvailable 子プロセスを起動する
Windows ユーザー アカウントが Admin グループにあり、UAC が有効で、通常のユーザー権限でプログラム A を実行しているとします。A は標高を要求することも、受け取ることもありません。ここで、A がマニフェストにhighestAvailable を持つプログラム B を起動したいとします。
A が CreateProcess(B) を呼び出すと、エラー 740 ("昇格が必要です") で失敗します。
A が ShellExecuteEx(B) を呼び出すと、Windows は B を管理者特権で実行するよう求める UAC ボックスを表示します。ユーザーは、B が管理者特権で実行される場合は [はい] と答えることができ、起動が失敗する場合は [いいえ] と答えることができます。
私の質問は、昇格せずに B を起動するだけの 3 番目のオプションを実現する方法はありますか?
「highestAvailable」は、B が高度で実行することを好むが、通常のユーザー モードで完全に実行できることを意味するため、これは原則として可能であるように思われます。しかし、私はそれを達成する方法を理解できません。私はトークンと CreateProcessAsUser() であらゆる種類のことを試しましたが、すべてこれに帰着するようです.構築されたトークン。
CreateProcessAsUser() を使用してこれを行う方法が実際にあることを願っています。トークンを適切に構築するためのトリックが欠けているだけです。
更新 - 解決済み:以下の __COMPAT_LAYER=RunAsInvoker ソリューションはうまく機能します。ただし、注意点が 1 つあります。これにより、サブプロセスが無条件に「実行者として」実行されます。呼び出される exe がそのマニフェストで「requireAdministrator」を指定している場合でも適用されます。exeが「requireAdministrator」を指定している場合、通常は元の「昇格が必要です」というエラーが望ましいと思います。「highestAvailable」とマークされたプログラムの RunAsInvoker 動作が必要だった理由は、そのようなプログラムが「どちらのモードでも適切に機能する」と明示的に言っているためです。管理モードを使用するのが不便な場合は、通常のユーザー モードで実行してみましょう。しかし、「requireAdministrator」は別の問題です。そのようなプログラムは、「昇格された特権なしでは適切に機能できない」と言っています。そのようなプログラムを昇格せずに強制的に実行するよりも、事前に失敗する方が良いようです。これにより、処理するように適切にプログラムされていない特権/アクセスエラーが発生する可能性があります。したがって、ここでの完全な汎用ソリューションには、アプリケーション マニフェストを確認し、マニフェストに「highestAvailable」と表示されている場合にのみ RunAsInvoker 強制を適用する必要があると思います。さらに完全な解決策は、他の場所で説明されている手法の 1 つを使用して、「requireAdministrator」プログラムが提示されたときに UAC を呼び出すオプションを発信者に提供し、ユーザーにそれを昇格して起動する機会を提供することです。CreateProcessEx() は、「プロセス特権を利用可能な最高の特権として扱う」および「昇格が必要な場合は UAC を呼び出す」ためのいくつかの新しいフラグでカバーされていると想像できます。
(おそらく、Windows シェルにはこれを行う方法さえ提供されていないことがわかります...シェルから B を直接起動すると、管理者権限で起動するか、まったく起動しないかを選択できる UAC ボックスが表示されます。どのような方法でそれを達成するにしても、UAC ボックスは特権なしで起動するための 3 つ目のボタンを提供するかもしれません.しかし、これも 3 つ目のオプションが民間人にとって混乱しすぎるという UX の決定である可能性があります.)
(StackOverflow および Microsoft 開発者サポート サイトには、残念ながらここでは当てはまらない非常によく似たシナリオについて質問する投稿が非常に多いことに注意してください。昇格されていない子プロセスを起動する. 標準的な例はインストーラーであり, インストーラーが行う傾向があるように昇格して実行され, インストールしたばかりのプログラムを終了する直前に通常のユーザーレベルで起動したい. についての投稿されたコードがたくさんあります.それを行う方法、および私はこれらの手法のいくつかに基づいて試みましたが、これは実際には別のシナリオであり、私の状況では解決策は機能しません.大きな違いは、起動しようとしている子プログラムこの場合はそうではありませんhighAvailable でマークされています - 子は、通常の状況で UAC の関与なしに起動する単なる通常のプログラムです。別の違いもあります。これらのシナリオでは、親は既に昇格して実行されていますが、私のシナリオでは、親は通常のユーザー レベルで実行されています。この他のシナリオの親プロセスは、A 自体が昇格されていないために使用できないトークンに対するいくつかの特権操作にアクセスできるため、状況が少し変わります。しかし、私が知る限り、これらの特権トークン操作はとにかく役に立たないでしょう。私のシナリオの重要な要素であるhighestAvailableフラグが子にあるという事実です.)
c# - C# の CreateProcessAsUser Always Empty からの標準出力
Launch メソッドへの最初の呼び出しはファイル echo1 に書き込みますが、テストの 2 行目の標準出力を取得できません。何が間違っていますか?
私はこのスレッドに従っていましたが、答えはありません: C# で CreateProcessAsUser から標準出力をキャプチャする
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0c0ca087-5e7b-4046-93cb-c7b3e48d0dfb/how-run-client-application-as-a-windows-serviceから実装を取得します-in-c?forum=csharpgeneral コードを編集して、回答のない最初のリンクと同じ標準出力を取得しました。
ここで実装:
注:これは単なるサンプル コードです。実際のコードでは、別のプロセスを使用して Window Service からデスクトップのスクリーンショットを撮りたいと考えています。explorer.exe のコンテキストでは、Windows サービスはデスクトップに直接アクセスできず、別のコンテキストで実行する必要があるためです。それ。
さらに情報が必要な場合は、教えてください、ありがとう!
kerberos - Java と Kerberos を使用して別のユーザーとしてプロセスを作成する
私は Java サーバー アプリケーション (サービスとして Windows で実行) に取り組んでおり、次のシナリオを実現したいと考えています。
- ユーザーがサーバーに POST 要求を発行します。ユーザーは Kerberos (SPNEGO、エンタープライズ環境の SSO) で認証されます。
- サービスは新しい Java プロセスを作成します。プロセスは、サービス ユーザー (偽装/委任) ではなく、認証されたユーザーとして実行する必要があります。
- 新しいプロセスは、ユーザーのセキュリティ コンテキストで実行する必要があります。Kerberos 認証を必要とする他のリモート システム (ファイル共有、他の Web サービスなど) と通信する必要があります。
実用的な概念実証:
- Kerberos 認証用のWaffleを使用した Spring Boot アプリケーション。
- 認証済みユーザーの新しいプロセスを作成します。JNAと Windows ネイティブ関数CreateProcessAsUserを使用します。
- プロセスは、認証されたユーザーとして作成されます。これは、Process Explorer ユーティリティで確認できます。
不足しているものと機能していないもの:
- プロセスは他の Kerberos チケットを要求できません (たとえば、InitializeSecurityContext() を呼び出して)。
- プロセスはネットワーク共有にアクセスできません。
- このプロセスは、Kerberos 認証を必要とする他の Web サービスと通信できません。
私の質問:
- コードに何が欠けているか、または何が間違っている可能性がありますか?
- 私が達成したいことを実装することさえ可能ですか?
サーバー - 認証 (短縮、Waffle から抽出):
サーバー - CreateProcessAsUser:
c++ - サービスから UWP アプリケーションを開く
CreateProcessAsUser
作成したサービスを使用して、アプリケーションとプロセスを起動しようとしています。メモ帳、IE などのアプリケーションを開く試みは成功しました。しかし、UWP アプリケーションである Groove Music を開こうとすると障害が発生します。
コマンド プロンプトから Groove Music を開こうとすると、フォルダが非表示になり、アクセスが拒否されました。
私が書いたプログラムから UWP アプリケーションを起動する方法はありますか? または、明らかな方法がありませんか?