C# .NET Windows サービスを開発しています。
私たちのサービスはシステム アカウントで実行されており、ログインしているユーザー USER になりすまそうとしています。偽装は正常に機能します。つまり、偽装後に呼び出すとSystem.Security.Principal.WindowsIdentity.GetCurrent()
、正しいユーザー「USER」が取得されます。
問題は、ユーザー プロファイルにアクセスしようとしても、期待した結果が得られないことです。1 つの例は、レジストリ CURRENT_USER へのアクセスです。アクセス拒否エラーが発生します。部分的にレジストリを使用すると想定しているサードパーティ機能を使用する場合、「本物の」(なりすまし前の) ユーザーの詳細を取得します。また、呼び出し時Environment.ExpandEnvironmentVariables("%TEMP%")
に、ログインしているユーザー プロファイルの代わりにシステム プロファイルを取得します。
完全に別のユーザーになりすます方法はありますか? LoadUserProfile を使用して特定のユーザー プロファイルを取得できることはわかっていますが、現在のユーザー プロファイルを使用するサード パーティの dll を実行しているため、これは適切ではありません。
私たちの偽装コードはこれに基づいています