我很难找到有关这种方法的大量信息,所以我想我会在这里问一下,看看你们这些优秀的人是否可以提供帮助。
我们基本上拥有的是这个......
[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
if (LogonUser(AdminDevUser,
AdminDevDomain,
AdminDevPassword,
8, // LOGON32_LOGON_NETWORK_CLEARTEXT
0, // LOGON32_PROVIDER_DEFAULT
out token))
{
wi = new WindowsIdentity(token);
WindowsImpersonationContext wic = wi.Impersonate();
blnFileExists = File.Exists(strFileName);
wic.Undo();
CloseHandle(token);
return blnFileExists;
}
else
{
throw new Exception(Marshal.GetLastWin32Error().ToString());
//Console.WriteLine("LogonUser() failed with error code " + Marshal.GetLastWin32Error());
}
写这篇文章的人已经不在了,所以我试图弄清楚需要什么来完成这项工作。我的假设是 loginUser 方法只是模拟从该 Web 服务器登录到网络的给定登录信息......然后在 Impersonate 之后完成的任何后续调用都将完成,就好像该用户正在执行它们而不是登录到网络的任何人一样服务器。正确的?
我们从 throw 行中得到一个错误,如下所示:
87 说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.Exception:87