因此,在这两台机器之间,没有信任--它们属于不同的领域。
我已经使用登录类型LOGON32_LOGON_NEW_CREDENTIALS使用LOGON32_LOGON_NEW_CREDENTIALS API成功地连接到远程计算机。我能够使用UNC共享检索目录的内容,并创建一个文件流来“下载”该文件。到目前一切尚好。
唯一的问题是,如果没有已经打开的会话,LogonUser就会失败。让我澄清这一点。
我发现ASP.NET MVC页面今天上午无法工作,特别是使用LogonUser从远程计算机检索文件列表的页面。我查看日志,并在堆栈跟踪中看到,System.IO.__Error.WinIOError在Directory.GetFiles调用之上。然后,我远程进入web服务器,并试图使用网站使用的相同登录/密码打开资源管理器中的远程文件夹。它通过了我可以看到文件。我打开了命令提示符,输入了net,我看到了与远程计算机的打开连接。然后我又回到了页面上,突然,页面又开始工作了。
因此,在这一点上,我不确定LogonUser是否如预期的那样工作。如果呼叫要求先以其他方式打开网络连接,那么这肯定是不令人满意的。
有人知道可能会发生什么事或提出解决办法吗?
发布于 2010-05-26 21:45:19
我不确定我是否理解为什么要使用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)函数。该函数将使远程登录在目标计算机上,并建立一个新的会话(确切地说是net use \\computer\share /u:domain\user password所做的)。您不能映射到本地驱动器的新连接。要做到这一点,您应该在struct lpLocalName中使用NULL填充NETRESOURCE。作为一个lpUsername和lpPassword,您应该给出任何理解目标计算机的值。您还可以使用ipc$作为目标共享名称,然后只需建立计算机会话,仅此而已。之后,您可以使用任何其他函数访问远程共享、目录或文件。若要关闭会话,应使用WNetCancelConnection2或NetUseDel。
https://stackoverflow.com/questions/2916359
复制相似问题