//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// public Boolean ImpersonateUser(Int32 processId) { GetPrimaryToken((UInt32)processId, ""); if (hExistingToken == IntPtr.Zero) { return(false); } if (!Unmanaged.DuplicateTokenEx( hExistingToken, (UInt32)Enums.ACCESS_MASK.MAXIMUM_ALLOWED, IntPtr.Zero, Enums._SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation, Enums.TOKEN_TYPE.TokenPrimary, out phNewToken )) { GetError("DuplicateTokenEx: "); return(false); } Console.WriteLine(" [+] Duplicate Token Handle: " + phNewToken.ToInt32()); if (!Unmanaged.ImpersonateLoggedOnUser(phNewToken)) { GetError("ImpersonateLoggedOnUser: "); return(false); } return(true); }