Disposable Unimpersonation
A while ago, I discussed the possibility of using RevertToSelf() to avoid Double Hop problems. I suggested this pattern can be wrapped inside a class implementing IDisposable to easily use it.
This is the implementation of this Unimpersonator class:
Code:
using
System;using System.Runtime.InteropServices;
using System.Security.Principal;
namespace Strawjackal.Utils
{
public class Unimpersonator : IDisposable
{
private WindowsIdentity m_CurrentUser;
public Unimpersonator()
{
m_CurrentUser = WindowsIdentity.GetCurrent();
RevertToSelf();
}
public void Dispose()
{
if (m_CurrentUser != null)
m_CurrentUser.Impersonate();
}
[DllImport("advapi32.dll")]
private static extern int RevertToSelf();
}
}
Usage:
using
(new Unimpersonator()){
// Perform network access
}