所以在两台机器之间,没有信任——它们在不同的域中。
我已使用登录类型 LOGON32_LOGON_NEW_CREDENTIALS 使用 LogonUser API 成功连接到远程计算机。我能够使用 UNC 共享检索目录的内容,并创建一个文件流来“下载”该文件。到现在为止还挺好。
唯一的问题是,似乎除非有一个已经打开的 session ,否则 LogonUser 会失败。让我澄清一下。
我发现今天早上 ASP.NET MVC 页面不起作用,特别是使用 LogonUser 从这台远程机器检索文件列表的页面。我查看日志并在堆栈跟踪中看到 Directory.GetFiles 调用上方的 System.IO.__Error.WinIOError。然后我远程进入 Web 服务器并尝试使用与网站相同的登录名/密码在资源管理器中打开远程文件夹。它通过了,我可以看到文件。我打开命令提示符,输入 net use,我看到有一个到远程机器的开放连接。然后我回到页面,突然页面又开始工作了。
因此,在这一点上,我不确定 LogonUser 是否按预期工作。如果调用需要先通过其他方式打开网络连接,那么这肯定不能令人满意。
有谁知道可能会发生什么或建议解决方法?
最佳答案
我不确定我是否理解您为什么使用 LogonUser
.如果您想在 上做一些工作,此功能可以帮助您本地 机器使用另一个用户凭据,但它有助于不与另一台计算机建立远程连接。
如果您想从远程计算机获取一些独立于计算机之间现有信任的信息,您应该使用 WNet 或 Net(网络管理)功能来建立到远程计算机的新连接。所以你应该使用 WNetAddConnection2
(见 http://msdn.microsoft.com/en-us/library/aa385413%28VS.85%29.aspx)或 NetUseAdd
( http://msdn.microsoft.com/en-us/library/aa370645%28VS.85%29.aspx ) 函数。此功能将使 远程登录在目标计算机上并建立一个新 session (正是 net use \\computer\share /u:domain\user password
所做的)。您不能将新连接映射到本地驱动器。为此,您应该填写 lpLocalName
与 NULL
在结构中 NETRESOURCE
.作为 lpUsername
和 lpPassword
您应该给出任何理解目标计算机的值。您也可以使用 ipc$
作为目标共享名称,那么您只需建立与计算机的 session ,仅此而已。之后,您可以使用任何其他功能来访问远程共享、目录或文件。要关闭 session ,您应该使用 WNetCancelConnection2
或 NetUseDel
.
关于winapi - LogonUser 使用 LOGON32_LOGON_NEW_CREDENTIALS 对远程不受信任的域机器起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2916359/