問題タブ [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.
delphi - DelphiとCreateProcessAsUserの例?
DelphiでCreateProcessAsUserを使用する方法の例を誰かが持っていますか?.NETDelphiではなくDelphi2009を使用しています。
windows - LogonUser -> システム サービスからの CreateProcessAsUser
CreateProcessAsUser に関する Stack Overflow のすべての投稿を読みましたが、解決された質問はほとんどないため、これについては息を止めていません。でも確実に何かが欠けているような気がするので、簡単かもしれません。
対象OSはWindows XPです。「ローカル システム」として実行されているサービスがあり、そこから別のユーザーとして実行されるプロセスを作成したいと考えています。そのユーザーのユーザー名とパスワードがあるので、LogonUser はうまくいき、ユーザー (この場合は管理者アカウント) のトークンを取得します。次に、そのトークンを使用して CreateProcessAsUser を呼び出そうとしますが、そのトークンが原因で失敗します。 SeAssignPrimaryTokenPrivilege は付属していませんが、SeIncreaseQuotaPrivilege は持っています。(GetTokenInformation を使用して、そのトークンに関連付けられているすべての特権をダンプしました。) CreateProcessAsUser の MSDN ページによると、CreateProcessAsUser を正常に呼び出すには両方の特権が必要です。
また、CreateProcessAsUser() に渡すトークンが、CreateRestrictedToken() で作成できる「呼び出しプロセスのプライマリ トークンの制限付きバージョン」である場合、SeAssignPrimaryTokenPrivilege は必要ないと言われていますが、関連付けられます。プロセスを実行しようとしているターゲットユーザーではなく、ローカルシステムユーザーです。
では、呼び出しプロセスのプライマリ トークンの制限付きバージョンであり、かつ別のユーザーに関連付けられているログオン トークンを作成するにはどうすればよいでしょうか。ありがとう!
ここではユーザーの操作は不要であることに注意してください。すべて無人です。そのため、WINSTA0 を取得するなどの操作を行う必要はありません。
winapi - プロセス、ユーザー、またはセッションごとに非対話型ユーザーの Window Station を取得しますか?
CreateProcessAsUser を使用する場合、STARTUPINFO を渡し、lpDesktop NULL を指定すると、ターゲットは対話型ユーザーの対話型デスクトップである winsta0/default になります。
別の非対話型ユーザー (リモート デスクトップ ユーザーなど) の別のセッションでウィンドウ ステーションをターゲットにしたいと考えています。
winsta0 は単一の対話ユーザー用に予約されているため、winsta0 にすることはできないと思います。
ここで関数リストを見ています: http://msdn.microsoft.com/en-us/library/ms687107(v=VS.85).aspx
マシン上のウィンドウ ステーションを列挙することはできますが、どのウィンドウ ステーションがどのユーザー/プロセス/セッションに接続されているかを特定するにはどうすればよいですか?
各ウィンドウ ステーションはセッションに接続されています 各プロセスにはターゲット ウィンドウ ステーションがあります
しかし、たとえば、プロセスまたはセッション ID を持っている場合、どの Window Station に関連付けられているかをどのように判断すればよいでしょうか?
c# - 現在ログインしているユーザーのセッション ID を取得するには?
を使用してWindowsサービス内からプロセスを実行しています
問題は、ローカル システム アカウントでサービスを実行すると問題なく実行されるのに、プログラムのウィンドウが表示されないことです。ユーザー資格情報をサービス プロパティに入力しようとしましたが、[デスクトップとの対話をサービスに許可する] チェックボックスが無効になります。
サービスから呼び出してアプリを実行する必要があり、アプリのウィンドウを表示する必要があります。
お願い助けて。
アップデート。ユーザー名、パスワード、ドメインを取得する Process.Start の過負荷バージョンを使用すると、プログラムがデスクトップにプルされます。しかし、今では 1 つの資格情報でアプリを起動しますが、別のユーザーのデスクトップでそれを示しています。どうして?
UPD2: アイデアがあります。Sysinternals Suite の psexec.exe を使用できます。しかし、問題は、「管理者として」静かに開始する必要があることです。そして、私は方法がわかりません。つまり、既に管理者権限を持っている場合でも、手動で「管理者として実行」と言って、UAC を確認してから準備が整う場合があります。UACを使わずに何かを静かに実行する方法がわかりません....
UPD3: 親愛なる主よ。私はそのことを持っている !ついに。
Ok。当初、問題は実際にセッション 0 の分離にありました。そのため、サービスから開始できる中間アプリを構築する必要がありました。次に、そのアプリが RPC を介してアプリケーションを開始し、デスクトップに表示することを想定しています。中間層アプリを構築する代わりに、psexec ツールを使用することにしました (とにかく、RPC を介して、必要なとおりに動作します)。そして、そのツールを LOCAL SYSTEM アカウントで使用しようとすると、何らかの理由で機能しませんでした。そして、私は気づきました-その理由は、MSがすべてのpstoolに入れているEULAポップアップダイアログであり、ボタンをクリックしてダイアログをローカルシステムアカウントで確認することは不可能でした. したがって、解決策は、レジストリ HKU.DEFAULT\Software\Sysinternals\PsExec に DWORD 値 EulaAccepted = 1 でキーを作成することです。
万歳、今それは動作します! しかし!次に、現在ログインしているユーザーの画面にプログラムを表示する必要があります。そのためには、セッション ID が必要です。
問題は、現在ログインしているユーザーのセッション ID を取得する方法です。まだ誰もログインしていない場合はどうなりますか? それはどのようなセッション ID でしょうか?
UPD4: それだけです! 私はそれを手に入れました!
[DllImport("Kernel32.dll", EntryPoint = "WTSGetActiveConsoleSessionId")] public static extern int WTSGetActiveConsoleSessionId();
君たちありがとう!
windows-vista - CreateProcessAsUser を使用してサービスからアプリを実行する
私はまだWindowsサービスから呼び出すアプリを実行しようとしています。Scott Allen が説明した方法を使用しようとしました。できます。それでも、アプリを画面に表示して操作することはできません。助けてください。
資格情報を使用してサービスを実行するように指示しても、デスクトップにアプリが表示されません。現在ログインしているユーザーのデスクトップ トークンを取得し、そのデスクトップでアプリを実行する方法を教えてください。
windows-7 - 管理者としてサイレントに何かを実行することは可能ですか?
VistaおよびWindows7でUACをだます方法は?管理者権限だけでなく、特に管理者として実行するように指示する必要があるものを実行するにはどうすればよいですか。指定された管理者クレデンシャルでプロセスを開始しようとしましたが、win32関数CreateProcessAsUserを使用しようとしましたが、手動で「管理者として実行」と指示しない限り、完全な管理者権限で実行されません。どのように。いったいどうやって、あのばかげたUACダイアログなしで、それを静かに実行すると思いますか?
windows-7 - FS仮想化を有効にしてプロセスを作成する
UACを無効にした状態で、UACを有効にして作成したプロセスと同じ特性を持つプロセスを作成する必要があります。基本的には、UACを有効にしてプロセスの作成をエミュレートしています。
私の唯一の障害は仮想化です。以下のサンプルコードは、仮想化が有効になっている中程度のILでnotetableのインスタンスを作成する必要があります。実際には、仮想化を無効にして中程度のILでメモ帳のインスタンスを作成します。仮想化トークンが無視されている理由がよくわかりません。何か案は?
windows - CreateProcessWithUser がエラー 87、1349 でユーザーの偽装に失敗する
サービスから実行している Windows 2003 サーバーでは、createprocessasuser がエラー 87 で失敗し、WLEXECSERVER から、ユーザーの偽装に失敗したというエラーが表示されます。
サービスから実行されている Windows 2003 サーバー 64 ビットでは、createprocessasuser がエラー 1349 で失敗します。
トークンは次を使用して作成されますOpenProcess -> OpenProcessToken(TOKEN_QUERY, TOKEN_DUPLICATE) -> DuplicateTokenEx (WITH GRANT_ALL, PrimaryToken, SecurityImpersonation).
WIN7 および 2008 R2 では、問題なく正常に動作します。
WTSQueryUserToken でトークンを取得すると、正常に動作します。
誰にも理由がありますか?
.net - CreateProcessAsUser がユーザーを正しく設定していない
を使用して GUI アプリを呼び出す
LocalSystem Windows サービスから動作します。ユーザー画面にウィンドウがポップアップしますが、プロセス ユーザーは LocalSystem のままです。それを変更する方法はありますか?
PSリクエストに応じて、私はから取得hUserTokenDup
します
c++ - CreateProcessAsUserを作成して、フォアグラウンドウィンドウにする方法は?
を使用してUIを開始しようとしてCreateProcessAsUser
いますが、ウィンドウがフォアグラウンドウィンドウとして表示されません。
通常のウィンドウであるかどうかは気になりませんが、このウィンドウはUACプロンプトをトリガーし、フォアグラウンドにも表示されません。