Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / clr / src / BCL / System / Security / SecurityRuntime.cs / 1 / SecurityRuntime.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== namespace System.Security { using System; using System.Globalization; using System.Threading; using System.Reflection; using System.Collections; using System.Runtime.CompilerServices; using System.Security.Permissions; internal class SecurityRuntime { private SecurityRuntime(){} // Returns the security object for the caller of the method containing // 'stackMark' on its frame. // // THE RETURNED OBJECT IS THE LIVE RUNTIME OBJECT. BE CAREFUL WITH IT! // // Internal only, do not doc. // [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern FrameSecurityDescriptor GetSecurityObjectForFrame(ref StackCrawlMark stackMark, bool create); // Constants used to return status to native internal const bool StackContinue = true; internal const bool StackHalt = false; // Returns the number of negative overrides(deny/permitonly) in this secDesc private static int OverridesHelper(FrameSecurityDescriptor secDesc) { // check imperative int count = OverridesHelper2(secDesc, false); // add declarative count += OverridesHelper2(secDesc, true); return count; } private static int OverridesHelper2(FrameSecurityDescriptor secDesc, bool fDeclarative) { PermissionSet permSet; int count = 0; permSet = secDesc.GetPermitOnly(fDeclarative); if (permSet != null) count++; permSet = secDesc.GetDenials(fDeclarative); if (permSet != null) count++; return count; } // this method is a big perf hit, so don't call unnecessarily internal static MethodInfo GetMethodInfo(RuntimeMethodHandle rmh) { if(rmh.IsNullHandle()) return null; #if _DEBUG try { #endif // Assert here because reflection will check grants and if we fail the check, // there will be an infinite recursion that overflows the stack. PermissionSet.s_fullTrust.Assert(); RuntimeTypeHandle rth = rmh.GetDeclaringType(); return(System.RuntimeType.GetMethodBase(rth, rmh) as MethodInfo); #if _DEBUG } catch(Exception) { return null; } #endif } private static bool FrameDescSetHelper(FrameSecurityDescriptor secDesc, PermissionSet demandSet, out PermissionSet alteredDemandSet, RuntimeMethodHandle rmh) { return secDesc.CheckSetDemand(demandSet, out alteredDemandSet, rmh); } private static bool FrameDescHelper(FrameSecurityDescriptor secDesc, IPermission demandIn, PermissionToken permToken, RuntimeMethodHandle rmh) { return secDesc.CheckDemand((CodeAccessPermission) demandIn, permToken, rmh); } // // API for PermissionSets // internal static void Assert(PermissionSet permSet, ref StackCrawlMark stackMark) { // Note: if the "AssertPermission" is not a permission that implements IUnrestrictedPermission // you need to change the fourth parameter to a zero. FrameSecurityDescriptor secObj = CodeAccessSecurityEngine.CheckNReturnSO( CodeAccessSecurityEngine.AssertPermissionToken, CodeAccessSecurityEngine.AssertPermission, ref stackMark, 1, 1 ); BCLDebug.Assert(secObj != null || !SecurityManager._IsSecurityOn(),"Failure in SecurityRuntime.Assert() - secObj != null"); if (secObj == null) { if (SecurityManager._IsSecurityOn()) // Security: REQ_SQ flag is missing. Bad compiler ? throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } else { if (secObj.HasImperativeAsserts()) throw new SecurityException( Environment.GetResourceString( "Security_MustRevertOverride" ) ); secObj.SetAssert(permSet); } } internal static void AssertAllPossible(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = SecurityRuntime.GetSecurityObjectForFrame(ref stackMark, true); BCLDebug.Assert(secObj != null || !SecurityManager._IsSecurityOn(),"Failure in SecurityRuntime.AssertAllPossible() - secObj != null"); if (secObj == null) { if (SecurityManager._IsSecurityOn()) // Security: REQ_SQ flag is missing. Bad compiler ? throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } else { if (secObj.GetAssertAllPossible()) throw new SecurityException( Environment.GetResourceString( "Security_MustRevertOverride" ) ); secObj.SetAssertAllPossible(); } } internal static void Deny(PermissionSet permSet, ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = SecurityRuntime.GetSecurityObjectForFrame(ref stackMark, true); BCLDebug.Assert(secObj != null || !SecurityManager._IsSecurityOn(),"Failure in SecurityRuntime.Deny() - secObj != null"); if (secObj == null) { if (SecurityManager._IsSecurityOn()) // Security: REQ_SQ flag is missing. Bad compiler ? throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } else { if (secObj.HasImperativeDenials()) throw new SecurityException( Environment.GetResourceString( "Security_MustRevertOverride" ) ); secObj.SetDeny(permSet); } } internal static void PermitOnly(PermissionSet permSet, ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = SecurityRuntime.GetSecurityObjectForFrame(ref stackMark, true); BCLDebug.Assert(secObj != null || !SecurityManager._IsSecurityOn(),"Failure in SecurityRuntime.PermitOnly() - secObj != null"); if (secObj == null) { if (SecurityManager._IsSecurityOn()) // Security: REQ_SQ flag is missing. Bad compiler ? throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } else { if (secObj.HasImperativeRestrictions()) throw new SecurityException( Environment.GetResourceString( "Security_MustRevertOverride" ) ); secObj.SetPermitOnly(permSet); } } // // Revert API // internal static void RevertAssert(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = GetSecurityObjectForFrame(ref stackMark, false); if (secObj != null) { secObj.RevertAssert(); } else if (SecurityManager._IsSecurityOn()) throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } internal static void RevertDeny(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = GetSecurityObjectForFrame(ref stackMark, false); if (secObj != null) { secObj.RevertDeny(); } else if (SecurityManager._IsSecurityOn()) throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } internal static void RevertPermitOnly(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = GetSecurityObjectForFrame(ref stackMark, false); if (secObj != null) { secObj.RevertPermitOnly(); } else if (SecurityManager._IsSecurityOn()) throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } internal static void RevertAll(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = GetSecurityObjectForFrame(ref stackMark, false); if (secObj != null) { secObj.RevertAll(); } else if (SecurityManager._IsSecurityOn()) throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== namespace System.Security { using System; using System.Globalization; using System.Threading; using System.Reflection; using System.Collections; using System.Runtime.CompilerServices; using System.Security.Permissions; internal class SecurityRuntime { private SecurityRuntime(){} // Returns the security object for the caller of the method containing // 'stackMark' on its frame. // // THE RETURNED OBJECT IS THE LIVE RUNTIME OBJECT. BE CAREFUL WITH IT! // // Internal only, do not doc. // [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern FrameSecurityDescriptor GetSecurityObjectForFrame(ref StackCrawlMark stackMark, bool create); // Constants used to return status to native internal const bool StackContinue = true; internal const bool StackHalt = false; // Returns the number of negative overrides(deny/permitonly) in this secDesc private static int OverridesHelper(FrameSecurityDescriptor secDesc) { // check imperative int count = OverridesHelper2(secDesc, false); // add declarative count += OverridesHelper2(secDesc, true); return count; } private static int OverridesHelper2(FrameSecurityDescriptor secDesc, bool fDeclarative) { PermissionSet permSet; int count = 0; permSet = secDesc.GetPermitOnly(fDeclarative); if (permSet != null) count++; permSet = secDesc.GetDenials(fDeclarative); if (permSet != null) count++; return count; } // this method is a big perf hit, so don't call unnecessarily internal static MethodInfo GetMethodInfo(RuntimeMethodHandle rmh) { if(rmh.IsNullHandle()) return null; #if _DEBUG try { #endif // Assert here because reflection will check grants and if we fail the check, // there will be an infinite recursion that overflows the stack. PermissionSet.s_fullTrust.Assert(); RuntimeTypeHandle rth = rmh.GetDeclaringType(); return(System.RuntimeType.GetMethodBase(rth, rmh) as MethodInfo); #if _DEBUG } catch(Exception) { return null; } #endif } private static bool FrameDescSetHelper(FrameSecurityDescriptor secDesc, PermissionSet demandSet, out PermissionSet alteredDemandSet, RuntimeMethodHandle rmh) { return secDesc.CheckSetDemand(demandSet, out alteredDemandSet, rmh); } private static bool FrameDescHelper(FrameSecurityDescriptor secDesc, IPermission demandIn, PermissionToken permToken, RuntimeMethodHandle rmh) { return secDesc.CheckDemand((CodeAccessPermission) demandIn, permToken, rmh); } // // API for PermissionSets // internal static void Assert(PermissionSet permSet, ref StackCrawlMark stackMark) { // Note: if the "AssertPermission" is not a permission that implements IUnrestrictedPermission // you need to change the fourth parameter to a zero. FrameSecurityDescriptor secObj = CodeAccessSecurityEngine.CheckNReturnSO( CodeAccessSecurityEngine.AssertPermissionToken, CodeAccessSecurityEngine.AssertPermission, ref stackMark, 1, 1 ); BCLDebug.Assert(secObj != null || !SecurityManager._IsSecurityOn(),"Failure in SecurityRuntime.Assert() - secObj != null"); if (secObj == null) { if (SecurityManager._IsSecurityOn()) // Security: REQ_SQ flag is missing. Bad compiler ? throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } else { if (secObj.HasImperativeAsserts()) throw new SecurityException( Environment.GetResourceString( "Security_MustRevertOverride" ) ); secObj.SetAssert(permSet); } } internal static void AssertAllPossible(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = SecurityRuntime.GetSecurityObjectForFrame(ref stackMark, true); BCLDebug.Assert(secObj != null || !SecurityManager._IsSecurityOn(),"Failure in SecurityRuntime.AssertAllPossible() - secObj != null"); if (secObj == null) { if (SecurityManager._IsSecurityOn()) // Security: REQ_SQ flag is missing. Bad compiler ? throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } else { if (secObj.GetAssertAllPossible()) throw new SecurityException( Environment.GetResourceString( "Security_MustRevertOverride" ) ); secObj.SetAssertAllPossible(); } } internal static void Deny(PermissionSet permSet, ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = SecurityRuntime.GetSecurityObjectForFrame(ref stackMark, true); BCLDebug.Assert(secObj != null || !SecurityManager._IsSecurityOn(),"Failure in SecurityRuntime.Deny() - secObj != null"); if (secObj == null) { if (SecurityManager._IsSecurityOn()) // Security: REQ_SQ flag is missing. Bad compiler ? throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } else { if (secObj.HasImperativeDenials()) throw new SecurityException( Environment.GetResourceString( "Security_MustRevertOverride" ) ); secObj.SetDeny(permSet); } } internal static void PermitOnly(PermissionSet permSet, ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = SecurityRuntime.GetSecurityObjectForFrame(ref stackMark, true); BCLDebug.Assert(secObj != null || !SecurityManager._IsSecurityOn(),"Failure in SecurityRuntime.PermitOnly() - secObj != null"); if (secObj == null) { if (SecurityManager._IsSecurityOn()) // Security: REQ_SQ flag is missing. Bad compiler ? throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } else { if (secObj.HasImperativeRestrictions()) throw new SecurityException( Environment.GetResourceString( "Security_MustRevertOverride" ) ); secObj.SetPermitOnly(permSet); } } // // Revert API // internal static void RevertAssert(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = GetSecurityObjectForFrame(ref stackMark, false); if (secObj != null) { secObj.RevertAssert(); } else if (SecurityManager._IsSecurityOn()) throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } internal static void RevertDeny(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = GetSecurityObjectForFrame(ref stackMark, false); if (secObj != null) { secObj.RevertDeny(); } else if (SecurityManager._IsSecurityOn()) throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } internal static void RevertPermitOnly(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = GetSecurityObjectForFrame(ref stackMark, false); if (secObj != null) { secObj.RevertPermitOnly(); } else if (SecurityManager._IsSecurityOn()) throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } internal static void RevertAll(ref StackCrawlMark stackMark) { FrameSecurityDescriptor secObj = GetSecurityObjectForFrame(ref stackMark, false); if (secObj != null) { secObj.RevertAll(); } else if (SecurityManager._IsSecurityOn()) throw new ExecutionEngineException( Environment.GetResourceString( "ExecutionEngine_MissingSecurityDescriptor" ) ); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ParserHooks.cs
- TTSEngineProxy.cs
- FunctionImportMapping.cs
- Shape.cs
- FormsAuthenticationModule.cs
- ZipFileInfoCollection.cs
- ScrollBarRenderer.cs
- ErrorHandler.cs
- DeclarativeCatalogPart.cs
- SQLGuid.cs
- WorkflowPersistenceService.cs
- WebPartDisplayModeCancelEventArgs.cs
- MemoryMappedViewStream.cs
- WsdlBuildProvider.cs
- XmlElementAttributes.cs
- RestHandlerFactory.cs
- GridViewRowEventArgs.cs
- TreeWalkHelper.cs
- PrimaryKeyTypeConverter.cs
- FlowDocumentPaginator.cs
- EntityDataSourceWrapper.cs
- ModuleConfigurationInfo.cs
- BookmarkEventArgs.cs
- Slider.cs
- StopStoryboard.cs
- HttpContext.cs
- MultipleViewPattern.cs
- TransportSecurityHelpers.cs
- TimerEventSubscription.cs
- SqlCacheDependencyDatabase.cs
- FakeModelItemImpl.cs
- WorkItem.cs
- TabletCollection.cs
- ResolveCriteriaCD1.cs
- ParameterBinding.cs
- GenericWebPart.cs
- ElementAction.cs
- GetPageNumberCompletedEventArgs.cs
- DataGridViewCellPaintingEventArgs.cs
- NodeFunctions.cs
- TransactionProxy.cs
- sqlcontext.cs
- StrokeNodeOperations.cs
- SiteMapNode.cs
- ApplicationException.cs
- CalendarDay.cs
- MailAddress.cs
- PresentationAppDomainManager.cs
- ScrollViewer.cs
- URLMembershipCondition.cs
- ConfigUtil.cs
- StaticFileHandler.cs
- ClonableStack.cs
- _SSPISessionCache.cs
- ScriptServiceAttribute.cs
- SelectedDatesCollection.cs
- CommonProperties.cs
- XPathException.cs
- ChannelServices.cs
- WebPartUtil.cs
- WindowsGraphics.cs
- DbMetaDataColumnNames.cs
- SchemaDeclBase.cs
- XmlC14NWriter.cs
- TrackingWorkflowEventArgs.cs
- ListViewUpdatedEventArgs.cs
- MetadataItemEmitter.cs
- FilterableAttribute.cs
- CreateParams.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- MediaTimeline.cs
- CodeDomConfigurationHandler.cs
- ToolboxItemCollection.cs
- XmlText.cs
- Span.cs
- HttpCachePolicy.cs
- ConfigXmlDocument.cs
- MultiTouchSystemGestureLogic.cs
- ClientScriptManager.cs
- SrgsSemanticInterpretationTag.cs
- TraceLevelHelper.cs
- EventListener.cs
- SingleObjectCollection.cs
- XmlSchemaSimpleContentExtension.cs
- ConstructorExpr.cs
- DataGridViewComponentPropertyGridSite.cs
- Focus.cs
- GeometryCollection.cs
- TimeSpan.cs
- InheritedPropertyChangedEventArgs.cs
- ConsumerConnectionPointCollection.cs
- DispatchChannelSink.cs
- OleDbSchemaGuid.cs
- CqlLexer.cs
- TimeSpanOrInfiniteConverter.cs
- CurrencyWrapper.cs
- WindowsListViewGroupSubsetLink.cs
- SqlDeflator.cs
- CommandPlan.cs
- HttpInputStream.cs