Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Security / Principal / WindowsImpersonationContext.cs / 1305376 / WindowsImpersonationContext.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //[....] // // // WindowsImpersonationContext.cs // // Representation of an impersonation context. // namespace System.Security.Principal { using Microsoft.Win32; using Microsoft.Win32.SafeHandles; using System.Runtime.InteropServices; #if FEATURE_CORRUPTING_EXCEPTIONS using System.Runtime.ExceptionServices; #endif // FEATURE_CORRUPTING_EXCEPTIONS using System.Security.Permissions; using System.Runtime.ConstrainedExecution; using System.Runtime.Versioning; using System.Diagnostics.Contracts; [System.Runtime.InteropServices.ComVisible(true)] public class WindowsImpersonationContext : IDisposable { [System.Security.SecurityCritical /*auto-generated*/] private SafeTokenHandle m_safeTokenHandle = SafeTokenHandle.InvalidHandle; private WindowsIdentity m_wi; private FrameSecurityDescriptor m_fsd; [System.Security.SecurityCritical] // auto-generated private WindowsImpersonationContext () {} [System.Security.SecurityCritical] // auto-generated [ResourceExposure(ResourceScope.None)] [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] internal WindowsImpersonationContext (SafeTokenHandle safeTokenHandle, WindowsIdentity wi, bool isImpersonating, FrameSecurityDescriptor fsd) { if (safeTokenHandle.IsInvalid) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidImpersonationToken")); Contract.EndContractBlock(); if (isImpersonating) { if (!Win32Native.DuplicateHandle(Win32Native.GetCurrentProcess(), safeTokenHandle, Win32Native.GetCurrentProcess(), ref m_safeTokenHandle, 0, true, Win32Native.DUPLICATE_SAME_ACCESS)) throw new SecurityException(Win32Native.GetMessage(Marshal.GetLastWin32Error())); m_wi = wi; } m_fsd = fsd; } // Revert to previous impersonation (the only public method). [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.None)] [ResourceConsumption(ResourceScope.Process, ResourceScope.Process)] public void Undo () { int hr = 0; if (m_safeTokenHandle.IsInvalid) { // the thread was not initially impersonating hr = Win32.RevertToSelf(); if (hr < 0) Environment.FailFast(Win32Native.GetMessage(hr)); } else { hr = Win32.RevertToSelf(); if (hr < 0) Environment.FailFast(Win32Native.GetMessage(hr)); hr = Win32.ImpersonateLoggedOnUser(m_safeTokenHandle); if (hr < 0) throw new SecurityException(Win32Native.GetMessage(hr)); } WindowsIdentity.UpdateThreadWI(m_wi); if (m_fsd != null) m_fsd.SetTokenHandles(null, null); } // Non-throwing version that does not new any exception objects. To be called when reliability matters [System.Security.SecurityCritical] // auto-generated [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] [ResourceExposure(ResourceScope.None)] [ResourceConsumption(ResourceScope.Process, ResourceScope.Process)] #if FEATURE_CORRUPTING_EXCEPTIONS [HandleProcessCorruptedStateExceptions] // #endif // FEATURE_CORRUPTING_EXCEPTIONS internal bool UndoNoThrow() { bool bRet = false; try{ int hr = 0; if (m_safeTokenHandle.IsInvalid) { // the thread was not initially impersonating hr = Win32.RevertToSelf(); if (hr < 0) Environment.FailFast(Win32Native.GetMessage(hr)); } else { hr = Win32.RevertToSelf(); if (hr >= 0) { hr = Win32.ImpersonateLoggedOnUser(m_safeTokenHandle); } else { Environment.FailFast(Win32Native.GetMessage(hr)); } } bRet = (hr >= 0); if (m_fsd != null) m_fsd.SetTokenHandles(null,null); } catch { bRet = false; } return bRet; } // // IDisposable interface. // [System.Security.SecuritySafeCritical] // auto-generated [ComVisible(false)] protected virtual void Dispose(bool disposing) { if (disposing) { if (m_safeTokenHandle != null && !m_safeTokenHandle.IsClosed) { Undo(); m_safeTokenHandle.Dispose(); } } } [System.Security.SecuritySafeCritical] // auto-generated [ComVisible(false)] public void Dispose () { Dispose(true); } } } // 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
- XmlAnyAttributeAttribute.cs
- CultureInfo.cs
- ICspAsymmetricAlgorithm.cs
- Component.cs
- XmlDocument.cs
- InlineCollection.cs
- MultilineStringConverter.cs
- CollectionsUtil.cs
- WebServiceReceive.cs
- userdatakeys.cs
- WbmpConverter.cs
- DetailsViewModeEventArgs.cs
- DeclarationUpdate.cs
- WinFormsSecurity.cs
- TreeNodeCollection.cs
- DefaultValueTypeConverter.cs
- DocumentXmlWriter.cs
- Pointer.cs
- Peer.cs
- DataConnectionHelper.cs
- ImmutableObjectAttribute.cs
- CorePropertiesFilter.cs
- Rijndael.cs
- ProviderCollection.cs
- PrtTicket_Base.cs
- PrintPreviewControl.cs
- XmlChildNodes.cs
- LookupBindingPropertiesAttribute.cs
- IntegerValidator.cs
- PropertyGeneratedEventArgs.cs
- XmlComplianceUtil.cs
- ToolStripHighContrastRenderer.cs
- ToolStripButton.cs
- RequestQueue.cs
- InputScope.cs
- DataGridViewButtonCell.cs
- ValidatingReaderNodeData.cs
- WebPartConnectVerb.cs
- X509Extension.cs
- CodeGroup.cs
- PropertyChangedEventManager.cs
- TypeConverter.cs
- KnownTypeHelper.cs
- DataRelationPropertyDescriptor.cs
- TypeSystem.cs
- MeasureItemEvent.cs
- NavigationProperty.cs
- StructuralObject.cs
- Line.cs
- SchemaType.cs
- xml.cs
- StreamInfo.cs
- ScriptIgnoreAttribute.cs
- WorkflowRuntimeSection.cs
- Menu.cs
- ColumnResizeUndoUnit.cs
- Error.cs
- IncrementalCompileAnalyzer.cs
- ServiceOperationUIEditor.cs
- Property.cs
- DefaultSerializationProviderAttribute.cs
- TagNameToTypeMapper.cs
- GifBitmapDecoder.cs
- CodeCompileUnit.cs
- Visual3D.cs
- StorageBasedPackageProperties.cs
- SerTrace.cs
- WorkflowControlEndpoint.cs
- QuaternionKeyFrameCollection.cs
- BatchParser.cs
- MergeFilterQuery.cs
- SqlGenerator.cs
- ExpressionBinding.cs
- CodeTypeParameterCollection.cs
- DecoderReplacementFallback.cs
- RightsManagementResourceHelper.cs
- ResourceAssociationTypeEnd.cs
- DragEventArgs.cs
- XmlCustomFormatter.cs
- CodePageEncoding.cs
- WebReferencesBuildProvider.cs
- CursorConverter.cs
- CodeGeneratorOptions.cs
- SessionStateSection.cs
- CapabilitiesPattern.cs
- Inflater.cs
- XmlNodeList.cs
- DateTimeValueSerializerContext.cs
- DataGridViewControlCollection.cs
- InputBindingCollection.cs
- ExecutionTracker.cs
- MemoryMappedFileSecurity.cs
- VariableQuery.cs
- CompilationLock.cs
- CheckBoxRenderer.cs
- MatchingStyle.cs
- EllipticalNodeOperations.cs
- QueryContinueDragEvent.cs
- IisTraceListener.cs
- IconBitmapDecoder.cs