2012-02-24 7 views
1

ファイルに関連付けられているアクセス許可を確認するために、Windows(XP/7)プラットフォーム用のC++コードをいくつか書いています。私が読んでいるファイルは、昇格されていない特権を持つアカウントでは書き込めないことを確認したい。昇格していないユーザーのWindowsでのファイルアクセスの確認

  • を私はGetNamedSecurityInfo
  • を呼び出して、ファイルに関連付けられているDACLが、私は、このようなWinAuthenticatedUserSid(Usersグループ)として、よく知られてSIDSとCreateWellKnownSidを呼び出して取得する:これは私が現在やっているものです
  • 私はGetEffectiv呼び出す前のSID
  • とTRUSTEEを構築するためにBuildTrusteeWithSidを呼び出しますeRightsFromAclと以前に作成したトラスティが有効なaclを取得する
  • ACLに書き込みフラグが設定されていないことを確認します。

このコードは、Usersグループでは完全に機能しています。 Everyone、ゲスト、またはファイルに特定の書き込みアクセス権を持つ他の特定のユーザーなど、他のグループはどうなりますか?私はすべての可能なSIDを列挙し、すべてのSIDをチェックする必要がないソリューションを探したいと思います。 「管理者以外何でも」などのSIDがありますか?

よろしく、 アリ

+0

ファイルには、1人のユーザーに対して許容ACLが設定されている可能性があります。 'GetEffectiveRightsFromAcl'に頼っている場合は、すべてのユーザーを個別にチェックする必要があります。また、あなたは['AuthzAccessCheck()'](http://msdn.microsoft.com/en-us/library/windows/desktop/aa375788(v = vs.85))にすべての苦労を軽減できるように思えます。 .aspx)。 – MSalters

答えて

1

私は少し異なるアプローチを取ると思います:

  1. は、ファイルのGetExplicitEntriesFromAclを経由して、すべてのACEのを、入手し、そのすべての親
  2. GRANT_ACCESSSET_ACCESS ACEの
  3. を選択
  4. 選択したACEの受託者リストを取得
  5. 受託者ごとに、アクセスチェック。おそらく最も簡単な解決策はGetEffectiveRightsFromAclでしょう。

あなたはOWNERで何をしたいかを具体的に考えたいと思うでしょう。彼はいつでも権利を変更することができます。

+0

完全な回答ありがとうございます。この場合、昇格したアカウントだけに書き込みアクセス権を許可する場合は、TRUSTEEごとに、管理グループまたは管理グループの他のグループの一部であるかどうかを確認する必要があります。それが正しいか? – user1230896

+0

@ user1230896:そうは思わない。 Windowsの管理者はUnixのルートではありません。その特別な立場は、所有権を得ることができるという事実にある。ルートとは異なり、自動アクセスはありません。 – MSalters