読者です 読者をやめる 読者になる 読者になる

ぽにょろん

思いついたこととメモ

権限昇格したプログラムからネットワークドライブが参照できない

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. 通常に起動した状態。ネットワークドライブが見える。
    f:id:kowill:20150805075359p:plain

  2. 管理者実行した状態。ネットワークドライブ見えない。
    f:id:kowill:20150805075402p:plain

  3. EnableLinkedConnectionsを1にして、管理者実行。
    見える、見えるぞ! f:id:kowill:20150805075404p:plain