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

Access network share from service with another user

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

该服务还必须能够访问用户 A 无法访问但用户 B 可以访问的网络共享。因此该服务必须以用户 B 的身份访问此网络共享,而 运行ning 以用户 A 的身份访问。

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

Services and Redirected Drives

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

我认为这 post 可能正是我正在寻找的答案: Access to a protected network share using Win32 C++

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

您 link 的文章说:

Instead, the service should use client impersonation to impersonate the user.

在此上下文中,这意味着使用 LogonUser and ImpersonateLoggedOnUser

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