2009-08-04 8 views
1

J'utilise un compte dédié (avec stratégie SDDL) pour écrire les entrées du journal des événements dans un journal des événements personnalisé. Pour cela, j'utilise WindowsImpersonationContext et obtenir un jeton avec LogonUser:Eventlog, emprunt d'identité et accès refusé Win32Exception

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

Ce morceau de code produit des entrées de journal des événements, mais je reçois aussi un Win32Exception:

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

Maintenant, l'exception disparaît si je place un Thread.Sleep (500) après la ligne d'emprunt d'identité:

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

Quelle est la cause de cette exception et comment viennent les entrées du journal des événements sont écrits même avec l'accès refusé e xception?

Editer: Et souvent, j'ai enregistré la source de l'événement avec le journal associé avant de l'utiliser. J'ai seulement inclus de petits extraits de code pour garder le message court.

Répondre

Questions connexes