Is there a way to authenticate as a local (not network) user to copy files over the network to .Net?
net use not an option, and I cannot get LogonUser to work.
Any ideas?
[Change] Here is the code:
public class UserImpersonator : IDisposable { private WindowsImpersonationContext _impersonationContext; private IntPtr _userHandle = IntPtr.Zero; [DllImport("advapi32.dll", SetLastError = true)] private static extern bool LogonUser( string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken ); [DllImport("kernel32.dll", SetLastError = true)] private static extern bool CloseHandle(IntPtr hHandle); public UserImpersonator(string username, string password) { LogonUser(username, "", password, (int)LogonType.LOGON32_LOGON_NETWORK, (int)LogonProvider.LOGON32_PROVIDER_DEFAULT, out _userHandle); _impersonationContext = WindowsIdentity.Impersonate(_userHandle); } public void Dispose() { CloseHandle(_userHandle); _impersonationContext.Undo(); } private enum LogonType : int { LOGON32_LOGON_INTERACTIVE = 2, LOGON32_LOGON_NETWORK = 3, LOGON32_LOGON_BATCH = 4, LOGON32_LOGON_SERVICE = 5, LOGON32_LOGON_UNLOCK = 7, LOGON32_LOGON_NETWORK_CLEARTEXT = 8, LOGON32_LOGON_NEW_CREDENTIALS = 9, } private enum LogonProvider { LOGON32_PROVIDER_DEFAULT = 0, } }
When I complete the File.Copy operation in using(new UserImpersonator(username, password)) , I get:
System.IO.IOException: Login failed: Unknown username or invalid password.
If, however, I first try to connect to a shared resource in Explorer (by entering authentication information when it requests it), File.Copy works. It seems that the above code does nothing.
BlueRaja - Danny Pflughoeft
source share