1

ローカル マシンで ASP.NET ページを実行しているときに、自分のユーザー アカウントの偽装に成功したと思います。

こちらで説明されている方法を使用してWindowsIdentity.GetCurrent().Name、ASPNET からドメイン アカウントに正常に変更されました。

自分のアカウントだけがアクセスできるファイル システム上のファイルに正常に書き込むことができます。ただし、パフォーマンス カウンター カテゴリを削除しようとすると、Access Deniedが表示されます。
レジストリのブランチを監査しており、MyMachine\ASPNET が Failing at Object Access であることがわかりました。

失敗しているコードは次のとおりです。

if ( PerformanceCounterCategory.Exists ( PerfmonCategory ) )
        PerformanceCounterCategory.Delete ( PerfmonCategory );

削除呼び出しで失敗します。

(私のアカウントは管理者であり、ASP.NET コンテキストの外部で同じコードを正常に実行できます)。

この System.Diagnostics 名前空間の呼び出しは、実際には何らかの COM プロセスを呼び出しており、2 番目のホップが原因でバウンスされていると思われます。誰が何が起こっているのかを確認できますか?

編集: 例外: アクセスが拒否されました 説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細:

System.ComponentModel.Win32Exception: アクセスが拒否されました

完全な信頼の下で実行されます。

4

2 に答える 2

2

アプリケーションを独自のアプリケーション プールで実行し (常に良いことです)、サービス ユーザーに適切な権限を割り当てることができます。そうすれば、なりすましをいじる必要がなくなります。

于 2009-01-30T00:22:33.000 に答える
1

パフォーマンス カウンターを追加または削除するには、管理者である必要があります。

Win32 API 呼び出しを使用してなりすましを行う理由がわかりません。いじってからしばらく経ちましたが、必要なのは次を使用することだけだと思います。

WindowsIdentity.GetCurrent().Impersonate()

明確にするために、まず Windows 認証を使用して Web アプリケーションで認証する必要があります。その後、Impersonate() を呼び出すことができるはずです。

Impersonate() メソッド

于 2009-01-30T00:17:29.547 に答える