从另一个用户访问服务的网络共享

时间:2015-10-02 16:46:44

标签: c++ windows winapi service network-shares

我有一个服务,它位于一个非常有限的服务器系统中。它必须在特定用户下运行,我们称之为用户A.

该服务还必须能够访问用户A无权访问的网络共享,但用户B具有。因此,服务必须以用户A身份访问此网络共享,同时以用户A身份运行。

如果在计算机上本地运行,我将这样做的方法是在不同的用户下映射网络驱动器。但是服务无法访问映射的网络驱动器,即使它是在同一用户下映射的:

Services and Redirected Drives

有没有人建议我能做些什么?我是该服务的创建者,所以我可以随意修改它。有没有办法让它通过winapi调用(非托管C ++)作为另一个用户访问网络共享?

2 个答案:

答案 0 :(得分:0)

我认为这个SO帖子可能实际上是我正在寻找的答案: Access to a protected network share using Win32 C++

除非有人有更好的想法或其他异议?

答案 1 :(得分:0)

您链接的文章说:

  

相反,该服务应使用客户端模拟来模拟用户。

在此上下文中,这意味着使用LogonUserImpersonateLoggedOnUser

一个警告:只有在您所在的域中才会起作用,即您要登录网络服务器的帐户在本地计算机上也有效。如果没有,那么您将必须使用WNetAddConnection2或类似的方式明确建立网络连接。从技术上讲,这可能会暴露与其他服务的联系,但在大多数情况下风险很小。