UACが利用されている環境でコマンドプロンプトを管理者権限で起動した場合、マップしたはずのネットワークドライブへアクセスできないことがある。これはUACによるセキュリティ機能が働いているためだ。このような場合の対処方法は?
対象OS:Windows Vista/Windows 7/Windows 8/Windows 8.1/Windows Server 2008/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2
リモートのサーバー上の共有フォルダーにアクセスする場合、アクセスしやすくするためにUNCをドライブ名にマップして利用することがある。特にコマンドプロンプト上で作業する場合は、何らかのドライブ名にマップしておかないとパス名が長くなって面倒だし、UNC形式のまま指定するとエラーが生じるコマンドもあるからだ。
マップされたドライブをコマンドプロンプト上で利用する場合、通常のコマンドプロンプトでは正しく利用できるが、UACによる管理者権限で起動したコマンドプロンプト上ではエラーとなって接続できないことがある(コマンドプロンプトを管理者権限で実行させる方法は関連記事参照)。例えば以下は、UACが有効なWindows 7上で、通常のコマンドプロンプトと、UACによって昇格した管理者権限のコマンドプロンプト上で同じ操作を行ったところである。
管理者権限のコマンドプロンプトでは、マップしたドライブ名は見えているものの、アクセスしようとしてもエラーとなっている。コマンドプロンプト以外でも、UACによって昇格したアプリケーションやインストーラー、ログオンスクリプトなど、いくつかのケースでマップしているはずのドライブ名にアクセスできない症状が発生することがある。
このような現象が起こるのは、通常のコマンドプロンプトやアプリケーションなどのプロセスとUACによって昇格されたプロセス(正確には通常のユーザーセッションと、昇格されたユーザーセッション)では異なる権限を持ち、それが引き継がれないためである。
本TIPSではこの現象を回避する方法を紹介する。
UACによって昇格されたコマンドプロンプトなどでマップされたネットワークドライブにアクセスできるようにするには、いくつか方法がある。もちろんUACを無効にするという方法もあるが、システムの安全性が著しく損なわれるので避けるべきである。
マップされたドライブ名ではアクセスできないが、そのマップした元のUNCによる表記ならそのまま利用できる。バッチファイルなどを使っている場合は、ドライブ名表記をUNCによる表記に変更するとよい。
※Windows 7での実行例
C:\Windows\system32>dir p:hiro* ……P:ドライブにアクセスしてみる
指定されたパスが見つかりません。 ……エラーになる
C:\Windows\system32>net use p: ……P:のマップ先を調べる
ローカル名 p:
リモート名 \\SERVER1\usr ……マップ先のUNC表記
リソースの種類 Disk
コマンドは正常に終了しました。
C:\Windows\system32>dir \\server1\usr\hiro* ……UNCでアクセスしてみる
ドライブ \\server1\usr のボリューム ラベルは User です
ボリューム シリアル番号は 2075-AED1 です
\\server1\usr のディレクトリ
2015/02/19 12:02 <DIR> hiroy ……正しくアクセスできた
0 個のファイル 0 バイト
1 個のディレクトリ 495,443,570,688 バイトの空き領域
C:\Windows\system32>
直接ローカルドライブ名を使うことはできないが、net useコマンドでもう一度同じドライブ名にマップし直してから使ってもよい。
※Windows 7での実行例
C:\Windows\system32>dir p:hiro* ……P:ドライブにアクセスしてみる
指定されたパスが見つかりません。 ……エラーになる
C:\Windows\system32>net use p: \\server1\usr ……同じドライブ名とUNCで再マップしてみる
コマンドは正常に終了しました。 ……マップできた
C:\Windows\system32>dir p:hiro* ……再マップしたドライブ名でアクセスしてみる
ドライブ P のボリューム ラベルは User です
ボリューム シリアル番号は 2075-AED1 です
P:\ のディレクトリ
2015/02/19 12:02 <DIR> hiroy ……正しくアクセスできた
0 個のファイル 0 バイト
1 個のディレクトリ 495,443,570,688 バイトの空き領域
C:\Windows\system32>net use ……マップの状態を確認する
新しい接続は記憶されます。
ステータス ローカル名 リモート名 ネットワーク名
--------------------------------------------------------
OK P: \\server1\usr Microsoft Windows Network ……再マップされ、ステータスがOKになっている
利用不可 Q: \\SERVER1\pub Microsoft Windows Network ……他のドライブはまだ利用不可のまま。
利用不可 R: \\SERVER1\prj Microsoft Windows Network
利用不可 X: \\HVSERVER2\D Microsoft Windows Network
コマンドは正常に終了しました。
C:\Windows\system32>
※注:Windows 8/8.1/Windows Server 2012/Windows Server 2012 R2の「net use」コマンドでは、「ステータス」が「利用不可」になっているドライブの情報は表示されない。だが「net use p:」のようにすれば、個別のドライブの情報を確認することはできる。
net useコマンドを使わずとも、例えば管理者権限のコマンドプロンプトからメモ帳を起動してファイルの「開く」ダイアログを表示させ、そこでマップされたドライブ名をダブルクリックして自動マウントしてもよい。
いったん再マップされたら、以後はログアウト(サインアウト)しない限り、このコマンドプロンプトだけでなく、昇格した他のコマンドプロンプトやアプリケーションからでもローカルドライブ名でアクセスできるようになる。
「EnableLinkedConnections」というレジストリ値を設定すると、通常権限でアクセスしていたドライブの接続情報が管理者権限で起動したプロンプト(セッション)にも引き継がれ、どちらのコマンドプロンプト(プロセス)でも同じようにアクセスできるようになる。
ただしこのような設定変更は、意図しないプログラムなどにネットワークドライブへの無制限なアクセスを許すことになり、UACによるセキュリティメカニズムを無意味にしかねない。その意味や影響を十分理解して利用していただきたい。
[注意]
レジストリに不正な値を書き込んでしまうと、システムに重大な障害を及ぼし、最悪の場合、システムの再インストールを余儀なくされることもあります。レジストリエディターの操作は慎重に行うとともに、あくまで御自分のリスクで設定を行ってください。何らかの障害が発生した場合でも、本Windows Server Insider編集部では責任を負いかねます。ご了承ください。
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINE\の SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System |
値の名前 | EnableLinkedConnections(新規作成する) |
型 | REG_DWORD |
値の内容 | 1 |
昇格したコマンドプロンプトなどでマップされたドライブを有効にするための設定 注:Windows 8/Windows Server 2012の場合は、サポート技術情報「Windows 8 へ EnableLinkedConnections を正しく構成できない」の更新プログラムか、最新のWindows Updateを適用しておくこと。 |
この値を設定後、いったんシステムを再起動する。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.