問題タブ [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.
c# - createprocessasuser の後に .NET アプリケーションがクラッシュする
システム アカウントで実行されているサービスがあり、ユーザー モードでアプリケーションを起動する必要があります。C ++では問題ありませんが、.NETではたくさんありました。
最後に、現在のユーザー セッション (explorer.exe) のユーザー トークンを複製します。
アプリケーションはユーザー モードで起動しているように見えますが、コードの最初の行に到達する前に直接クラッシュします;)
プロセスを直接またはサービスを介して呼び出すときの違いをプロセスエクスプローラーで確認しました。
.Net アセンブリの読み込みが機能していないようですが、理由がわかりません (または、唯一の理由は、not .NET トークンを複製したためですが、.NET 以外のバージョンとしてすべてのアプリケーションが開始され、Windows がそれを検出しているためです)。アセンブリをロードする必要がある lload 中)
私のコード:
c++ - 管理者プロセスは、ログインしているユーザーでどのようにアプリケーションを開くことができますか?
概要
The Process
C++ でコンパイルされた exe/dll を実行する
シナリオ
- 標準ユーザー アカウント (管理者なし) にログイン (win 7)
- 管理者として実行
The Process
The Process
ShellExecuteを使用してアプリ (exe) を開きます
問題
アプリは管理者ユーザーのスコープで開かれます
期待
アプリは標準ユーザーの範囲で開かれます
ソリューション
1.CreateProcessAsUser
CreateProcessAsUserを使用します(問題を解決する必要があったと仮定してhToken
)。
ただし、エラーコード1314 - ERROR_PRIVILEGE_NOT_HELDで呼び出しが失敗しました。ドキュメントに戻ると、次のことがわかります。
この関数が ERROR_PRIVILEGE_NOT_HELD (1314) で失敗した場合は、代わりに CreateProcessWithLogonW 関数を使用してください。
だから私は掘り下げて、このCreateProcessAsUser Error 1314を見つけましたが、これはあまり役に立ちませんでした。
2.ImpersonateLoggedOnUser
ImpersonateLoggedOnUserを使用すると、同じエラー コードが生成されました: 1314 - ERROR_PRIVILEGE_NOT_HELD。
3.CreateProcessWithLogonW
CreateProcessWithLogonWlpPassword
には、当然私が持っていないものが必要です
質問
管理者プロセスは、ログインしているユーザーでどのようにアプリケーションを開くことができますか?
python - CreateProcessAsUser のコードでエラー 1314 が発生するのはなぜですか?
ユーザーとしてプロセスを作成する必要があります。ただし、プロセスの作成中にエラーが表示されます。エラーは次のとおりです。1314 CreateProcessAsUser A required privilege is not held by the client.
run_as_user
プロセスを作成しようとすると、エラーは functionにあります。を設定する必要がありSE_TCB_NAME
、CreateProcessAsUser を使用するために読むことができました。そのため、どこに問題があるのか わかりません。SE_ASSIGNPRIMARYTOKEN_NAME
E_INCREASE_QUOTA_NAME
windows - CreateProcessAsUser で開かれたプロセスで OpenMutex が失敗する
私はこれについて何日も頭を悩ませてきました. インターネット上のすべてのページを読んだに違いありません. ヘルプ!
シナリオは次のとおりです。Windows 7 では、(サービスではなく) 管理者ユーザー アカウントでプロセスを実行しています。これは、後で通常のユーザー アカウントで実行される子プロセスで使用される名前付きグローバル ミューテックスを作成します。私が何をしても、またはミューテックスにどのような ACL を設定しても、ハンドルを取得しようとすると、子プロセスは Access Denied を返し続けます。
プロセスとミューテックスの部分を試すためだけに、コードをテスト アプリに要約しましたが、驚くべきことがわかりました。最初にミューテックスを作成せずにユーザー アプリから OpenMutex を呼び出すと、Not Found エラーが発生することが予想されますが、それでもアクセスが拒否されます。ただし、代わりにエクスプローラーからユーザー アプリを起動すると (Shift キーを押しながら右クリックし、別のユーザーとして実行...)、期待どおりの動作が得られます。また、管理アプリから起動すると、ユーザー アプリには通常の Windows テーマではなく、単純なブロック状のウィンドウ枠があることに気付きました。
したがって、ユーザーアプリの起動方法に問題があると思いますが、何が欠けているのかわかりません。
関連する部分は次のとおりです。
createprocessasuser - CreateProcessAsUser での lpEnvironment の使用
CreateProcessAsUser での lpEnvironment の使用を理解する必要があります。
私のソリューションには、ローカル システムとして実行されている Windows サービスによって呼び出されるこれらの 2 行のコードがあります。
CreateProcessAsUser(hTokenCpy, null, applicationName, ref saProcess, ref saThread, false, CREATE_UNICODE_ENVIRONMENT, hEnv, null, ref si, out procInfo)
これを呼び出した後に呼び出される
CreateEnvironmentBlock(out hEnv, hTokenCpy, false) || hEnv == IntPtr.Zero)
ただし、CreateProcessAsUser の呼び出しが失敗した場合。
hEnv/IpEnvironment = 0 を渡すことで、別の試行が行われます。
CreateProcessAsUser(hTokenCpy, null, applicationName, ref saProcess, ref saThread, false, 0, IntPtr.Zero, null, ref si, out procInfo
ただし、プロセスが特定のユーザー名で作成されると、作成されたプロセスはデスクトップとの対話に失敗します。ログオンユーザーとプロセスが実行されているユーザーは同じですが。
これは、ログオンした User ではなく、Windows サービスのメモリ ブロックの下にプロセスが作成されているためですか?
winapi - CreateProcessAsUser は機能しますが、CreateProcessWithTokenW は機能しません
LocalSystem として実行されるサービスがあります。CreateProcessAsUser と LoadUserProfile を使用して、作業中のアプリを特定のユーザーとして起動します。うまく機能します。ただし、CreateProcessWithTokenW を使用してユーザー プロファイルの明示的な読み込みと管理を回避しようとすると失敗し、イベント ログに次のように記録されます。
CreateProcessWithTokenW を機能させるコツはありますか?
c++ - ローカル サービスからログオン ユーザー セッションで昇格されたプロセスを起動する方法は?
ローカル サービスからの対話型ログオン ユーザー セッションで昇格したプロセスを起動する必要があります。そのために、これと非常によく似たコードを使用します。
しかし、 WTSQueryUserToken APIによって返されるユーザー トークンで昇格を指定する方法と、それを Windows XP 以降で動作させる方法がわかりません。