Impersonator
Please also reference this article http://blogs.msdn.com/jimmytr/archive/2007/04/14/writing-test-code-with-impersonation.aspx
and
<a href="http://www.123aspx.com/redir.aspx?res=31987">http://www.123aspx.com/redir.aspx?res=31987</a>
public class Impersonator { // private members for holding domain user account credentials private string username = String.Empty; private string password = String.Empty; private string domain = String.Empty; // this will hold the security context for reverting back to the client after impersonation operations are complete private WindowsImpersonationContext impersonationContext = null; // disable instantiation via default constructor private Impersonator() {} public Impersonator(string username, string domain, string password) { // set the properties used for domain user account this.username = username; this.domain = domain; this.password = password; } private WindowsIdentity Logon() { IntPtr handle = new IntPtr(0); handle = IntPtr.Zero; const int LOGON32_LOGON_NETWORK = 3; const int LOGON32_PROVIDER_DEFAULT = 0; // attempt to authenticate domain user account bool logonSucceeded = LogonUser(this.username, this.domain, this.password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, ref handle); if(!logonSucceeded) { // if the logon failed, get the error code and throw an exception int errorCode = Marshal.GetLastWin32Error(); throw new Exception("User logon failed. Error Number: " + errorCode); } // if logon succeeds, create a WindowsIdentity instance WindowsIdentity winIdentity = new WindowsIdentity(handle); // close the open handle to the authenticated account CloseHandle(handle); return winIdentity; } public void Impersonate() { // authenticates the domain user account and begins impersonating it this.impersonationContext = this.Logon().Impersonate(); } public void Undo() { // rever back to original security context which was store in the WindowsImpersonationContext instance this.impersonationContext.Undo(); } [DllImport("advapi32.dll", SetLastError=true)] private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); [DllImport("kernel32.dll", CharSet=CharSet.Auto)] private static extern bool CloseHandle(IntPtr handle); }