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
- SoundPlayerAction.cs
- FontWeights.cs
- CodeParameterDeclarationExpression.cs
- ToolStripOverflow.cs
- OutgoingWebResponseContext.cs
- RIPEMD160.cs
- coordinatorscratchpad.cs
- RowCache.cs
- PlaceHolder.cs
- SubstitutionDesigner.cs
- Size3DValueSerializer.cs
- NativeMethods.cs
- DataBindingExpressionBuilder.cs
- DataGridTableStyleMappingNameEditor.cs
- XsltOutput.cs
- ListViewGroup.cs
- RenderCapability.cs
- ExitEventArgs.cs
- TemplatedMailWebEventProvider.cs
- WebControlToolBoxItem.cs
- QueryOptionExpression.cs
- IntPtr.cs
- StringFunctions.cs
- TopClause.cs
- DbXmlEnabledProviderManifest.cs
- QfeChecker.cs
- DefaultValidator.cs
- ForEachAction.cs
- CustomError.cs
- ToolStripProgressBar.cs
- PropertyGeneratedEventArgs.cs
- RuntimeHandles.cs
- LogicalMethodInfo.cs
- Calendar.cs
- UInt64.cs
- PtsContext.cs
- AuthenticodeSignatureInformation.cs
- LineBreakRecord.cs
- BufferModeSettings.cs
- smtpconnection.cs
- QilFactory.cs
- DataGridRowsPresenter.cs
- BufferBuilder.cs
- FlowNode.cs
- Rect3DConverter.cs
- HttpGetServerProtocol.cs
- TextCompositionEventArgs.cs
- TextPenaltyModule.cs
- XmlDataProvider.cs
- WebPartsPersonalizationAuthorization.cs
- RedirectionProxy.cs
- SystemTcpStatistics.cs
- ListDictionary.cs
- ExpressionNormalizer.cs
- BlurEffect.cs
- DialogDivider.cs
- OdbcError.cs
- SchemaNamespaceManager.cs
- AtomMaterializer.cs
- ConnectionInterfaceCollection.cs
- WaitForChangedResult.cs
- WmlLiteralTextAdapter.cs
- CodePageUtils.cs
- ListViewEditEventArgs.cs
- SqlUtil.cs
- TreeNodeCollectionEditorDialog.cs
- CapiHashAlgorithm.cs
- LookupNode.cs
- AttachedAnnotationChangedEventArgs.cs
- ContractBase.cs
- InputLanguageSource.cs
- AssociatedControlConverter.cs
- StrokeIntersection.cs
- LineVisual.cs
- Operator.cs
- Publisher.cs
- EventDescriptor.cs
- Normalization.cs
- WebResourceAttribute.cs
- BackgroundWorker.cs
- SqlFormatter.cs
- DateTimeSerializationSection.cs
- SHA1Managed.cs
- EntityCollection.cs
- GridViewItemAutomationPeer.cs
- Missing.cs
- TypeUsage.cs
- XmlUrlResolver.cs
- SspiNegotiationTokenProvider.cs
- PartialCachingAttribute.cs
- HtmlInputControl.cs
- XmlText.cs
- DataRelationCollection.cs
- DefaultTextStoreTextComposition.cs
- GroupStyle.cs
- SrgsElementList.cs
- ObjectCloneHelper.cs
- CommonDialog.cs
- DataGridColumn.cs
- MD5CryptoServiceProvider.cs