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
- BoundPropertyEntry.cs
- MatrixStack.cs
- ElementsClipboardData.cs
- CAGDesigner.cs
- TextBoxDesigner.cs
- SQLBytes.cs
- WindowsStartMenu.cs
- MsdtcWrapper.cs
- TriggerActionCollection.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- FormsAuthenticationCredentials.cs
- _CommandStream.cs
- DefaultAutoFieldGenerator.cs
- EllipseGeometry.cs
- ObjectViewFactory.cs
- MouseButtonEventArgs.cs
- DetailsViewRow.cs
- SystemIPInterfaceProperties.cs
- HttpProfileGroupBase.cs
- BitmapEffectGroup.cs
- TemplatedWizardStep.cs
- InternalPermissions.cs
- StickyNoteAnnotations.cs
- ObjectAnimationBase.cs
- UriSection.cs
- OdbcInfoMessageEvent.cs
- FtpCachePolicyElement.cs
- XmlParser.cs
- AttachmentCollection.cs
- Trace.cs
- AssemblyResourceLoader.cs
- SecUtil.cs
- ConnectionProviderAttribute.cs
- RuntimeCompatibilityAttribute.cs
- ButtonRenderer.cs
- CardSpacePolicyElement.cs
- RawStylusInputCustomData.cs
- InvokePatternIdentifiers.cs
- X509IssuerSerialKeyIdentifierClause.cs
- ApplicationManager.cs
- TimerElapsedEvenArgs.cs
- DefaultObjectMappingItemCollection.cs
- XmlRawWriterWrapper.cs
- Speller.cs
- RegexCharClass.cs
- IBuiltInEvidence.cs
- EntityProviderServices.cs
- PngBitmapEncoder.cs
- RecordManager.cs
- SchemaTypeEmitter.cs
- WorkflowRuntimeServiceElement.cs
- PublisherIdentityPermission.cs
- SelectedPathEditor.cs
- ExpandSegment.cs
- WindowsRebar.cs
- Aes.cs
- HtmlAnchor.cs
- AuthenticationConfig.cs
- PersonalizationEntry.cs
- CompositeFontInfo.cs
- EventWaitHandle.cs
- SmiMetaData.cs
- WebPartDisplayModeCancelEventArgs.cs
- TextRunProperties.cs
- SHA384Managed.cs
- XmlWriterSettings.cs
- RightsManagementPermission.cs
- EntitySqlQueryCacheKey.cs
- SqlParameterizer.cs
- RadioButtonFlatAdapter.cs
- RenderCapability.cs
- CodeBinaryOperatorExpression.cs
- WindowsTooltip.cs
- DataComponentGenerator.cs
- MergeFailedEvent.cs
- ParameterCollection.cs
- AnnotationResourceChangedEventArgs.cs
- SessionStateContainer.cs
- WinEventHandler.cs
- BitmapEffectInputConnector.cs
- SchemaMapping.cs
- TrackingCondition.cs
- RoutedUICommand.cs
- ColumnResizeAdorner.cs
- ThemeableAttribute.cs
- LexicalChunk.cs
- TrackingWorkflowEventArgs.cs
- DataGridCaption.cs
- ValidationErrorCollection.cs
- GridSplitterAutomationPeer.cs
- ReservationNotFoundException.cs
- HostVisual.cs
- ProxyAttribute.cs
- SignedInfo.cs
- DefaultAssemblyResolver.cs
- SimpleWebHandlerParser.cs
- ActivitySurrogateSelector.cs
- SqlDataAdapter.cs
- SimpleParser.cs
- ChangeBlockUndoRecord.cs