public static void Run(SecurityContext securityContext, ContextCallback callback, object state) { if (securityContext == null) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NullContext")); } StackCrawlMark stackCrawlMark = StackCrawlMark.LookForMe; if (!securityContext.isNewCapture) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NotNewCaptureContext")); } securityContext.isNewCapture = false; ExecutionContext.Reader executionContextReader = Thread.CurrentThread.GetExecutionContextReader(); if (SecurityContext.CurrentlyInDefaultFTSecurityContext(executionContextReader) && securityContext.IsDefaultFTSecurityContext()) { callback(state); if (SecurityContext.GetCurrentWI(Thread.CurrentThread.GetExecutionContextReader()) != null) { WindowsIdentity.SafeRevertToSelf(ref stackCrawlMark); return; } } else { SecurityContext.RunInternal(securityContext, callback, state); } }
internal static bool CurrentlyInDefaultFTSecurityContext(ExecutionContext.Reader threadEC) { if (SecurityContext.IsDefaultThreadSecurityInfo()) { return(SecurityContext.GetCurrentWI(threadEC) == null); } return(false); }
private static SecurityContext CaptureCore(ExecutionContext.Reader currThreadEC, ref StackCrawlMark stackMark) { SecurityContext securityContext = new SecurityContext(); securityContext.isNewCapture = true; if (!SecurityContext.IsWindowsIdentityFlowSuppressed()) { WindowsIdentity currentWI = SecurityContext.GetCurrentWI(currThreadEC); if (currentWI != null) { securityContext._windowsIdentity = new WindowsIdentity(currentWI.AccessToken); } } else { securityContext._disableFlow = SecurityContextDisableFlow.WI; } securityContext.CompressedStack = CompressedStack.GetCompressedStack(ref stackMark); return(securityContext); }
internal static WindowsIdentity GetCurrentWI(ExecutionContext.Reader threadEC) { return(SecurityContext.GetCurrentWI(threadEC, SecurityContext._alwaysFlowImpersonationPolicy)); }