Windows 10 - 無限ジャンクション解消

Windows 10でディレクトリーを再帰的に辿るプログラムを動かしたところ、正常に動かないことが判明。
グーグル先生で調べたところ、行き着いたのは、「[Windows 7]無限ジャンクション解消」。
本来は辿れないはずのジャンクションが辿れてしまって無限ループになってしまうということのようだ。

「[Windows 7]無限ジャンクション解消」による解決法は次の通り。

まずいまのジャンクションを削除して

RD "Application Data"
RD "Cookies"
RD "Local Settings"
RD "My Documents"
RD "NetHood"
RD "PrintHood"
RD "Recent"
RD "SendTo"
RD "Templates"
RD "スタート メニュー"
RD "AppData\Local\Application Data"
RD "AppData\Local\History"
RD "AppData\Local\Temporary Internet Files"
RD "AppData\Roaming\Microsoft\Windows\Start Menu\プログラム"
RD "Documents\My Music"
RD "Documents\My Pictures"
RD "Documents\My Videos"

新たにジャンクション張り直す

mklink /j "Application Data" "AppData\Roaming"
mklink /j "Cookies" "AppData\Roaming\Microsoft\Windows\Cookies"
mklink /j "Local Settings" "AppData\Local"
mklink /j "My Documents" "Documents"
mklink /j "NetHood" "AppData\Roaming\Microsoft\Windows\Network Shortcuts"
mklink /j "PrintHood" "AppData\Roaming\Microsoft\Windows\Printer Shortcuts"
mklink /j "Recent" "AppData\Roaming\Microsoft\Windows\Recent"
mklink /j "SendTo" "AppData\Roaming\Microsoft\Windows\SendTo"
mklink /j "Templates" "AppData\Roaming\Microsoft\Windows\Templates"
mklink /j "スタート メニュー" "AppData\Roaming\Microsoft\Windows\Start Menu"
mklink /j "AppData\Local\Application Data" "AppData\Local"
mklink /j "AppData\Local\History" "AppData\Local\Microsoft\Windows\History"
mklink /j "AppData\Local\Temporary Internet Files" "AppData\Local\Microsoft\Windows\Temporary Internet Files"
mklink /j "AppData\Roaming\Microsoft\Windows\Start Menu\プログラム" "AppData\Roaming\Microsoft\Windows\Start Menu\Programs"
mklink /j "Documents\My Music" "Music"
mklink /j "Documents\My Pictures" "Pictures"
mklink /j "Documents\My Videos" "Videos"

ジャンクションにはシステム属性と不可視属性がついてたので、付け直す

attrib +S +H "Application Data" /L
attrib +S +H "Cookies" /L
attrib +S +H "Local Settings" /L
attrib +S +H "My Documents" /L
attrib +S +H "NetHood" /L
attrib +S +H "PrintHood" /L
attrib +S +H "Recent" /L
attrib +S +H "SendTo" /L
attrib +S +H "Templates" /L
attrib +S +H "スタート メニュー" /L
attrib +S +H "AppData\Local\Application Data" /L
attrib +S +H "AppData\Local\History" /L
attrib +S +H "AppData\Local\Temporary Internet Files" /L
attrib +S +H "AppData\Roaming\Microsoft\Windows\Start Menu\プログラム" /L
attrib +S +H "Documents\My Music" /L
attrib +S +H "Documents\My Pictures" /L
attrib +S +H "Documents\My Videos" /L

(略)

正常なユーザープロファイルだと、これらのジャンクションへのアクセスが不許可に設定されている!!

(略)

このアクセス制御リストもコマンドラインから一括で設定する

