Có cách nào để xác thực là người dùng cục bộ (không phải mạng) để sao chép tệp qua mạng trong .Net không?Sao chép tệp qua mạng (yêu cầu xác thực)
net use
không phải là tùy chọn và tôi dường như không thể nhận được LogonUser để hoạt động.
Bất kỳ ý tưởng nào?
[Chỉnh sửa] Dưới đây là một số mã:
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,
}
}
Khi tôi quấn hoạt động File.Copy
trong using(new UserImpersonator(username, password))
, tôi nhận được:
System.IO.IOException: Đăng nhập thất bại : tên người dùng hoặc mật khẩu không xác định.
Nếu trước tiên, tôi cố gắng kết nối với phần chia sẻ trong trình khám phá (nhập thông tin xác thực khi nó yêu cầu), File.Copy
hoạt động. Có vẻ như mã trên không làm gì cả.
Hoạt động hoàn hảo mà không cần phải biết tên máy tính - cảm ơn bạn! –