行き詰まってしまって質問させていただきました。
よろしかったら助けてもらえませんか?
<環境>
winXP VC++6.0 MFC (ダイアログベース作成中)
<対象>
VC++ラウンジ
<質問内容>
INIファイルの作成方法はわかりましたが、
User権限でも変更したいのです。
方法が見つかりません。
管理者でプロパティを変更するしかないのでしょうか?
どのようにINIファイルを作成したのかなどがわからないですが、
単純に、INIファイルを作成したフォルダが、User権限でアクセスできないだけでは?
今、特にアクセス権限を設定していないフォルダに、WritePrivateProfileString( )を用い
て、
INIファイルを作成し、ファイルのプロパティを調べましたが、
everyでフルコントロールのようだったので。。。
ファイル名をフルパスで指定しないと Windows フォルダに放り込まれますからね。
User 権限ではここには書き込めないでしょう。
どうもインストールしたときにそのフォルダがフルアクセスになっていなかったみたい
です。
そのフォルダにEveryoneを追加したらINIファイルも変更できるようになりました。
INIファイルの書き込みは以下の通りです。
AfxGetApp()->WriteProfileString(Section,PathName, g_strOpPathName);
そこで、INIファイルにアクセスするためと、このフォルダ対して
どんなユーザ(Guest権限のユーザ)からでも読み書き出来るような
セキュリティ設定を行いたいと思ったのですが、方法ってあるのでしょうか。
例えばセキュリティにEveryoneを追加するような関数とか。。。
> 例えばセキュリティにEveryoneを追加するような関数とか。。。
そんな明示的なセキュリティーホール...。ありそうですけど。
writeできなかったら、テンポラリーなフォルダを何処かにつくって、そこに書き込んで
いくようにしてはいかがでしょうか。ユーザー毎のiniファイルが共通のiniファイルとは
別に生成される事になりますが、誰かが行った設定内容が他のユーザーにも影響するのは
どうかと思います。で、次回起動時にはユーザー毎のiniファイルがあるかどうかをまず
チェックして、なければ共通のiniファイルから読み込む、と。
> 例えばセキュリティにEveryoneを追加するような関数とか。。。
SetFileSecurity だと思う。
ところで、Microsoft としては、
\Documents and Settings\<UserName>\Application Data
とかに保存して欲しいんじゃないかな。
ちなみにこのフォルダの場所は SHGetFolderPath で取得できる(古い Windows との互
換性を考えるなら SHgetSpecialFolderLocation が吉。XP 以降なら
SHGetFolderPathAndSubDir がおすすめ)。
>> 例えばセキュリティにEveryoneを追加するような関数とか。。。
> SetFileSecurity だと思う。
> そんな明示的なセキュリティーホール...。
そだね。
この関数は User 権限じゃ使えないか。
みなさんありがとうございます。
返答遅くなって申し訳ございません。
①権限の変更は管理者でないと変更が出来ない。
なので、一度は管理者でソフトを起動しなくてはならない。
②INIファイルは共通で使用したい。
という点と、皆様のご意見を踏まえて、
管理者がフォルダのアクセス権を変更するように
仕様変更します。
>ところで、Microsoft としては、
>\Documents and Settings\<UserName>\Application Data
>とかに保存して欲しいんじゃないかな
私もこの意見には賛成です。