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
- TextServicesCompartmentContext.cs
- SecurityPermission.cs
- OutputCacheModule.cs
- ArcSegment.cs
- TextPointerBase.cs
- UnsafeNativeMethods.cs
- StringTraceRecord.cs
- DataGridViewBindingCompleteEventArgs.cs
- JournalNavigationScope.cs
- CmsInterop.cs
- Win32Interop.cs
- CompilerGlobalScopeAttribute.cs
- Int16AnimationBase.cs
- ToolstripProfessionalRenderer.cs
- DocumentViewerConstants.cs
- PointHitTestResult.cs
- ErrorWebPart.cs
- Composition.cs
- ImageBrush.cs
- TraceContext.cs
- ClonableStack.cs
- EditBehavior.cs
- XamlPathDataSerializer.cs
- FileIOPermission.cs
- SqlProviderServices.cs
- ApplicationServicesHostFactory.cs
- DbParameterHelper.cs
- CompoundFileDeflateTransform.cs
- IsolatedStorage.cs
- PrintDialogException.cs
- SourceLocationProvider.cs
- ProcessModelSection.cs
- AssemblyBuilderData.cs
- IdentityModelDictionary.cs
- SimpleType.cs
- SafeLibraryHandle.cs
- SelectedDatesCollection.cs
- DataColumn.cs
- CaseInsensitiveHashCodeProvider.cs
- HeaderCollection.cs
- SecurityPermission.cs
- CacheDependency.cs
- hwndwrapper.cs
- HostingEnvironmentSection.cs
- ExpressionVisitor.cs
- ExpandCollapseProviderWrapper.cs
- EntityStoreSchemaGenerator.cs
- OperationContractAttribute.cs
- SqlConnection.cs
- TextServicesCompartment.cs
- DataGridCell.cs
- ArgumentNullException.cs
- UIElementAutomationPeer.cs
- XmlUtilWriter.cs
- Pen.cs
- StreamHelper.cs
- PropertyDescriptor.cs
- ObjectNavigationPropertyMapping.cs
- SqlFileStream.cs
- MediaTimeline.cs
- OperationInvokerTrace.cs
- ProcessingInstructionAction.cs
- ADMembershipUser.cs
- DataBoundControl.cs
- CodeDirectionExpression.cs
- SystemGatewayIPAddressInformation.cs
- DragCompletedEventArgs.cs
- MouseGesture.cs
- ImagingCache.cs
- DataQuery.cs
- TagElement.cs
- ReferencedAssemblyResolver.cs
- BindingContext.cs
- ClientSettingsProvider.cs
- GifBitmapEncoder.cs
- SizeChangedInfo.cs
- NetWebProxyFinder.cs
- Char.cs
- SafeNativeMethods.cs
- Int32Animation.cs
- GetLedgerRequest.cs
- TPLETWProvider.cs
- ListBindingConverter.cs
- GcHandle.cs
- FixedSOMLineRanges.cs
- BindingWorker.cs
- TransformerInfoCollection.cs
- GridItemPatternIdentifiers.cs
- ConcurrentStack.cs
- BitmapData.cs
- CryptoSession.cs
- EntityObject.cs
- SchemaType.cs
- NativeWindow.cs
- CodeTypeParameterCollection.cs
- DataFormats.cs
- AddingNewEventArgs.cs
- XPathAxisIterator.cs
- Border.cs
- CalendarDay.cs