Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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); } } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MethodToken.cs
- QueryContext.cs
- BaseDataListPage.cs
- DesignerContextDescriptor.cs
- ToolStripSettings.cs
- JpegBitmapDecoder.cs
- DetailsViewModeEventArgs.cs
- GC.cs
- TimeSpanSecondsConverter.cs
- FolderLevelBuildProviderCollection.cs
- X509KeyIdentifierClauseType.cs
- CaseCqlBlock.cs
- SqlCacheDependencyDatabase.cs
- ExtensionWindowHeader.cs
- TextTreeRootTextBlock.cs
- UnsafeNativeMethodsCLR.cs
- ButtonFlatAdapter.cs
- TCEAdapterGenerator.cs
- BlurEffect.cs
- XmlCountingReader.cs
- LinkedList.cs
- TemplateManager.cs
- LazyTextWriterCreator.cs
- SerializationAttributes.cs
- CriticalFinalizerObject.cs
- LazyTextWriterCreator.cs
- Focus.cs
- LayoutEditorPart.cs
- TCPListener.cs
- PageDeviceFont.cs
- ELinqQueryState.cs
- ParameterRefs.cs
- HtmlUtf8RawTextWriter.cs
- ExceptionValidationRule.cs
- SoapFaultCodes.cs
- ServiceRouteHandler.cs
- PictureBox.cs
- InvalidWMPVersionException.cs
- DataError.cs
- VisualBasicValue.cs
- GeneratedCodeAttribute.cs
- hwndwrapper.cs
- MetadataPropertyCollection.cs
- LogLogRecordEnumerator.cs
- AutomationInteropProvider.cs
- DesignerSerializerAttribute.cs
- FilterableAttribute.cs
- ACL.cs
- PeerTransportSecurityElement.cs
- ValueConversionAttribute.cs
- RootBrowserWindow.cs
- SiteMapNode.cs
- DispatchChannelSink.cs
- XmlElementList.cs
- SqlServer2KCompatibilityAnnotation.cs
- HttpPostedFile.cs
- EncodingStreamWrapper.cs
- FormCollection.cs
- TextParagraphProperties.cs
- MetaModel.cs
- TimeEnumHelper.cs
- oledbmetadatacolumnnames.cs
- ContentType.cs
- GetParentChain.cs
- DesignerInterfaces.cs
- PointAnimationUsingPath.cs
- CodeTypeReferenceCollection.cs
- CompositeScriptReference.cs
- LinqDataView.cs
- ObjectMemberMapping.cs
- TypeLoadException.cs
- DropSource.cs
- NoClickablePointException.cs
- CodeNamespaceImport.cs
- TabItemWrapperAutomationPeer.cs
- RouteValueExpressionBuilder.cs
- BaseProcessor.cs
- EntityParameter.cs
- QualifierSet.cs
- HttpCachePolicyElement.cs
- TaskForm.cs
- InheritablePropertyChangeInfo.cs
- XmlSchemaSet.cs
- PackageDigitalSignatureManager.cs
- DataViewListener.cs
- EntryIndex.cs
- WindowsAltTab.cs
- HealthMonitoringSection.cs
- safex509handles.cs
- DataGridViewColumn.cs
- CreateUserWizard.cs
- OleDbReferenceCollection.cs
- OletxDependentTransaction.cs
- SuppressMessageAttribute.cs
- HttpHandlersInstallComponent.cs
- AutomationIdentifierGuids.cs
- UndoUnit.cs
- DocumentPageViewAutomationPeer.cs
- sqlnorm.cs
- SizeFConverter.cs