映射驱动器并以编程方式从另一个进程访问它(作为另一个用户)

时间:2016-02-05 16:15:23

标签: .net vb.net kiosk

我需要启动两个进程,第一个映射驱动器(在我的情况下为homedrive),第二个启动将访问该驱动器的应用程序(例如记事本)。该机器是使用具有最小权限的信息亭用户登录的信息亭机器,因此这些过程需要作为不同的用户运行(当用户访问机器时,他们获得获取其凭证的winforms表单)。我第一次接触这个的方法是用Process.Start启动两个进程,第一个运行“net”并传递“使用H:\ homedrive / persistent:no”以映射其驱动器,第二个运行“notepad”这两个都提供了凭据,并将useshellexecute设置为false。这样做的问题是每个进程似乎是分开的,并且无法从记事本进程访问驱动器。

我的解决方案是从一个Process.Start调用启动这两个进程,此解决方案启动“cmd”并传递“/ c net use H:\ homedrive / persistent:no& notepad”。这完全符合希望,并且可以从记事本访问homedrive,完美。除了命令提示符在后台保持打开这一事实外,我尝试将窗口样式更改为隐藏或最小化,但是在一些Google搜索后似乎如果您以不同的用户身份运行,那么这是不可能的。

还有其他人遇到类似的东西吗?

1 个答案:

答案 0 :(得分:0)

听起来像模仿函数会起作用,应用程序将作为当前用户运行,但将其凭据用于特定的一个任务;然后返回当前用户。

完整信息位于https://msdn.microsoft.com/en-us/library/w070t6ka(v=vs.110).aspx 短版

Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal un As String, ByVal domain As String, ByVal pw As String, ByVal LogonType As Integer, ByVal LogonProvider As Integer, ByRef Token As IntPtr) As Boolean
Public Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal handle As IntPtr) As Boolean
Dim tokenHandle As New IntPtr(0)
Dim strUserID, strPW as string