Copy file to remote computer using remote admin credentials

前端 未结 2 1631
温柔的废话
温柔的废话 2020-11-30 07:11

I am using C#...

I need the ability to copy a set of files to about 500 unique computers. I have successfully been able to use the LogonUser() method to impersonate

相关标签:
2条回答
  • 2020-11-30 07:29

    Correct me if I'm wrong, but you can use LogonUser to impersonate a local group also not only domain accounts.

    From the net:

    Imports System 
    Imports System.Runtime.InteropServices 
    Imports System.Security.Principal 
    Imports System.Security.Permissions 
    Public Class Form1 
        <DllImport("advapi32.DLL", SetLastError:=True)> _ 
        Public Shared Function LogonUser(ByVal lpszUsername As String, ByVal lpszDomain As String, _ 
            ByVal lpszPassword As String, ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, _ 
            ByRef phToken As IntPtr) As Integer 
        End Function 
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
            Dim admin_token As IntPtr 
            Dim wid_current As WindowsIdentity = WindowsIdentity.GetCurrent() 
            Dim wid_admin As WindowsIdentity = Nothing 
            Dim wic As WindowsImpersonationContext = Nothing 
            Try 
                MessageBox.Show("Copying file...") 
                If LogonUser("Local Admin name", "Local computer name", "pwd", 9, 0, admin_token) <> 0 Then 
                    wid_admin = New WindowsIdentity(admin_token) 
                    wic = wid_admin.Impersonate() 
                    System.IO.File.Copy("C:\right.bmp", "\\157.60.113.28\testnew\right.bmp", True) 
                    MessageBox.Show("Copy succeeded") 
                Else 
                    MessageBox.Show("Copy Failed") 
                End If 
            Catch se As System.Exception 
                Dim ret As Integer = Marshal.GetLastWin32Error() 
                MessageBox.Show(ret.ToString(), "Error code: " + ret.ToString()) 
                MessageBox.Show(se.Message) 
            Finally 
                If wic IsNot Nothing Then 
                    wic.Undo() 
                End If 
            End Try 
        End Sub 
    End Class 
    
    0 讨论(0)
  • 2020-11-30 07:29

    WNetAddConnection2 will do the trick. Just use an empty string for the local device name, to avoid mapping a drive. You also want to make sure and close the connection when you're done. I wrap it into a NetworkConnection class that implements IDisposable.

    0 讨论(0)
提交回复
热议问题