none
7でルートディレクトリに作成したファイルは特殊な属性を持つ? RRS feed

  • 質問

  • Win95時代からのアプリケーションをメンテナンスしています。

    このアプリケーション、setup.exeでインストールするときにC:\(といいますか、システムドライブルート)に隠しファイルを作ります。この隠しファイルが、Win7ですとどのユーザーからも書き込みができないようになってしまいました(書き込むとき権限昇格が必要になりました)。

    当初DACLの設定をすればいいのかと思ったのですが、DACLをどう設定してもアクセス拒否で書き込めないのが変わりません。ルート以外のディレクトリに移動しても同じです。

    書き込みが可能な他のファイルと属性やDACLや所有者をまったく同じに揃えても変化なし。そこで、「システムルートにCreateFileしたファイルは、画面上で見えない属性が何か設定されて、書き込みに権限昇格を要するようになるようだ」と結論しました。

    アプリケーションの方はファイルの作成先を変えて解決したのですが、上記の結論が正しいのかどうか根拠が見つかりません。ルートディレクトリに作成したファイルにつくような特殊な属性というのがあるのでしょうか? あるのなら画面上でそうやってそれを確認したり変更したりできるでしょうか?

    2011年10月31日 6:30

回答

すべての返信

  • UAC の影響なんではないでしょうか。

    Destination Folder Access Denied - Copying File to the root of C:\
    http://social.technet.microsoft.com/Forums/en/w7itprosecurity/thread/ef5ca162-9d07-4f12-bfa8-fdc89a794206

    ユーザー アカウント制御 (UAC: User Account Control) - Windows 7 対応アプリケーションの互換性
    http://msdn.microsoft.com/ja-jp/windows/dd883236.aspx

    ファイルの作成先を変更したのは賢明な対応だと思います。
    2011年11月9日 2:51
  • UAC関連なのはきっとその通りなんでしょうね。ただ、通常のUACの制限とは違いそうで、DACLをみてもどういう仕組みでブロックされているのかがわからないままです。

    いちどルートに作成したファイルは、自分のドキュメントフォルダに移して自分にフルコントロールを与えてさえ、楯つきのままです。この楯が何に由来しているのか。

    リンク先の問答でその辺、特に説明されていないですね。ドキュメント外の仕様、という気がしています。

    2011年11月9日 2:58
  • ファイルの整合性レベルは確認されましたか?ファイルを移動しても整合性レベルはそのままなのですよ。
    確か整合性レベルは ACL よりも先にチェックされるはずです。

    整合性レベルの確認の仕方はこちら。

    アプリケーションの互換性 (前篇) | Tech Fielders コラム
    http://www.microsoft.com/japan/powerpro/TF/column/tm_09_2.mspx
    • 回答としてマーク miuras_net 2011年11月21日 2:18
    2011年11月9日 3:12
  • 自分も似たようなことで悩んでたことがあったのですが、
    totojo さん返信の「整合性レベル」の情報はとても参考になりました。

     

    リンク先をぱっと見たとき ACL のこと?って勘違いしちゃいましたが、
    下の方に例示されている「icacls コマンド」にて確認できるのですね。

     

    リンク先の例示内容を見る限り、
    「レベル High  ポリシー No-Read-Up」になっている可能性が高いようですが、
    どうなったのでしょうかね?

     

    2011年11月12日 7:52
  • ご回答いただいたのに気付くの遅れました。

    整合性レベルという言葉自体はじめて知り、大変勉強になりました。

    ありがとうございます。

    2011年11月21日 2:20