C#模拟始终返回false
我尝试连接到另一台机器,使用LogonUser方法将文件保存到它。这是我的代码:C#模拟始终返回false,c#,impersonation,C#,Impersonation,我尝试连接到另一台机器,使用LogonUser方法将文件保存到它。这是我的代码: public class ImpersonationHelper { [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPas
public class ImpersonationHelper
{
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
enum LogonType
{
Interactive = 2,
Network = 3,
Batch = 4,
Service = 5,
Unlock = 7,
NetworkClearText = 8,
NewCredentials = 9
}
enum LogonProvider
{
Default = 0,
WinNT35 = 1,
WinNT40 = 2,
WinNT50 = 3
}
public IntPtr Login(string username,string password)
{
// machineIp
string domain = "XXX.XX.XX.XX";
int logonType = (int)LogonType.Network;
int logonProvider = (int)LogonProvider.WinNT50;
IntPtr tokenHandle = IntPtr.Zero;
bool returnValue = LogonUser(username, domain, password, logonType, logonProvider, ref tokenHandle);
if (!returnValue)
{
int nErrorCode = Marshal.GetLastWin32Error();
throw new System.ComponentModel.Win32Exception(nErrorCode);
}
return tokenHandle;
}
}
LogonUser的返回值始终为false,Marshal.GetLastWin32Error()的值有时为0(表示“操作已成功完成”),然后为1326(表示“用户名或密码不正确”)。我的错误是什么?域不应该保留机器名而不是IP地址吗?使用错误的参数是明显的故障模式。您首先必须尝试使用资源管理器登录到计算机。只要这不起作用,你就不可能在代码中实现它。向管理该机器的人寻求帮助。
domain
不应该保留机器名称而不是IP地址吗?使用错误的参数是明显的故障模式。您首先必须尝试使用资源管理器登录到计算机。只要这不起作用,你就不可能在代码中实现它。向管理那台机器的人寻求帮助。