ConvertToAutoInheritPrivateObjectSecurity 関数 (securitybaseapi.h)
ConvertToAutoInheritPrivateObjectSecurity 関数は、セキュリティ記述子とそのアクセス制御リスト (ACL) を、継承可能なアクセス制御エントリ (ACE) の自動伝達をサポートする形式に変換します。
構文
BOOL ConvertToAutoInheritPrivateObjectSecurity(
[in, optional] PSECURITY_DESCRIPTOR ParentDescriptor,
[in] PSECURITY_DESCRIPTOR CurrentSecurityDescriptor,
[out] PSECURITY_DESCRIPTOR *NewSecurityDescriptor,
[in, optional] GUID *ObjectType,
[in] BOOLEAN IsDirectoryObject,
[in] PGENERIC_MAPPING GenericMapping
);
パラメーター
[in, optional] ParentDescriptor
オブジェクトの親コンテナーの セキュリティ記述子 へのポインター。 親コンテナーがない場合、このパラメーターは NULL です。
[in] CurrentSecurityDescriptor
オブジェクトの現在のセキュリティ記述子へのポインター。
[out] NewSecurityDescriptor
新しく割り当てられた 自己相対セキュリティ記述子へのポインターを受け取る変数へのポインター。 このセキュリティ記述子を解放するには、 DestroyPrivateObjectSecurity 関数を呼び出す必要があります。
[in, optional] ObjectType
CurrentSecurityDescriptor パラメーターに関連付けられているオブジェクトの種類を識別する GUID 構造体へのポインター。 オブジェクトに GUID がない場合、このパラメーターは NULL である必要があります。
[in] IsDirectoryObject
TRUE の場合、新しいオブジェクトはコンテナーであり、他のオブジェクトを含めることができます。 FALSE の場合、新しいオブジェクトはコンテナーではありません。
[in] GenericMapping
各汎用権限からオブジェクトの特定の権限へのマッピングを指定する GENERIC_MAPPING 構造体へのポインター。
戻り値
関数が成功した場合、関数は 0 以外の値を返します。
関数が失敗すると、0 が返されます。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
ConvertToAutoInheritPrivateObjectSecurity 関数は、現在のセキュリティ記述子の随意アクセス制御リスト (DACL) とシステム アクセス制御リスト (SACL) の ACE が親セキュリティ記述子から継承されたかどうかを判断しようとします。 この関数は、 ParentDescriptor パラメーターを CreatePrivateObjectSecurityEx 関数に渡して、継承された ACE のみを含む ACL を取得します。 次に、これらの ACE を元のセキュリティ記述子の ACE と比較して、継承された元の ACE のどれを決定します。 ACE は 1 対 1 に一致する必要はありません。 たとえば、トラスティへの読み取りおよび書き込みアクセスを許可する ACE は、読み取りアクセスを許可する ACE と書き込みアクセスを許可する ACE の 2 つの ACE と同じにすることができます。
親セキュリティ記述子から継承された ACE と同等の元のセキュリティ記述子の ACE は、INHERITED_ACE フラグでマークされ、新しいセキュリティ記述子に追加されます。 元のセキュリティ記述子内の他のすべての ACE は、非暗号化 ACE として新しいセキュリティ記述子に追加されます。
元の DACL に継承された ACE がない場合、関数は新しいセキュリティ記述子の制御ビットに SE_DACL_PROTECTED フラグを設定します。 同様に、SACL 内の ACE が継承されない場合は、SE_SACL_PROTECTED フラグが設定されます。
ACE を継承した DAC の場合、この関数は ACE を 2 つのグループに並べ替えます。 最初のグループには、オブジェクトに直接適用された ACE があります。 2 番目のグループは ACE を継承しています。 この順序により、継承されていない ACE が継承された ACE よりも優先されます。 詳細については、「DACL 内の ACE の順序」を参照してください。
関数は、新しいセキュリティ記述子の制御ビットにSE_DACL_AUTO_INHERITEDフラグとSE_SACL_AUTO_INHERITEDフラグを設定します。
この関数は、DACL のアクセス拒否 ACE に関連してアクセスが許可される ACE の順序を変更しません。そうすると、結果として得られるセキュリティ記述子のセマンティクスが変更されるためです。 関数がセマンティクスを変更せずに DACL を変換できない場合、DACL は変更されず、SE_DACL_PROTECTED フラグが設定されます。
新しいセキュリティ記述子には、元のセキュリティ記述子と同じ所有者とプライマリ グループがあります。
新しいセキュリティ記述子は元のセキュリティ記述子と同じであるため、呼び出し元は、セキュリティ記述子を新しい形式に更新するためにアクセス 権や特権 を必要としません。
この関数は、ACL_REVISIONとACL_REVISION_DS ACL で動作します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | securitybaseapi.h (Windows.h を含む) |
Library | Advapi32.lib |
[DLL] | Advapi32.dll |