2009-06-08 13 views
5

Piszę do windows event log przy użyciu C#. Mogę ustawić każde pole widoczne w narzędziu "Zarządzanie komputerem" mmc.exe, z wyjątkiem pola użytkownika.Jak zdobyć EventLog do zapisywania nazwy użytkownika w dzienniku zdarzeń okna?

Aplikacja kliencka to ASP.NET i używa uwierzytelniania formularzy.

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: Sprawdziłem, w ASP.NET nawet jeśli ustawić tożsamości personifikacji = true uwierzytelniania & = okna i jeszcze żaden użytkownik.

Sprawdziłem również, w aplikacji konsolowej, brak użytkownika.

Odpowiedz

0

Znalazłem wpis na blogu, który wyjaśnia, jak to zrobić, chociaż wydaje się, że nie ma na to całkowicie zarządzanego sposobu. Aby przechwycić identyfikator użytkownika, należy użyć wywołań metody pinvoke/native.

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

Dla powyższego, rejestruje użytkownika jako ASPNET lub usług sieciowych lub zalogowanego użytkownika dla aplikacji konsolowych. Samo wywołanie api przyjmuje parametr wskaźnika do identyfikatora SID. Nie próbowałem sprawdzić, czy fałszowanie jest możliwe.

JPucket może mieć rację, że jedynym sposobem uzyskania identyfikatora formularza uwierzytelnionego użytkownika w Dzienniku zdarzeń systemowych jest użycie pola komunikatu.

2

Cóż, użytkownikiem jest bieżący użytkownik, którego aplikacja AppDomain jest uruchomiona. Nie można tego ustawić, a system Windows nie pozwala na "podszywanie się" innego użytkownika.

+0

Nie rejestruje jednak żadnego użytkownika, podrobionego lub w inny sposób. – MatthewMartin

2

Nazwa użytkownika w dzienniku zdarzeń jest oparta na kontekście, w którym działa aplikacja. Nie można jej jawnie ustawić. Jeśli jest to aplikacja ASP.NET, może używać konta usługi.

EDYCJA: Znalazłem similar question. Proponuje użycie funkcji Win32 Api ReportEvent w celu ustawienia informacji o użytkowniku.

+0

Myślę, że kontekst zostanie zignorowany razem dla mojego przykładowego kodu. Gdybym mógł zmusić rejestratora do użycia kontekstu, byłbym szczęśliwy. – MatthewMartin

+0

Sprawdź to podobne pytanie: http://stackoverflow.com/questions/147307/-net-how-to-set-user-information-in-an-eventlog-entry –

1

System.Diagnostics pozwala aplikacji ASP.NET na bezpośredni dostęp do dziennika zdarzeń systemu Windows. Ponieważ aplikacja jest aplikacja ASP.NET, można użyć

HttpContext.Current.User.Identity.Name

uzyskać aktualną nazwę użytkownika (w tym przypadku będzie Formularz Auth żeton ponieważ używasz uwierzytelniania formularzy).

Powiązane problemy