2014-08-28 35 views
0

我正在编写一个程序,它需要能够将单个文件上传到SMB共享文件夹。虽然程序将使用用户指定的凭据运行,但程序可能需要使用不同的凭证访问SMB文件夹,这些凭证已内置到程序中。我可以使用WNetAddConnection2,但这允许用户在文件夹上传时访问共享。我不能只使用标准I/O访问共享,因为我需要使用指定的凭据访问它,而不是通过登录用户的特权访问。将文件上传到SMB共享而不允许用户访问

有没有一种简单的方法可以让我通过WNetAddConnection2net use将单个文件上传到具有指定凭据的SMB共享,​​而不会创建半永久连接。

+0

您可以忽略本地名称,是不是足够? – MSalters 2014-08-29 08:04:03

+0

忽略本地名称会阻止连接在资源管理器中显示,但它仍会显示在“net use”的输出中,并且任何其他进程都以相同用户在同一会话中运行的方式运行。对于OP来说,这可能会或可能不够。 – 2014-08-29 16:15:37

+0

@AndrewMedico是的,事实并非如此。我可以让用户绝对不能访问共享上的文件。如果分享保证只写,这不会是一个问题,但由于这个程序将部署在各种环境中,我不能做出这样的假设。 – 2014-08-29 16:18:06

回答

-1

WNetAddConnection2()旨在将本地名称映射到远程位置,如将UNC路径映射到本地驱动器盘符。您可以简单地忘记该映射并直接访问UNC路径,然后让上传线程通过LogonUser()ImpersonateLoggedOnUser()使用模拟来处理凭证。

否则,您可以将上传逻辑移动到后台服务中,后台服务在自己的帐户中运行,与登录用户分开。

+3

使用'LogonUser'要求备用凭证是运行该软件的主机的有效登录名。 *可能是这种情况,但决不是保证。 – 2014-08-29 00:40:28

+0

@AndrewMedico是对的。在这种情况下,登录不一定在主机上有效。 – 2014-08-29 16:08:45

相关问题