2009-06-08 13 views
5

私はwindows event logにC#を使って書いています。 mmc.exeの[コンピュータの管理]ツールで、[ユーザー]フィールドを除くすべてのフィールドを表示するように設定できます。イベントログにユーザー名をウィンドウイベントログに記録するにはどうすればよいですか?

クライアントアプリケーションはASP.NETで、フォーム認証を使用します。

public static void WriteOnce() 
{ 
    EventLog log = new EventLog("MyApp"); 
    if (!EventLog.SourceExists("MySource")) 
    { 
     EventSourceCreationData data = new EventSourceCreationData("MySource", "MyApp"); 
     EventLog.CreateEventSource(data); 
    } 
    log.Source = "MySource"; 
    log.WriteEntry("Hello World", EventLogEntryType.Information,123,456,new byte[]{1,2,3}); 
} 

UPDATE:私はASP.NETで、確認された場合でも設定身元偽装=真&認証=窓やまだないが。

また、コンソールアプリでは、ユーザーはいません。

答えて

0

これを行う方法を説明するブログエントリが見つかりましたが、完全に管理された方法ではないようです。ユーザーIDを取得するには、pinvoke /ネイティブメソッド呼び出しを使用する必要があります。上記について

http://www.infosysblogs.com/microsoft/2007/09/logging_events_with_user_detai_1.html

、それはASPNETまたはネットワークサービスとしてユーザにログオン、またはコンソールアプリケーションのためのユーザログイン。 api呼び出し自体は、SIDへのポインタパラメータをとります。私はなりすましが可能かどうかを調べるつもりはありませんでした。

JPacketは正しいかもしれませんが、システムイベントログにフォーム認証されたユーザーのIDを取得する唯一の方法は、メッセージフィールドを使用することです。

2

ユーザーは、AppDomainが現在実行中のユーザーです。これは設定することはできず、Windowsでは別のユーザーを "偽装"することはできません。

+0

ただし、スプーフィングされたユーザーなどのイベントログは記録されません。 – MatthewMartin

2

イベントログのユーザー名は、アプリケーションが実行されているコンテキストに基づいています。明示的に設定することはできません。これがASP.NETアプリケーションの場合、サービスアカウントを使用している可能性があります。

編集:私はsimilar questionを見つけました。 Win32 APIのReportEvent関数を使用して、ユーザー情報を設定することを提案しています。

+0

私のサンプルコードでは、コンテキストがすべて無視されると思います。ロガーにコンテキストを使用させることができれば、私は満足しています。 – MatthewMartin

+0

この類似の質問をチェックしてください:http://stackoverflow.com/questions/147307/-net-how-to-set-user-information-in-an-eventlog-entry –

1

System.Diagnosticsは、ASP.NETアプリケーションがWindowsイベントログに直接アクセスできるようにします。アプリケーションがASP.NETアプリケーションであるので、あなたは、現在のユーザー名(あなたがフォーム認証を使用しているので、このケースでは、フォーム認証トークンになります)を取得するために

HttpContext.Current.User.Identity.Name

を使用することができます。

関連する問題