internal static void RunInternal(SecurityContext securityContext, ContextCallback callBack, object state) { if (SecurityContext.cleanupCode == null) { SecurityContext.tryCode = new RuntimeHelpers.TryCode(SecurityContext.runTryCode); SecurityContext.cleanupCode = new RuntimeHelpers.CleanupCode(SecurityContext.runFinallyCode); } SecurityContext.SecurityContextRunData userData = new SecurityContext.SecurityContextRunData(securityContext, callBack, state); RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(SecurityContext.tryCode, SecurityContext.cleanupCode, userData); }
internal static void runFinallyCode(object userData, bool exceptionThrown) { SecurityContext.SecurityContextRunData securityContextRunData = (SecurityContext.SecurityContextRunData)userData; securityContextRunData.scsw.Undo(); }
internal static void runTryCode(object userData) { SecurityContext.SecurityContextRunData securityContextRunData = (SecurityContext.SecurityContextRunData)userData; securityContextRunData.scsw = SecurityContext.SetSecurityContext(securityContextRunData.sc, Thread.CurrentThread.GetExecutionContextReader().SecurityContext, true); securityContextRunData.callBack(securityContextRunData.state); }