icacls "Application Data" /l /deny Everyone:(S,RD)
icacls "Cookies" /l /deny Everyone:(S,RD)
icacls "Local Settings" /l /deny Everyone:(S,RD)
icacls "My Documents" /l /deny Everyone:(S,RD)
icacls "NetHood" /l /deny Everyone:(S,RD)
icacls "PrintHood" /l /deny Everyone:(S,RD)
icacls "Recent" /l /deny Everyone:(S,RD)
icacls "SendTo" /l /deny Everyone:(S,RD)
icacls "Templates" /l /deny Everyone:(S,RD)
icacls "スタート メニュー" /l /deny Everyone:(S,RD)
icacls "AppData\Local\Application Data" /l /deny Everyone:(S,RD)
icacls "AppData\Local\History" /l /deny Everyone:(S,RD)
icacls "AppData\Local\Temporary Internet Files" /l /deny Everyone:(S,RD)
icacls "AppData\Roaming\Microsoft\Windows\Start Menu\プログラム" /l /deny Everyone:(S,RD)
icacls "Documents\My Music" /l /deny Everyone:(S,RD)
icacls "Documents\My Pictures" /l /deny Everyone:(S,RD)
icacls "Documents\My Videos" /l /deny Everyone:(S,RD)

これで正常に動くようになったのだが、よく見てみるとなんか違う。

正しい場合:

2017/02/28  20:19    <JUNCTION>     Application Data [C:\Users\XXX\AppData\Roaming]

上の手順で作成した場合:

2017/02/28  20:19    <JUNCTION>     Application Data [..]

icaclsを上手に使うと直せるのかもしれないが、やり方がわからなかった。

で、結局どうやったかというと、正しい設定のものを用意して、その設定をコピーするというのでやってみた。
具体的には、まず正しい設定のものを用意するために、一時的にユーザーを作成。
次にそのユーザーでログインし、

cd %HOMEPATH%
icacls "Application data" /save \temp\a.bin
icacls "Cookies" /save \temp\b.bin
icacls "Local Settings" /save \temp\c.bin
icacls "My Documents" /save \temp\d.bin
icacls "NetHood" /save \temp\e.bin
icacls "PrintHood" /save \temp\f.bin
icacls "Recent" /save \temp\g.bin
icacls "SendTo" /save \temp\h.bin
icacls "Templates" /save \temp\i.bin
icacls "スタート メニュー" /save \temp\j.bin
icacls "AppData\Local\Application Data" /save \temp\k.bin
icacls "AppData\Local\History" /save \temp\l.bin
icacls "AppData\Local\Temporary Internet Files" /save \temp\m.bin
icacls "AppData\Local\Microsoft\Windows\Temporary Internet Files" /save \temp\n.bin
icacls "AppData\Roaming\Microsoft\Windows\Start Menu\プログラム" /save \temp\o.bin
icacls "Documents\My Music" /save \temp\p.bin
icacls "Documents\My Pictures" /save \temp\q.bin
icacls "Documents\My Videos" /save \temp\r.bin

次に修正したい方のユーザーでログインして、

cd %HOMEPATH%
icacls . /restore \temp\a.bin
icacls . /restore \temp\b.bin
icacls . /restore \temp\c.bin
icacls . /restore \temp\d.bin
icacls . /restore \temp\e.bin
icacls . /restore \temp\f.bin
icacls . /restore \temp\g.bin
icacls . /restore \temp\h.bin
icacls . /restore \temp\i.bin
icacls . /restore \temp\j.bin
icacls "AppData\Local" /restore \temp\k.bin
icacls "AppData\Local" /restore \temp\l.bin
icacls "AppData\Local" /restore \temp\m.bin
icacls "AppData\Local\Microsoft\Windows" /restore \temp\n.bin
icacls "AppData\Roaming\Microsoft\Windows\Start Menu" /restore \temp\o.bin
icacls "Documents" /restore \temp\p.bin
icacls "Documents" /restore \temp\q.bin
icacls "Documents" /restore \temp\r.bin

一応はこれで問題は起こらないし見た目も同じようなのだが。
ダサい…… ダサすぎる……

【おまけ】
たぶん、

mklink /j "AppData\Local\Application Data" "AppData\Local"

が無限ループの原因だったのかな。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください