FAQ な質問にすべての user で扱う file はどこに配置すべき? というのがあります。この質問は目にするたび、user がその file を直接指定することがないのであれば、下記に配置するべきだと書いています。
OS |
Path |
Vista |
%PROGRAMDATA% |
XP |
%ALLUSERPROFILE%\Application Data |
Vista 以降限定であれば、環境変数一つで定義されているので環境変数を利用してもよいですが、Vista より以前が対象に含まれる場合にはこれではまずいです。上記の場所は registry に設定されており、それを扱う API が整備されているので必ずそれを利用しましょう。
なお、対象 folder の ACL は Windows Vista では既定で下記のように構成されています。
上記 DACL を簡単に説明すると、制限 user はすべての file を開いたり実行でき、 file を新規作成できるが、自分が作った file じゃないと更新や削除ができないということになります。実によく考えられてますね。
これが嫌なら、DACL を変更することになります。
ただ、安易に複数 user で共有する場所に配置するのは考え物です。その file が本当に複数 user 間で共有する必要があるか今一度考慮すべきでしょう。その file を直接指定することなく、すべての user で共有する必要があり、かつすべての user が更新する必要があるものって相当少ないと思いますよ。
また、対象の file の内容はすべての user が扱う必要があるもののみ格納されているでしょうか? すべての user が扱う必要の無いものが含まれているのであれば、それは分離し個々の user profile に格納するべきでしょう。
なお、user が直接その file を指定することがあるのであれば、"%ALLUSERPROFILE%" ("%PUBLIC%") 配下の "Documents", "Downloads", "Music", "Pictures", "Videos" とかに格納すべきです。それぞれ対応した KNOWNFORDERID (CSIDL) があるので、環境変数など使わずに API で取得しましょう。
ちなみに、こちらは "NT AUTHORITY\INTERACTIVE" に十分な権限が与えられているので更新等で問題が生じることはほぼないでしょう。逆に厳しくしたいという要件が結構あるかも。
<参考>