DACL 内の ACE の順序
プロセスがセキュリティ保護可能なオブジェクトにアクセスしようとすると、システムは、要求されたアクセスを許可または拒否する ACE が見つかるまで、オブジェクトの随意アクセス制御リスト (DACL) のアクセス制御エントリ (ACE) をステップ実行します。 DACL でユーザーに許可されるアクセス権は、DACL 内の ACE の順序によって異なる場合があります。 したがって、Windows XP オペレーティング システムでは、セキュリティ保護可能なオブジェクトの DACL で ACE の優先順序が定義されます。 優先順序は、アクセス拒否 ACE が実際にアクセスを拒否することを保証する単純なフレームワークを提供します。 アクセスをチェックするためのシステムのアルゴリズムの詳細については、「 DACLs がオブジェクトへのアクセスを制御する方法」を参照してください。
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 が適切な順序で追加されるようにするのは、呼び出し元の責任です。