Click here to Skip to main content
12,622,741 members (27,966 online)
Rate this:
 
Please Sign up or sign in to vote.
See more: C#
Hi Everybody,

I have a project that copies files from a computer to another .I am using Impersonator for this. But it works only in same domain. İ want to copy file to another domain.
Here is my codes
public Impersonator(
          string userName,
          string domainName,
          string password)
      {
          ImpersonateValidUser(userName, domainName, password);
      }
 
      // ------------------------------------------------------------------
      #endregion

      #region IDisposable member.
      // ------------------------------------------------------------------

      public void Dispose()
      {
          UndoImpersonation();
      }
 
      // ------------------------------------------------------------------
      #endregion

      #region P/Invoke.
      // ------------------------------------------------------------------

      [DllImport("advapi32.dll", SetLastError = true)]
      private static extern int LogonUser(
          string lpszUserName,
          string lpszDomain,
          string lpszPassword,
          int dwLogonType,
          int dwLogonProvider,
          ref IntPtr phToken);
 
      [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
      private static extern int DuplicateToken(
          IntPtr hToken,
          int impersonationLevel,
          ref IntPtr hNewToken);
 
      [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
      private static extern bool RevertToSelf();
 
      [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
      private static extern bool CloseHandle(
          IntPtr handle);
 
      private const int LOGON32_LOGON_NEW_CREDENTIALS = 9;
      private const int LOGON32_PROVIDER_WINNT50 = 0;
 
      // ------------------------------------------------------------------
      #endregion

      #region Private member.
      // ------------------------------------------------------------------

      /// <summary>
      /// Does the actual impersonation.
      /// </summary>
      /// <param name="userName">The name of the user to act as.</param>
      /// <param name="domainName">The domain name of the user to act as.</param>
      /// <param name="password">The password of the user to act as.</param>
      private void ImpersonateValidUser(
          string userName,
          string domain,
          string password)
      {
          WindowsIdentity tempWindowsIdentity = null;
          IntPtr token = IntPtr.Zero;
          IntPtr tokenDuplicate = IntPtr.Zero;
 
          try
          {
              if (RevertToSelf())
              {
                  if (LogonUser(
                      userName,
                      domain,
                      password,
                      LOGON32_LOGON_NEW_CREDENTIALS,
                      LOGON32_PROVIDER_WINNT50,
                      ref token) != 0)
                  {
                      if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
                      {
                          tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
                          impersonationContext = tempWindowsIdentity.Impersonate();
                      }
                      else
                      {
                          throw new Win32Exception(Marshal.GetLastWin32Error());
                      }
                  }
                  else
                  {
                      throw new Win32Exception(Marshal.GetLastWin32Error());
                  }
              }
              else
              {
                  throw new Win32Exception(Marshal.GetLastWin32Error());
              }
          }
          finally
          {
              if (token != IntPtr.Zero)
              {
                  CloseHandle(token);
              }
              if (tokenDuplicate != IntPtr.Zero)
              {
                  CloseHandle(tokenDuplicate);
              }
          }
      }
 
      /// <summary>
      /// Reverts the impersonation.
      /// </summary>
      private void UndoImpersonation()
      {
          if (impersonationContext != null)
          {
              impersonationContext.Undo();
          }
      }
 
      private WindowsImpersonationContext impersonationContext = null;
 
      // ------------------------------------------------------------------
      #endregion
Posted 18-Feb-13 3:01am
a_l_.i326
Updated 18-Feb-13 3:08am
v2
Comments
ryanb31 18-Feb-13 10:58am
   
You'll need to use an account that get access both domains.

1 solution

Rate this: bad
 
good
Please Sign up or sign in to vote.

Solution 1

this[^] may help you
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month


Advertise | Privacy | Mobile
Web02 | 2.8.161128.1 | Last Updated 18 Feb 2013
Copyright © CodeProject, 1999-2016
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100