権限昇格したプログラムからネットワークドライブが参照できない
UACが導入されて以降、権限昇格したプログラムからネットワークドライブが参照できなくて困ったことが何度かあります。
マシンを入れ替えるたびにあれ、なんだっけとなっていたのでメモとして残しておきます。
そもそも
Some Programs Cannot Access Network Locations When UAC Is Enabled
Linkを読むのが早いですが、簡単には以下のようです。
* ユーザーのトークンに「フィルタ済みトークン」と「フルトークン」なるものがある。
* 通常は「フィルタ済みトークン」が使われているので、ネットワーク共有のマッピングもこちらに割り当てられている。
* UACで権限昇格した際には「フルトークン」がアプリに渡される。
* 「フルトークン」にはネットワーク共有のマッピングが割り当たっていない。
こんな理由で、ネットワークドライブが見えないといったことが起こるようです。
(参考)
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); var principal = (WindowsPrincipal)Thread.CurrentPrincipal;
principalの中身を見れば、違いが分かります。
解決法
レジストリをいじってあげればよさそうです。
上記、Linkにも書いてある通りです。
要再起動。
再現
通常に起動した状態。ネットワークドライブが見える。
管理者実行した状態。ネットワークドライブ見えない。
EnableLinkedConnectionsを1にして、管理者実行。
見える、見えるぞ!