2

LogonUser、LoadUserProfile、および ImpersonateLoggedOnUser を使用して別のユーザー (Y) の権限を取得する C++ Windows アプリケーション (A) を作成します。A がワークステーション (X) にログオンしているユーザーを使用して開始することを意味します。ユーザーが自分の権限を昇格させたい場合は、ボタンを押して別のユーザーとしてログオンするだけで、ウィンドウからログアウトして再度ログインする必要はありません。

現在の状況は (関数の戻り値によると): LogonUser が機能し、LoadUserProfile が機能し、ImpersonateLoggedOnUser も同様に機能します。

なりすましの後、別のプロセスを開始します。このプロセスは、OCX コントロールを必要とするアプリケーション (B) です。これは失敗し、.oxc ファイルが正しくインストールされていないことがアプリケーションから通知されます。

問題は、マシン (X) にログオンしているユーザーとして B を直接起動すると、動作することです。A を使用して権限を昇格させたいユーザー (Y) として B を直接起動すると、機能します。

(X) としてログインし、エクスプローラーで [実行] (Y) を選択すると、機能します。

Windows の「実行」ダイアログと同じことを行うには、どの手順を実行する必要があるか知っていますか?

4

2 に答える 2

1

よくわかりませんが、偽装では不十分なようです - 偽装はプロセス (A) にのみ関連します。代わりに、Windows の ACL から偽装されたユーザーに明示的に設定された ProcessAttributes/ThreadAttributes を使用して CreateProcess を試してください。

于 2009-09-01T07:27:33.807 に答える
0

ご協力ありがとうございました。以下で問題を解決できました: CreateProcessWithLogonW()
を使用して目的のプロセスを開始します。その関数を適切に動作させるには、呼び出す前にRevertToSelf()を実行し、後で偽装を再度実行する必要があります。

したがって、シーケンスは次のようになります。

LogonUser()
LoadUserProfile()
ImpersonateLoggedOnUser()
// work with the app
RevertToSelf()
CreateProcessWithLogonW()
// do the impersonation stuff again
于 2009-09-02T10:55:49.417 に答える