web-dev-qa-db-ja.com

Windows 7の昇格されたプロセスからネットワーク共有にアクセスするにはどうすればよいですか?

UACがデフォルトレベルに設定されている場合、Windows 7では、管理コマンドプロンプトまたはその他の昇格されたプロセスからマップされたネットワークフォルダーにアクセスすることはできません。

これにより、不要なエラーが発生します。ネットワーク共有にある* .regファイルをインポートしようとしたとき。ダブルクリックすると、UACプロンプトを受け入れた後、次のようなやや紛らわしいエラーメッセージが表示されます。

M:\ sharename\settings.regをインポートできません:ファイルを開くときにエラーが発生しました。ディスクまたはファイルシステムにエラーがある可能性があります。

昇格で実行しているときに、すでにマップされているネットワーク共有も利用できるようにすることは可能ですか?または、その動作の回避策はありますか?

更新:管理コマンドプロンプトを開き、Net Useを使用してドライブをマウントすることができます。これにより、すべての昇格されたプロセスで共有を利用できるようになります。ただし、これは永続的なものではなく、ログオンするたびに繰り返す必要があります。

5
0xA3

要するに、いいえ。マップ/認証されたネットワークリソースの現在のセットを、昇格されていないコンテキストから昇格されたコンテキストにコピーするためのサポートされている方法はありません。すべての意図と目的のために、それらはあなたがたまたま同じコンソールから対話することができる別々のログインです。昇格されたプロセスと昇格されていないプロセスの間で通信できると、それらを分離しておくというセキュリティ目的全体が壊れてしまいます。

ただし、これらのネットワークドライブが(個別のログイン/パスワードではなく)ユーザーアカウントの資格情報を使用してマウントされている場合は、実際のドライブマッピングではなく、UNCパスを使用してアクセスしてみてください。

4
Ryan Bolger

サポートされていませんが、レジストリでEnableLinkedConnectionsを設定してこれを実現できます。 http://support.Microsoft.com/kb/937624 を参照してください

Microsoftは、これにより「システムが安全でなくなる可能性がある」と述べていますが、詳細については、こちらでお待ちしています: http://social.technet.Microsoft.com/Forums/en/w7itprosecurity/thread/25cb7824-2a8d -4dbd-b802-1c64bed3a5e0?prof = required

8
Mr. Bungle

昇格された管理者セッション用に、現在のセッションで再度マップされるドライブをマップする単純な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
2
0xA3

'' EnableLinkedConnections ''レジストリ設定は、Windows 7(企業のPC)では機能しませんでした。役に立たないまで、複数の方法でそれを試しました。

試しましたxA3のスクリプトで、問題なく動作します。それをありがとう。

自動的に実行するには、スクリプトをファイル(remount-admin.vbsなど)に記述し、そのファイルをC:\ ProgramData\Microsoft\Windows\Start Menu\Programs\Startupに保存します。

1
fuujuhi