Code:
/ 4.0 / 4.0 / 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. // ==++== // // 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
- SafePointer.cs
- MDIClient.cs
- DmlSqlGenerator.cs
- AttributedMetaModel.cs
- ExtendLockCommand.cs
- HScrollBar.cs
- CodeLabeledStatement.cs
- CodeNamespaceCollection.cs
- EndpointConfigContainer.cs
- ChtmlMobileTextWriter.cs
- PinnedBufferMemoryStream.cs
- RemotingConfiguration.cs
- _AutoWebProxyScriptEngine.cs
- HttpRequestContext.cs
- EmbeddedObject.cs
- VirtualPathProvider.cs
- EntityDataSource.cs
- AppDomainFactory.cs
- InvokeFunc.cs
- TemplateComponentConnector.cs
- HiddenFieldPageStatePersister.cs
- SettingsContext.cs
- StreamingContext.cs
- MultilineStringConverter.cs
- glyphs.cs
- GroupItem.cs
- UnrecognizedAssertionsBindingElement.cs
- precedingsibling.cs
- Inline.cs
- AmbientLight.cs
- ConstraintConverter.cs
- ADConnectionHelper.cs
- WebPartAuthorizationEventArgs.cs
- IISMapPath.cs
- PagesSection.cs
- SRef.cs
- Char.cs
- BroadcastEventHelper.cs
- XamlSerializerUtil.cs
- EnterpriseServicesHelper.cs
- RepeatBehavior.cs
- Message.cs
- SourceFilter.cs
- CustomAttribute.cs
- WebPartEditorCancelVerb.cs
- brushes.cs
- RMPublishingDialog.cs
- TextTreeObjectNode.cs
- ItemCheckEvent.cs
- WindowsGrip.cs
- BoolExpression.cs
- SecurityUtils.cs
- CollectionDataContractAttribute.cs
- Pen.cs
- TdsParserStateObject.cs
- WindowsEditBox.cs
- EntityStoreSchemaGenerator.cs
- XmlSchemaType.cs
- Transform3DCollection.cs
- OperationGenerator.cs
- MobileListItem.cs
- SecurityContext.cs
- TimeSpan.cs
- XmlNamespaceManager.cs
- ResourceBinder.cs
- Win32Native.cs
- ExpressionParser.cs
- EntityParameter.cs
- PeerHopCountAttribute.cs
- ErasingStroke.cs
- DelegateTypeInfo.cs
- StorageMappingItemLoader.cs
- TaiwanLunisolarCalendar.cs
- SqlAliasesReferenced.cs
- MessagePropertyDescription.cs
- RawAppCommandInputReport.cs
- DataGridViewTextBoxEditingControl.cs
- OletxEnlistment.cs
- ConfigXmlWhitespace.cs
- RangeValidator.cs
- KeyNotFoundException.cs
- CompilationUnit.cs
- DataContractSet.cs
- TextStore.cs
- HtmlMeta.cs
- RecommendedAsConfigurableAttribute.cs
- CacheAxisQuery.cs
- TextRange.cs
- StoreAnnotationsMap.cs
- CultureInfoConverter.cs
- HttpProfileBase.cs
- ErrorsHelper.cs
- EdmValidator.cs
- Timeline.cs
- ObjectAssociationEndMapping.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- Label.cs
- EventArgs.cs
- GeneratedView.cs
- XmlNamespaceMapping.cs