5

C#を使用してWindowsイベントログに書き込んでいます。ユーザーフィールドを除いて、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});
}

更新:ID impersonation = true&authentication = windowsを設定し、ユーザーがいない場合でも、ASP.NETでチェックしました。

また、コンソールアプリで、ユーザーがいないことも確認しました。

4

4 に答える 4

2

そのユーザーは、AppDomainが実行されている現在のユーザーです。これは設定できず、Windowsでは別のユーザーを「なりすまし」することはできません。

于 2009-06-08T15:03:30.203 に答える
2

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

編集:私は同様の質問を見つけました。ユーザー情報を設定するために、Win32ApiReportEvent関数を使用することを提案します。

于 2009-06-08T15:04:40.297 に答える
1

System.DiagnosticsASP.NETアプリケーションがWindowsイベントログに直接アクセスできるようにします。アプリケーションはASP.NETアプリであるため、次を使用できます。

HttpContext.Current.User.Identity.Name

現在のユーザー名を取得します(この場合、Forms Authenticationを使用しているため、Form Authトークンになります)。

于 2009-06-08T15:30:45.827 に答える
0

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

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

上記の場合、ユーザーをASPNETまたはNETWORK SERVICESとしてログに記録するか、コンソールアプリの場合はログインしたユーザーをログに記録します。api呼び出し自体は、SIDへのポインターパラメーターを取ります。なりすましが可能かどうかは確認しませんでした。

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

于 2009-06-08T16:30:19.620 に答える