DACL 内の ACE の順序
プロセス セキュリティ保護可能なオブジェクトへのアクセスを試みると、システムは、要求されたアクセスを許可または拒否する ACE が見つかるまで、オブジェクトの 随意アクセス制御リスト (DACL) 内の アクセス制御エントリ (ACE) をステップ実行します。 DACL でユーザーに許可されるアクセス権は、DACL 内の ACE の順序によって異なる場合があります。 したがって、Windows XP オペレーティング システムは、セキュリティ保護可能なオブジェクトの DACL 内の ACE の優先順序を定義します。 優先順序は、アクセス拒否 ACE が実際にアクセスを拒否することを保証する単純なフレームワークを提供します。 アクセスをチェックするためのシステムのアルゴリズムの詳細については、「オブジェクトへのアクセスを DACL が制御する方法」を参照してください。
Windows Server 2003 および Windows XP では、オブジェクト固有の ACE の導入と自動継承によって、ACE の適切な順序が複雑になります。
次の手順では、優先される順序について説明します。
- 明示的な ACE はすべて、継承された ACE の前のグループに配置されます。
- 明示的な ACE のグループ内では、アクセスが許可された ACE の前にアクセス拒否 ACE が配置されます。
- 継承された ACE は、継承された順序で配置されます。 子オブジェクトの親から継承された ACE は最初に、次に ACE は祖父母から継承され、オブジェクトのツリーの上に来ます。
- 継承された ACE のレベルごとに、アクセス拒否 ACE はアクセスが許可される ACE の前に配置されます。
もちろん、ACL ですべての ACE タイプが必要なわけではありません。
AddAccessAllowedAceEx や AddAccessAllowedObjectAce などの関数は、ACL の末尾に ACE を追加。 ACE が適切な順序で追加されるようにするのは呼び出し元の責任です。