Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / Security / Principal / WindowsImpersonationContext.cs / 2 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Certificate.cs
- CodeMethodMap.cs
- DurationConverter.cs
- MouseBinding.cs
- ScriptReference.cs
- Span.cs
- AmbiguousMatchException.cs
- IsolatedStoragePermission.cs
- EntityContainerRelationshipSetEnd.cs
- Ray3DHitTestResult.cs
- MetadataFile.cs
- CroppedBitmap.cs
- COM2ExtendedUITypeEditor.cs
- RelationshipType.cs
- PreloadedPackages.cs
- MediaSystem.cs
- RoleManagerEventArgs.cs
- ToolboxItemFilterAttribute.cs
- ComplexTypeEmitter.cs
- RijndaelManaged.cs
- TabItem.cs
- NamespaceInfo.cs
- ToolbarAUtomationPeer.cs
- BackgroundFormatInfo.cs
- InputBuffer.cs
- DeploymentExceptionMapper.cs
- ColumnWidthChangedEvent.cs
- RoutedCommand.cs
- CalendarAutoFormat.cs
- TypeHelpers.cs
- MembershipSection.cs
- XmlParserContext.cs
- SpellerError.cs
- CheckPair.cs
- ClickablePoint.cs
- EntityProxyTypeInfo.cs
- ApplicationFileParser.cs
- SqlBuffer.cs
- SEHException.cs
- StreamFormatter.cs
- ZoneLinkButton.cs
- RelatedPropertyManager.cs
- UTF7Encoding.cs
- Registry.cs
- TextureBrush.cs
- Range.cs
- EntityContainerEmitter.cs
- DictionaryEntry.cs
- TemplateBindingExpressionConverter.cs
- PageAdapter.cs
- Accessible.cs
- OutputChannelBinder.cs
- ResourceSet.cs
- rsa.cs
- QueuePathDialog.cs
- FormsAuthenticationModule.cs
- InvalidDataContractException.cs
- CapabilitiesRule.cs
- CodeTypeMemberCollection.cs
- XmlSchemaAnnotated.cs
- Speller.cs
- PeerCollaboration.cs
- XmlSerializationGeneratedCode.cs
- ObjectIDGenerator.cs
- FullTextState.cs
- TabPageDesigner.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- CapabilitiesSection.cs
- FontDriver.cs
- RectangleConverter.cs
- ObjectDisposedException.cs
- Separator.cs
- ValidatorCompatibilityHelper.cs
- HttpCapabilitiesBase.cs
- WebRequestModuleElement.cs
- CodeThrowExceptionStatement.cs
- ExpressionPrinter.cs
- TreeNodeClickEventArgs.cs
- UndoUnit.cs
- PtsPage.cs
- AdCreatedEventArgs.cs
- iisPickupDirectory.cs
- XmlLinkedNode.cs
- OutputCacheSettings.cs
- ContextInformation.cs
- ToolStripMenuItemCodeDomSerializer.cs
- RowParagraph.cs
- GetReadStreamResult.cs
- DefaultMemberAttribute.cs
- InkCanvasInnerCanvas.cs
- CfgParser.cs
- MeshGeometry3D.cs
- Utils.cs
- OracleRowUpdatedEventArgs.cs
- DashStyle.cs
- PermissionSetTriple.cs
- DataControlFieldHeaderCell.cs
- PartialTrustVisibleAssembliesSection.cs
- MultipleViewProviderWrapper.cs
- PathSegment.cs