Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Security / Principal / WindowsImpersonationContext.cs / 1 / 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; using System.Security.Permissions; using System.Runtime.ConstrainedExecution; [System.Runtime.InteropServices.ComVisible(true)] public class WindowsImpersonationContext : IDisposable { private SafeTokenHandle m_safeTokenHandle = SafeTokenHandle.InvalidHandle; private WindowsIdentity m_wi; private FrameSecurityDescriptor m_fsd; private WindowsImpersonationContext () {} internal WindowsImpersonationContext (SafeTokenHandle safeTokenHandle, WindowsIdentity wi, bool isImpersonating, FrameSecurityDescriptor fsd) { // make this a no-op on Win98 so calling code does not have to special case down-level platforms. if (WindowsIdentity.RunningOnWin2K) { if (safeTokenHandle.IsInvalid) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidImpersonationToken")); 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). public void Undo () { // make this a no-op on Win98 so calling code does not have to special case down-level platforms. if (!WindowsIdentity.RunningOnWin2K) return; int hr = 0; if (m_safeTokenHandle.IsInvalid) { // the thread was not initially impersonating hr = Win32.RevertToSelf(); if (hr < 0) throw new SecurityException(Win32Native.GetMessage(hr)); } else { hr = Win32.RevertToSelf(); if (hr < 0) throw new SecurityException(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 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal bool UndoNoThrow() { bool bRet = false; try{ // make this a no-op on Win98 so calling code does not have to special case down-level platforms. if (!WindowsIdentity.RunningOnWin2K) return true; int hr = 0; if (m_safeTokenHandle.IsInvalid) { // the thread was not initially impersonating hr = Win32.RevertToSelf(); } else { hr = Win32.RevertToSelf(); if (hr >= 0) hr = Win32.ImpersonateLoggedOnUser(m_safeTokenHandle); } bRet = (hr >= 0); if (m_fsd != null) m_fsd.SetTokenHandles(null,null); } catch { bRet = false; } return bRet; } // // IDisposable interface. // [ComVisible(false)] protected virtual void Dispose(bool disposing) { if (disposing) { if (m_safeTokenHandle != null && !m_safeTokenHandle.IsClosed) { Undo(); m_safeTokenHandle.Dispose(); } } } [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; using System.Security.Permissions; using System.Runtime.ConstrainedExecution; [System.Runtime.InteropServices.ComVisible(true)] public class WindowsImpersonationContext : IDisposable { private SafeTokenHandle m_safeTokenHandle = SafeTokenHandle.InvalidHandle; private WindowsIdentity m_wi; private FrameSecurityDescriptor m_fsd; private WindowsImpersonationContext () {} internal WindowsImpersonationContext (SafeTokenHandle safeTokenHandle, WindowsIdentity wi, bool isImpersonating, FrameSecurityDescriptor fsd) { // make this a no-op on Win98 so calling code does not have to special case down-level platforms. if (WindowsIdentity.RunningOnWin2K) { if (safeTokenHandle.IsInvalid) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidImpersonationToken")); 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). public void Undo () { // make this a no-op on Win98 so calling code does not have to special case down-level platforms. if (!WindowsIdentity.RunningOnWin2K) return; int hr = 0; if (m_safeTokenHandle.IsInvalid) { // the thread was not initially impersonating hr = Win32.RevertToSelf(); if (hr < 0) throw new SecurityException(Win32Native.GetMessage(hr)); } else { hr = Win32.RevertToSelf(); if (hr < 0) throw new SecurityException(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 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal bool UndoNoThrow() { bool bRet = false; try{ // make this a no-op on Win98 so calling code does not have to special case down-level platforms. if (!WindowsIdentity.RunningOnWin2K) return true; int hr = 0; if (m_safeTokenHandle.IsInvalid) { // the thread was not initially impersonating hr = Win32.RevertToSelf(); } else { hr = Win32.RevertToSelf(); if (hr >= 0) hr = Win32.ImpersonateLoggedOnUser(m_safeTokenHandle); } bRet = (hr >= 0); if (m_fsd != null) m_fsd.SetTokenHandles(null,null); } catch { bRet = false; } return bRet; } // // IDisposable interface. // [ComVisible(false)] protected virtual void Dispose(bool disposing) { if (disposing) { if (m_safeTokenHandle != null && !m_safeTokenHandle.IsClosed) { Undo(); m_safeTokenHandle.Dispose(); } } } [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
- TableRow.cs
- HMACSHA512.cs
- Bits.cs
- ToolBarTray.cs
- BatchWriter.cs
- ClockController.cs
- XPathEmptyIterator.cs
- XmlElementCollection.cs
- SQLInt16.cs
- CacheAxisQuery.cs
- RunInstallerAttribute.cs
- KeyTimeConverter.cs
- PictureBox.cs
- WebServiceMethodData.cs
- AutoFocusStyle.xaml.cs
- PropertyInfoSet.cs
- UnauthorizedAccessException.cs
- RelatedImageListAttribute.cs
- ClusterRegistryConfigurationProvider.cs
- ProtocolsConfigurationHandler.cs
- FixedStringLookup.cs
- TextDecorationUnitValidation.cs
- ScriptBehaviorDescriptor.cs
- ConnectionManagementElement.cs
- TimerElapsedEvenArgs.cs
- PrincipalPermission.cs
- TextEditorDragDrop.cs
- ProcessHostFactoryHelper.cs
- RelatedView.cs
- ItemsControlAutomationPeer.cs
- ACE.cs
- DataRecordInternal.cs
- MethodBody.cs
- EventListenerClientSide.cs
- TemplateManager.cs
- ImmutableAssemblyCacheEntry.cs
- CollectionBuilder.cs
- AppDomainCompilerProxy.cs
- RankException.cs
- UserControlBuildProvider.cs
- _NetworkingPerfCounters.cs
- SetIterators.cs
- ActiveXContainer.cs
- InvalidDataException.cs
- TitleStyle.cs
- HttpContextWrapper.cs
- BrushValueSerializer.cs
- WindowsFont.cs
- Transform.cs
- SqlRowUpdatingEvent.cs
- EFDataModelProvider.cs
- EncryptedKey.cs
- MessageSecurityOverTcpElement.cs
- Encoder.cs
- ImageCodecInfoPrivate.cs
- FormParameter.cs
- FormsAuthenticationUserCollection.cs
- SkipStoryboardToFill.cs
- ErrorFormatter.cs
- InlineUIContainer.cs
- ImmComposition.cs
- MarkerProperties.cs
- Rijndael.cs
- WorkflowWebHostingModule.cs
- HttpFileCollection.cs
- SHA384Managed.cs
- PageThemeCodeDomTreeGenerator.cs
- VersionPair.cs
- LabelLiteral.cs
- TypeLibConverter.cs
- OleServicesContext.cs
- XmlSchemaObject.cs
- PropertyRecord.cs
- LogicalExpressionEditor.cs
- SymmetricKey.cs
- StorageEntitySetMapping.cs
- Timeline.cs
- FontEmbeddingManager.cs
- UInt64Storage.cs
- CallbackValidator.cs
- ApplicationManager.cs
- Number.cs
- ApplicationBuildProvider.cs
- TextRangeSerialization.cs
- dbdatarecord.cs
- AnnotationComponentChooser.cs
- CannotUnloadAppDomainException.cs
- DockingAttribute.cs
- JsonWriter.cs
- CachedPathData.cs
- MaterialCollection.cs
- MenuItem.cs
- AmbientLight.cs
- OleDbRowUpdatedEvent.cs
- ToolStripArrowRenderEventArgs.cs
- XmlObjectSerializerReadContextComplexJson.cs
- MembershipValidatePasswordEventArgs.cs
- MaskInputRejectedEventArgs.cs
- HostingEnvironmentWrapper.cs
- FileAuthorizationModule.cs