远程文件copy问题
A地操作,从B地copy共享文件到C地。
B和C没有直接连通,而是通过A串联,A、B是本地登录,B中文件共享给一个本地用户,C是在域中共享给erveryone。
我目前能做到的是分两步,先在A地模拟一个角色(B中的本地用户),把文件copy到A地,再在A地模拟一个角色(域中的用户),把A地的文件copy到C地。
我现在想直接一步就从B地copy到C地,怎么解决B和C地需要的权限不一样的问题!
求给代码和解释!
谢谢!
角色模拟的代码如下:
     //角色模拟部分
         // logon types
         //const int LOGON32_LOGON_INTERACTIVE = 2;
         //const int LOGON32_LOGON_NETWORK = 3;
         const int LOGON32_LOGON_NEW_CREDENTIALS = 9;
         // logon providers
         const int LOGON32_PROVIDER_DEFAULT = 0;
         //const int LOGON32_PROVIDER_WINNT50 = 3;
         //const int LOGON32_PROVIDER_WINNT40 = 2;
         //const int LOGON32_PROVIDER_WINNT35 = 1;
         [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
         public 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)]
         public static extern int DuplicateToken(IntPtr hToken,
             int impersonationLevel,
             ref IntPtr hNewToken);
         [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
         public static extern bool RevertToSelf();
         [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
         public static extern bool CloseHandle(IntPtr handle);
         private WindowsImpersonationContext impersonationContext;
         public bool impersonateValidUser(String userName, String domain, String password)
         {
             WindowsIdentity tempWindowsIdentity;
             IntPtr token = IntPtr.Zero;
             IntPtr tokenDuplicate = IntPtr.Zero;
             if (RevertToSelf())
             {
                 if (LogonUser(userName, domain, password, LOGON32_LOGON_NEW_CREDENTIALS,
                    LOGON32_PROVIDER_DEFAULT, ref token) != 0)
                 {
                     if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
                     {
                         tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
                         impersonationContext = tempWindowsIdentity.Impersonate();
                         if (true)
                         {
                             AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
                             IPrincipal pr = System.Threading.Thread.CurrentPrincipal;
                             IIdentity id = pr.Identity;
                             CloseHandle(token);
                             CloseHandle(tokenDuplicate);
                             return true;
                         }
                     }
                 }
             }
             if (token != IntPtr.Zero)
                 CloseHandle(token);
             if (tokenDuplicate != IntPtr.Zero)
                 CloseHandle(tokenDuplicate);
             return false;
         }
         public void undoImpersonation()
         {
             impersonationContext.Undo();
         }
------解决方案--------------------
帮顶.