Exemple #1
0
        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);
 }
Exemple #3
0
        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);
        }
Exemple #4
0
 internal static WindowsIdentity GetCurrentWI(ExecutionContext.Reader threadEC)
 {
     return(SecurityContext.GetCurrentWI(threadEC, SecurityContext._alwaysFlowImpersonationPolicy));
 }