プロファイルの場所を無理矢理変更する
前の日記でプロファイルの場所を変更できると書いたが、実は条件があって、
作成してから一度もログオンしていないユーザのプロファイルの場所は変えられない。


以下が理由。
作成されたユーザアカウントのプロファイルの場所等の情報は、レジストリ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList\
の下に記録されるが、アカウントが作成された時点では記録されず、
初回ログインの時に自動的にレジストリに記録され、ユーザプロファイル用のフォルダが作られる。
レジストリに記録されてなければ当然編集できないので、編集するには一度ログインする必要がある。


ただし、絶対にログインする必要があるかというとそうではなくて、新しいユーザ用の情報を
こちらが勝手にレジストリに書き込むことは可能。


とはいえ適当に書き込んでもうまくいかない。理由はSIDという、ユーザに一意に与えられる数字のせい。
SIDはユーザを識別するための数字で、ユーザアカウントが作成される時点に付けられる。
ユーザのログオン時、Windowsは認証が成功するとそのユーザのSIDと同じ値のキーがレジストリ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList\
にあるかどうか確認し、(S-1-5-21-1236...65543-1034のようなやたら長い値)あればそれを参照し、無ければ新しくキーを作成する。


そこで新しいユーザを作成した時に、新しいユーザに割り当てられるSIDを予測してレジストリに適切な値と共に
新しいユーザ用のユーザプロファイルの場所を追加してやると、新しいユーザの初回ログインの時から
こちらが指定したプロファイルの場所を使用させることができる。
(それだけのためにこんなに手間かける必要があるのか、というツッコミはさておき)


作成した新しいユーザにはどのようなSIDが割り当てられるのかというと、前回作成したユーザのSIDに1足した値。
前回作成したユーザのSIDがS-1-5-21-1236...65543-1034ならば新しいユーザには
S-1-5-21-1236...65543-1035が割り当てられる。


注意点が二つあって、
・SIDが割り当てられるのはユーザ作成時であること。(ユーザの初回ログオン時ではない)
・作成されたユーザには必ずSIDが一つ割り当てられ、たとえそのユーザを一度削除して再び同じ名前で
 ユーザを作成したとしても再び同じSIDが割り当てられることはないこと。


以上の二つに注意しながら、次のような手順で新しいユーザ用にレジストリを書き換える。
1. レジストリエディタを開き、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList\
まで移動する。
2. 既にあるユーザ用のレジストリキーをエクスポートし、適当な名前で保存する。
3. エクスポート元のキーの名前を、新しいユーザに割り当てられるであろうSIDに変更する。
4. その下のSIDの値のどこかに1を足す。(どこに1を足したらいいかは忘れた。)
5. 同じくProfileImagePathの値をこちらの指定するパスに変更する。
6. 最後にエクスポートしたレジストリキーをインポートする。


これで新しいユーザでログオンし、5で指定した場所にユーザと同じ名前のフォルダができていれば成功。