如何在 Windows 7 中从提升的进程访问网络共享?

如何在 Windows 7 中从提升的进程访问网络共享?

将 UAC 设置为默认级别,在 Windows 7 中无法从管理命令提示符或任何其他提升的进程访问映射的网络文件夹。

这会导致不必要的错误,例如,当尝试导入位于网络共享上的 *.reg 文件时。接受 UAC 提示后,双击会导致以下相当令人困惑的错误消息:

无法导入 M:\sharename\settings.reg:打开文件时出错。可能存在磁盘或文件系统错误。

在高海拔运行时,是否可以让已映射的网络共享也可用?或者有解决该行为的方法吗?

更新:我知道打开管理命令提示符并使用安装驱动器是可行的net use。这使共享可供所有提升的进程使用;但是,这样做不是持久的,需要在每次登录后重复。

答案1

简而言之,不行。目前不支持将当前映射/身份验证的网络资源集从非提升上下文复制到提升上下文。无论出于何种目的,它们都是单独的登录名,您恰好能够从同一控制台进行交互。能够在提升和非提升进程之间进行通信会破坏将它们分开的整个安全目的。

但是,如果这些网络驱动器是使用您的用户帐户的凭据(而不是单独的登录名/密码)安装的,您可以尝试使用 UNC 路径而不是实际的驱动器映射来访问它们。

答案2

它不受支持,但您可以在注册表中设置 EnableLinkedConnections 来实现这一点。请参阅http://support.microsoft.com/kb/937624

尽管微软表示这“可能会使您的系统不安全”,但我们仍在等待有关此问题的详细信息: http://social.technet.microsoft.com/Forums/en/w7itprosecurity/thread/25cb7824-2a8d-4dbd-b802-1c64bed3a5e0?prof=required

答案3

我编写了一个简单的 VBScript,它将当前会话中映射的驱动器再次映射到提升的管理员会话中。运行脚本后,映射的驱动器可供所有提升的进程使用。如果当前用户已经是本地管理员,则此方法有效:

Option Explicit
Dim objNetwork, objShell
Dim strDriveLetter, strNetworkPath
Dim colDrives, intDrive, strDrives


If WScript.Arguments.length =0 Then
    Set objNetwork = CreateObject("WScript.Network")
    Set colDrives = objNetwork.EnumNetworkDrives

    For intDrive = 0 To (colDrives.Count -1) Step 2
        WScript.Echo colDrives.Item(intDrive) & " is mapped to: " & colDrives.Item(intDrive + 1)
        If Len(strDrives) > 0 Then strDrives = strDrives & " "
        strDrives = strDrives & " " & Chr(34) & colDrives.Item(intDrive) & Chr(34) &  " " & Chr(34) & colDrives.Item(intDrive + 1) & Chr(34) 
    Next

  If Len(strDrives) > 0 Then
      ' re-call script with elevation
      Set objShell = CreateObject("Shell.Application")
      objShell.ShellExecute "cscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & strDrives, "", "runas", 1
    Else
        WScript.Echo "No drives Mapped."
    End If

Else
  ' elevated part
  Set objNetwork = CreateObject("WScript.Network")

  For intDrive = 0 To (WScript.Arguments.Count - 1) Step 2
        WScript.Echo WScript.Arguments(intDrive) & " is mapped to: " & WScript.Arguments(intDrive + 1)
        On Error Resume Next ' ignore already mapped drives
        objNetwork.MapNetworkDrive WScript.Arguments(intDrive), WScript.Arguments(intDrive + 1)
        On Error GoTo 0
    Next

End If

答案4

在 Windows 7(企业 PC)上,''EnableLinkedConnections'' 注册表设置对我来说从来都不起作用。尝试了多种方法,但都无济于事。

它尝试过0xA3 中的脚本,运行完美。 感谢那。

要自动运行它,只需将脚本写入文件(如 remount-admin.vbs),然后将该文件保存在 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 中。

相关内容