2010-03-23 37 views
1

我想访问远程计算机上的文件(win2k3,10.10.20.30),但我无法理解如何在我的程序中登录到该计算机。是否有任何简单的赢取API,需要网络路径,凭证并返回句柄? 我只想访问\ 10.10.20.30 \ c $ \ test.txt, WNetAddConnection2,WNetAddConnection3有点混乱。任何建议都会有帮助。登录到远程机器和访问网络资源

抱歉不太清楚。我想访问同一网络(LAN)上的计算机。 我想访问不在其他计算机上共享的文件。

+0

抱歉不太清楚。我想访问同一网络(LAN)上的计算机。请忽略所有的角落案例,如vpn,跨网络的计算机等。我想访问的文件不共享。我想给凭据,然后访问。 – rplusg 2010-03-23 08:54:29

+0

您的'C $'语法暗示了特定的解决方案。这是一个管理员份额,即您不能将其用作非管理员。 (作为评论发布,因为它解释了为什么它不简单) – MSalters 2010-03-23 10:16:27

+0

我有管理员凭据。但我不知道如何在程序中使用它们,以便我可以访问在我假设的网络中有效的管理员凭据 – rplusg 2010-03-23 11:15:48

回答

5

如果您拥有管理员权限,该解决方案是相当简单的。 C$管理共享可用。您可以拨打WNetAddConnection2来创建一个指向它的本地驱动器盘符。 NETRESOURCE.dwType = RESOURCETYPE_DISK当然,.lpLocalName = NULL因为你不需要它,.lpRemoteName = _T("\\\\10.10.20.30\\c$")(注意在C字符串中\的转义,它真的从其中的4个开始)。 .lpProvider = NULL - 让Windows找出提供者。

将用户名/密码留空,Windows将使用您当前的用户凭据。如果这些确实是(网络)管理员凭据,那就足够了。

dwFlags应包括CONNECT_TEMPORARY,因为您只对一个文件感兴趣。

但是,我认为(给出足够的凭据),只需调用CreateFile("\\\\10.10.20.30\\c$\\test.txt")并让Windows处理细节就更容易。

+0

非常感谢Msalters,我只是混淆了dwflags的用法。感谢您澄清我的困惑。 – rplusg 2010-03-23 12:26:18

0

正常的C++文件访问函数和库应该按原样工作,只需将完整网络路径放到要放置文件名的文件中,并且您应该可以访问。带有示例代码的好教程:http://www.cplusplus.com/doc/tutorial/files/

如果您遇到错误,请检查您登录的用户是否具有在共享文件夹上设置的文件权限以及共享权限。

+0

抱歉不清楚。我想访问同一网络(LAN)上的计算机。请忽略所有的角落案例,如vpn,跨网络的计算机等。我想访问的文件不共享。我想给凭据,然后访问。 – rplusg 2010-03-23 08:53:52

+0

回答修改 - 希望这是更有帮助 – 2010-03-23 08:57:57

+0

我不问fopen或fclose等文件功能“检查您登录的用户”,我问如何从我们的c + +程序登录到另一台机器访问一些该机器上的文件。并且文件根本不共享。 – rplusg 2010-03-23 09:19:09

-1

使用createprocess代码执行...的mstsc.exe它要处理的事休息...

+0

我不想为那台机器做RDC。我只想访问一个文件。 – rplusg 2010-03-23 11:24:07

+0

我不知道其他方式来访问文件,尤其是不共享... – 2010-03-23 13:17:53