Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / System.ServiceModel.Activation / System / ServiceModel / Activation / HostingMessageProperty.cs / 1305376 / HostingMessageProperty.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Activation { using System.Runtime; using System.Security; using System.ServiceModel; sealed class HostingMessageProperty : IAspNetMessageProperty { const string name = "webhost"; [Fx.Tag.SecurityNote(Critical = "Keeps track of impersonated user, caller must use with care and call Dispose at the appropriate time.")] [SecurityCritical] HostedImpersonationContext impersonationContext; [Fx.Tag.SecurityNote(Critical = "Stores a SecurityCritical helper class that controls HttpContext.Current with an elevation." + "Need to ensure that HostedThreadData is constructed and used properly.")] [SecurityCritical] HostedThreadData currentThreadData; [Fx.Tag.SecurityNote(Critical = "Sets impersonation context from an arbitrary source, caller must guard.")] [SecurityCritical] internal HostingMessageProperty(HostedHttpRequestAsyncResult result) { Fx.Assert(ServiceHostingEnvironment.IsHosted, "should only be called in the hosted path"); if (ServiceHostingEnvironment.AspNetCompatibilityEnabled) { if (result.ImpersonationContext != null && result.ImpersonationContext.IsImpersonated) { this.impersonationContext = result.ImpersonationContext; this.impersonationContext.AddRef(); } currentThreadData = result.HostedThreadData; } this.OriginalRequestUri = result.OriginalRequestUri; } public Uri OriginalRequestUri { get; private set; } static internal string Name { get { return name; } } HostedImpersonationContext ImpersonationContext { [Fx.Tag.SecurityNote(Critical = "Keeps track of impersonated user, caller must use with care.", Safe = "Safe for Get, individual members of HostedImpersonationContext are protected.")] [SecuritySafeCritical] get { return impersonationContext; } } [Fx.Tag.SecurityNote(Critical = "Delegates to a SecurityCritical method in HostedThreadData." + "Caller must ensure that function is called appropriately and result is guarded and Dispose()'d correctly.")] [SecurityCritical] public IDisposable ApplyIntegrationContext() { if (ServiceHostingEnvironment.AspNetCompatibilityEnabled) { return currentThreadData.CreateContext(); } return null; } [Fx.Tag.SecurityNote(Critical = "Accesses SecurityCritical method HostedImpersonationContext.Impersonate." + "Caller should use with care, must take responsibility for reverting impersonation.")] [SecurityCritical] public IDisposable Impersonate() { if (this.ImpersonationContext != null) { return this.ImpersonationContext.Impersonate(); } else { return null; } } [Fx.Tag.SecurityNote(Critical = "Cleans up impersonationContext, which is critical.", Safe = "Doesn't leak anything.")] [SecuritySafeCritical] public void Close() { if (impersonationContext != null) { impersonationContext.Release(); impersonationContext = null; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Activation { using System.Runtime; using System.Security; using System.ServiceModel; sealed class HostingMessageProperty : IAspNetMessageProperty { const string name = "webhost"; [Fx.Tag.SecurityNote(Critical = "Keeps track of impersonated user, caller must use with care and call Dispose at the appropriate time.")] [SecurityCritical] HostedImpersonationContext impersonationContext; [Fx.Tag.SecurityNote(Critical = "Stores a SecurityCritical helper class that controls HttpContext.Current with an elevation." + "Need to ensure that HostedThreadData is constructed and used properly.")] [SecurityCritical] HostedThreadData currentThreadData; [Fx.Tag.SecurityNote(Critical = "Sets impersonation context from an arbitrary source, caller must guard.")] [SecurityCritical] internal HostingMessageProperty(HostedHttpRequestAsyncResult result) { Fx.Assert(ServiceHostingEnvironment.IsHosted, "should only be called in the hosted path"); if (ServiceHostingEnvironment.AspNetCompatibilityEnabled) { if (result.ImpersonationContext != null && result.ImpersonationContext.IsImpersonated) { this.impersonationContext = result.ImpersonationContext; this.impersonationContext.AddRef(); } currentThreadData = result.HostedThreadData; } this.OriginalRequestUri = result.OriginalRequestUri; } public Uri OriginalRequestUri { get; private set; } static internal string Name { get { return name; } } HostedImpersonationContext ImpersonationContext { [Fx.Tag.SecurityNote(Critical = "Keeps track of impersonated user, caller must use with care.", Safe = "Safe for Get, individual members of HostedImpersonationContext are protected.")] [SecuritySafeCritical] get { return impersonationContext; } } [Fx.Tag.SecurityNote(Critical = "Delegates to a SecurityCritical method in HostedThreadData." + "Caller must ensure that function is called appropriately and result is guarded and Dispose()'d correctly.")] [SecurityCritical] public IDisposable ApplyIntegrationContext() { if (ServiceHostingEnvironment.AspNetCompatibilityEnabled) { return currentThreadData.CreateContext(); } return null; } [Fx.Tag.SecurityNote(Critical = "Accesses SecurityCritical method HostedImpersonationContext.Impersonate." + "Caller should use with care, must take responsibility for reverting impersonation.")] [SecurityCritical] public IDisposable Impersonate() { if (this.ImpersonationContext != null) { return this.ImpersonationContext.Impersonate(); } else { return null; } } [Fx.Tag.SecurityNote(Critical = "Cleans up impersonationContext, which is critical.", Safe = "Doesn't leak anything.")] [SecuritySafeCritical] public void Close() { if (impersonationContext != null) { impersonationContext.Release(); impersonationContext = null; } } } } // 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
- PointCollectionConverter.cs
- HWStack.cs
- OptimisticConcurrencyException.cs
- DataColumnMappingCollection.cs
- CollectionDataContractAttribute.cs
- DEREncoding.cs
- RuntimeHelpers.cs
- XhtmlBasicLinkAdapter.cs
- Animatable.cs
- CodeSnippetExpression.cs
- ListBindableAttribute.cs
- ListViewGroupItemCollection.cs
- PasswordBoxAutomationPeer.cs
- OpenTypeCommon.cs
- RenderingEventArgs.cs
- TypefaceMetricsCache.cs
- TraceUtils.cs
- RectangleHotSpot.cs
- ListViewItem.cs
- BuildDependencySet.cs
- OracleDataReader.cs
- BaseCollection.cs
- ExecutionContext.cs
- KnownAssemblyEntry.cs
- CompiledQueryCacheEntry.cs
- Buffer.cs
- DBParameter.cs
- Selection.cs
- SecurityManager.cs
- OleDbCommandBuilder.cs
- ColumnReorderedEventArgs.cs
- PenLineCapValidation.cs
- MergeFilterQuery.cs
- TraceRecords.cs
- DataRowIndexBuffer.cs
- BrowserCapabilitiesFactoryBase.cs
- SourceInterpreter.cs
- Int16.cs
- HttpPostClientProtocol.cs
- KeyboardNavigation.cs
- EditorAttribute.cs
- HMACSHA512.cs
- EmptyEnumerator.cs
- TableSectionStyle.cs
- BezierSegment.cs
- SmiConnection.cs
- SchemaTypeEmitter.cs
- GridToolTip.cs
- SQLBytesStorage.cs
- cookiecollection.cs
- UserNameSecurityTokenProvider.cs
- ContextMarshalException.cs
- BackgroundWorker.cs
- UriParserTemplates.cs
- CharEntityEncoderFallback.cs
- ICspAsymmetricAlgorithm.cs
- RelationalExpressions.cs
- DocumentPageHost.cs
- WebScriptMetadataFormatter.cs
- FontStyles.cs
- OdbcCommandBuilder.cs
- XPathItem.cs
- CompilerLocalReference.cs
- ImageAnimator.cs
- XmlReflectionMember.cs
- COMException.cs
- DataSourceCache.cs
- BindingManagerDataErrorEventArgs.cs
- XmlStringTable.cs
- QilXmlReader.cs
- _SingleItemRequestCache.cs
- Dictionary.cs
- DetailsViewModeEventArgs.cs
- Pkcs7Recipient.cs
- ImageDrawing.cs
- PasswordPropertyTextAttribute.cs
- DataSourceHelper.cs
- StringComparer.cs
- XmlChildNodes.cs
- FixUp.cs
- RoutedUICommand.cs
- WebRequestModuleElement.cs
- SingleQueryOperator.cs
- ListViewInsertEventArgs.cs
- ChooseAction.cs
- BaseProcessProtocolHandler.cs
- DataGridViewTopLeftHeaderCell.cs
- ListViewGroupConverter.cs
- EmptyElement.cs
- CodeAccessPermission.cs
- KeySpline.cs
- PolicyException.cs
- SqlComparer.cs
- IncrementalCompileAnalyzer.cs
- ParamArrayAttribute.cs
- InheritanceContextChangedEventManager.cs
- ItemDragEvent.cs
- MatrixAnimationUsingPath.cs
- CmsUtils.cs
- DataRelationCollection.cs