2009-08-04 10 views
1

Ich verwende ein dediziertes Konto (mit SDDL-Richtlinie), um Ereignisprotokolleinträge in ein benutzerdefiniertes Ereignisprotokoll zu schreiben. Dazu verwende ich WindowsImpersonationContext und ein Token mit Logonuser erhalten:Ereignisprotokoll, Identitätswechsel und Zugriff verweigert Win32Exception

WindowsIdentity impersonationIdentity = new WindowsIdentity(ptr);    
WindowsImpersonationContext impersonationContext = impersonationIdentity.Impersonate(); 
EventLog.WriteEntry("MyCustomSource", DateTime.Now.ToLongTimeString(), EventLogEntryType.Warning); 
impersonationContext.Undo(); 
NativeMethods.CloseHandle(ptr); 

Dieses Stück Code Ereignisprotokolleinträge erzeugt, aber ich bekomme auch eine Win32Exception:

Unhandled Exception: System.InvalidOperationException: Cannot open log for source 'MyCustomSource'. You may not have write access. ---> System.ComponentModel.Win32Exception: Access is denied 

Nun verschwindet die Ausnahme, wenn ich Platz ein Thread.Sleep (500) nach dem Identitätswechsel Linie:

WindowsImpersonationContext impersonationContext = impersonationIdentity.Impersonate(); 
System.Threading.Thread.Sleep(500); 

Was diese Ausnahme verursacht, und wie kommt die Einträge Ereignisprotokoll geschrieben werden, auch mit dem Zugang verweigert e xzeption?

Bearbeiten: Und Ofc Ich habe die Ereignisquelle mit dem zugehörigen Protokoll registriert, bevor Sie es verwenden. Ich habe nur kleine Code-Snippets eingefügt, um die Nachricht kurz zu halten.

Antwort

Verwandte Themen