private void ReportExceptionDuringTracing(Exception exception, LogEntry log, LogSource traceSource) { try { NameValueCollection additionalInfo = new NameValueCollection(); additionalInfo.Add(ExceptionFormatter.Header, string.Format(Resources.Culture, Resources.TraceSourceFailed, traceSource.Name)); additionalInfo.Add(Resources.TraceSourceFailed2, string.Format(Resources.Culture, Resources.TraceSourceFailed3, log.ToString())); ExceptionFormatter formatter = new ExceptionFormatter(additionalInfo, Resources.DistributorEventLoggerDefaultApplicationName); LogEntry reportingLogEntry = new LogEntry(); reportingLogEntry.Severity = TraceEventType.Error; reportingLogEntry.Message = formatter.GetMessage(exception); reportingLogEntry.EventId = LogWriterFailureEventID; structureHolder.ErrorsTraceSource.TraceData(reportingLogEntry.Severity, reportingLogEntry.EventId, reportingLogEntry); } catch (Exception ex) { instrumentationProvider.FireFailureLoggingErrorEvent(Resources.FailureWhileTracing, ex); } }
/// <devdoc> /// Checks to determine whether impersonation is in place, and if it is then it reverts it returning /// the impersonation context that must be used to undo the revert. /// </devdoc> private WindowsImpersonationContext RevertExistingImpersonation() { // noop if reverting impersonation is disabled if (!structureHolder.RevertImpersonation) { return(null); } try { using (WindowsIdentity impersonatedIdentity = WindowsIdentity.GetCurrent(true)) { if (impersonatedIdentity == null) { return(null); } } } catch (SecurityException e) { instrumentationProvider.FireFailureLoggingErrorEvent(Resources.ExceptionCannotCheckImpersonatedIdentity, e); return(null); } try { return(WindowsIdentity.Impersonate(IntPtr.Zero)); // to be undone by caller } catch (SecurityException e) { // this shouldn't happen, as GetCurrent() and Impersonate() demand the same CAS permissions. instrumentationProvider.FireFailureLoggingErrorEvent(Resources.ExceptionCannotRevertImpersonatedIdentity, e); return(null); } catch (UnauthorizedAccessException e) { instrumentationProvider.FireFailureLoggingErrorEvent(Resources.ExceptionCannotRevertImpersonatedIdentity, e); return(null); } }