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
- IsolatedStorageException.cs
- ConstructorNeedsTagAttribute.cs
- ListItemConverter.cs
- XmlValidatingReaderImpl.cs
- PeerCollaboration.cs
- _DynamicWinsockMethods.cs
- TreeViewCancelEvent.cs
- XamlClipboardData.cs
- TrustExchangeException.cs
- XmlElementAttributes.cs
- XmlNotation.cs
- HttpMethodAttribute.cs
- AtomServiceDocumentSerializer.cs
- TagNameToTypeMapper.cs
- glyphs.cs
- BamlTreeMap.cs
- UniqueConstraint.cs
- XmlSchemaChoice.cs
- MemberBinding.cs
- ScriptResourceInfo.cs
- SoapObjectReader.cs
- ReplyChannelAcceptor.cs
- InstanceKeyCompleteException.cs
- DynamicPropertyReader.cs
- HttpDebugHandler.cs
- ContainerControl.cs
- WorkflowInstanceTerminatedRecord.cs
- peersecuritysettings.cs
- ColorMatrix.cs
- DemultiplexingClientMessageFormatter.cs
- MetadataUtil.cs
- ReferencedAssembly.cs
- RawStylusInputCustomData.cs
- Span.cs
- StoreItemCollection.Loader.cs
- XPathDocument.cs
- X509Utils.cs
- DesignSurfaceCollection.cs
- ServiceMetadataBehavior.cs
- FormatterConverter.cs
- WebRequestModuleElementCollection.cs
- RtfNavigator.cs
- StateItem.cs
- PersonalizablePropertyEntry.cs
- Matrix3D.cs
- DataGridLength.cs
- DigitShape.cs
- RealProxy.cs
- PathGradientBrush.cs
- BufferedGraphics.cs
- Math.cs
- WebServiceClientProxyGenerator.cs
- ColorTransformHelper.cs
- ExternalException.cs
- BamlResourceSerializer.cs
- TextAdaptor.cs
- EmptyImpersonationContext.cs
- TripleDES.cs
- ToolStripSeparatorRenderEventArgs.cs
- EditorPartChrome.cs
- Point3DAnimation.cs
- ComponentCollection.cs
- WebPartZoneAutoFormat.cs
- WebBrowserNavigatedEventHandler.cs
- PieceNameHelper.cs
- TextBox.cs
- ScriptReferenceEventArgs.cs
- Item.cs
- CachedBitmap.cs
- AmbientEnvironment.cs
- ToolTip.cs
- Track.cs
- TreeViewBindingsEditor.cs
- DynamicRouteExpression.cs
- GridEntry.cs
- SystemIPv4InterfaceProperties.cs
- TemplateXamlParser.cs
- SamlSubjectStatement.cs
- XmlParserContext.cs
- UnsafeMethods.cs
- SqlDependency.cs
- GeometryModel3D.cs
- OdbcReferenceCollection.cs
- counter.cs
- OutputCacheSection.cs
- WebServiceBindingAttribute.cs
- CompilationLock.cs
- _BufferOffsetSize.cs
- ParsedAttributeCollection.cs
- _RequestCacheProtocol.cs
- HostedElements.cs
- COM2TypeInfoProcessor.cs
- XPathDocumentBuilder.cs
- ParsedRoute.cs
- CollectionChange.cs
- SystemIPv6InterfaceProperties.cs
- StickyNote.cs
- NamedPipeConnectionPool.cs
- StylusButton.cs
- SequentialActivityDesigner.cs