事件日志,模拟和访问被拒绝Win32Exception

时间:2009-08-04 06:19:28

标签: c# impersonation event-log win32exception

我使用专用帐户(使用SDDL策略)将事件日志条目写入自定义事件日志。为此,我使用WindowsImpersonationContext并使用LogonUser获取令牌:

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

这段代码产生了事件日志条目,但我也得到了Win32Exception:

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

现在,如果我在模拟行后放置一个Thread.Sleep(500),则异常消失:

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

导致此异常的原因是什么,即使访问被拒绝异常,如何写入事件日志条目?

编辑: 并且我在使用之前已经使用关联的日志注册了事件源。我只包含了一些小代码片段来保持信息简短。

1 个答案:

答案 0 :(得分:1)

这个问题很老,似乎没有回答。 看起来像我的问题(https://stackoverflow.com/questions/17997152/registereventsource-fails-with-access-denied-for-impersonated-user-in-asp-net)。

我将这个问题与我的问题联系起来,因为我认为它存在同样的问题,而且我对它进行了进一步调查。它与LogonUser()调用中指定的logonType有关。

也许有帮助。