2009-06-08 13 views
5

Sto scrivendo al windows event log utilizzando C#. Posso impostare tutti i campi visibili nello strumento "Gestione computer" di mmc.exe, ad eccezione del campo Utente.Come ottenere EventLog per registrare il nome utente nel registro eventi di Windows?

L'applicazione client è ASP.NET e utilizza l'autenticazione moduli.

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: ho controllato, in ASP.NET anche se impostare l'identità di rappresentazione = true autenticazione & = finestre ed ancora nessun utente.

ho anche controllato, in una console app, nessun utente.

risposta

0

ho trovato un blog che spiega come farlo, anche se non sembra essere un modo del tutto riuscito a farlo. Per acquisire l'ID utente, devi utilizzare le chiamate metodo/pinvoke.

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

Per quanto sopra, si registra l'utente come ASPNET o servizi di rete, o l'utente connesso per le applicazioni della console. La chiamata api richiede un parametro puntatore a un SID. Non ho provato a vedere se lo spoofing fosse possibile.

JPucket può essere di destra, che l'unico modo per ottenere l'ID di un utente forme autenticati nel registro eventi di sistema è attraverso il campo del messaggio.

2

Bene l'utente è l'utente corrente il vostro dominio di applicazione è in esecuzione come. Questo non può essere impostato e Windows non ti permetterà di "falsificare" un altro utente.

+0

Ma non registro eventi qualsiasi utente, falsificato o in altro modo. – MatthewMartin

2

Il nome utente nel registro eventi si basa sul contesto in cui l'applicazione è in esecuzione. Non può essere impostato in modo esplicito. Se si tratta di un'applicazione ASP.NET, potrebbe utilizzare l'account di servizio.

EDIT: Ho trovato unsimilar question. Si propone di utilizzare la funzione API Win32 ReportEvent al fine di impostare le informazioni dell'utente.

+0

Penso che il contesto venga ignorato tutti insieme per il mio codice di esempio. Se potessi ottenere il logger per usare il contesto, sarei felice. – MatthewMartin

+0

Check out questa domanda simile: http://stackoverflow.com/questions/147307/-net-how-to-set-user-information-in-an-eventlog-entry –

1

System.Diagnostics permette l'accesso diretto un'applicazione ASP.NET per il registro eventi di Windows. Dal momento che l'applicazione è un'applicazione ASP.NET, è possibile utilizzare

HttpContext.Current.User.Identity.Name

per ottenere il nome utente corrente (in questo caso sarà Form Auth Token dal momento che si sta utilizzando autenticazione moduli).

Problemi correlati