c# - LogonUser 调用 - 用户是否需要该机器的登录权限?

标签 c# window webserver pinvoke

我很难找到有关此方法的大量信息,所以我想我应该在这里问问,看看你们这些优秀的人是否可以提供帮助。

我们基本上拥有的是......

[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());
}

写这篇文章的人已经不在了,所以我想弄清楚完成这项工作需要什么。我的假设是 logonUser 方法只是模拟从该 Web 服务器登录到网络的给定登录信息......然后在 Impersonate 之后完成的任何后续调用都将完成,就好像该用户正在执行它们而不是登录到 Web 的任何人服务器。正确吗?

我们从 throw 行中得到一个错误,如下所示:

87 Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Exception: 87

最佳答案

简短回答:您是对的,您需要 WRM/WSM 在远程计算机上执行与上述代码相同的操作。

有关您在上面尝试使用的 API 的更多详细信息:http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184%28v=vs.85%29.aspx

“...您不能使用 LogonUser 登录到远程计算机...” 和 “如果 (...) 成功,您将收到代表登录用户的 token 句柄。然后您可以使用此 token 句柄来模拟 (...)”


要测试远程系统上的文件是否存在(也许稍后读取它?),我建议共享该文件或它包含的文件夹,或使用服务器-客户端连接(例如套接字)。

解决问题的复杂方法是​​使用 Windows 远程管理。你可以在这里找到一个很好的起点: http://msdn.microsoft.com/en-us/library/windows/desktop/aa384423%28v=vs.85%29.aspx

希望这对您有所帮助!

关于c# - LogonUser 调用 - 用户是否需要该机器的登录权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16104602/

相关文章:

javascript - 防止在 JavaScript 中冒泡和捕获时触发事件

javascript - 为什么比较两个窗口的 ".constructor"属性不可靠?

Node.js http 代理负载均衡

c# - Windows 关闭时触发应用程序退出

c# - 如何使用 ToolTipService.Duration 使 WPF ToolTip 显示得更快?

c# - 如何使用 HTTPclient 内容类型进行 POST = application/x-www-form-urlencoded

mono - 以单声道截取事件窗口的屏幕截图

c# - Golang 使用 AES 加密数据

reactjs - 刷新 react 应用程序,404 错误。 react 路由器问题

java - 如何停止 Web 服务器中的线程