ConvertToAutoInheritPrivateObjectSecurity

セキュリティ記述子とそのアクセス制御リスト (ACL) を、継承可能なアクセス制御エントリ (ACE) の自動伝播をサポートする形式に変換する。

ConvertToAutoInheritPrivateObjectSecurity ParentDescriptor, CurrentSecurityDescriptor, NewSecurityDescriptor, ObjectType, IsDirectoryObject, GenericMapping

ParentDescriptor : [int] オブジェクトの親コンテナのセキュリティ記述子へのポインタ。親コンテナがない場合、このパラメータは NULL にする。
CurrentSecurityDescriptor : [int] オブジェクトの現在のセキュリティ記述子へのポインタ。
NewSecurityDescriptor : [var] 新しく割り当てられた自己相対セキュリティ記述子へのポインタを受け取る変数へのポインタ。このセキュリティ記述子を解放するために DestroyPrivateObjectSecurity 関数を呼び出すのは呼び出し側の責任である。
ObjectType : [var] CurrentSecurityDescriptor パラメータに関連付けられたオブジェクトの種類を識別する GUID 構造体へのポインタ。オブジェクトが GUID を持たない場合、このパラメータは NULL でなければならない。
IsDirectoryObject : [int] TRUE の場合、新しいオブジェクトはコンテナであり、他のオブジェクトを含むことができる。FALSE の場合、新しいオブジェクトはコンテナではない。
GenericMapping : [var] オブジェクトに対する各汎用権限から特定権限へのマッピングを指定する GENERIC_MAPPING 構造体へのポインタ。

(プラグイン / モジュール : advapi32.dll)

解説

セキュリティ記述子とそのアクセス制御リスト (ACL) を、継承可能なアクセス制御エントリ (ACE)
の自動伝播をサポートする形式に変換する。

[戻り値]
関数が成功した場合、戻り値は 0 以外となる。関数が失敗した場合、戻り値は 0 となる。拡張エラー情報を取得するには
GetLastError を呼び出す。

[備考]
ConvertToAutoInheritPrivateObjectSecurity 関数は、現在のセキュリティ記述子の DACL および
SACL 内の ACE が親セキュリティ記述子から継承されたものかどうかを判定しようとする。関数は、ParentDescriptor
パラメータを CreatePrivateObjectSecurityEx 関数に渡して、継承された ACE のみを含む ACL
を取得する。次に、これらの ACE を元のセキュリティ記述子の ACE と比較して、どの元の ACE が継承されたものかを判定する。ACE
は 1 対 1 で一致する必要はない。たとえば、トラスティに読み取りと書き込みのアクセスを許可する 1 つの ACE
は、読み取りを許可する ACE と書き込みを許可する ACE の 2 つの ACE と等価である。親セキュリティ記述子から継承された
ACE と等価な元のセキュリティ記述子内の ACE はすべて、INHERITED_ACE
フラグでマークされ、新しいセキュリティ記述子に追加される。元のセキュリティ記述子内のその他すべての ACE は、非継承 ACE
として新しいセキュリティ記述子に追加される。元の DACL が継承された ACE
を持たない場合、関数は新しいセキュリティ記述子の制御ビットに SE_DACL_PROTECTED フラグを設定する。同様に、SACL
のいずれの ACE も継承されたものでない場合は SE_SACL_PROTECTED フラグが設定される。継承された ACE を持つ
DACL については、関数は ACE を 2 つのグループに並べ替える。最初のグループにはオブジェクトに直接適用された ACE
が含まれ、2 番目のグループには継承された ACE が含まれる。この順序により、非継承 ACE が継承 ACE
より優先される。詳細は「Order of ACEs in a DACL」を参照のこと。関数は新しいセキュリティ記述子の制御ビットに
SE_DACL_AUTO_INHERITED および SE_SACL_AUTO_INHERITED フラグを設定する。関数は、DACL
内のアクセス許可 ACE とアクセス拒否 ACE
の相対順序を変更しない。変更すると結果のセキュリティ記述子の意味が変わってしまうためである。意味を変えずに DACL
を変換できない場合、関数は DACL を変更しないまま SE_DACL_PROTECTED
フラグを設定する。新しいセキュリティ記述子は、元のセキュリティ記述子と同じ所有者とプライマリグループを持つ。新しいセキュリティ記述子は元のセキュリティ記述子と等価なので、呼び出し側はセキュリティ記述子を新しい形式に更新するためのアクセス権や特権を必要としない。本関数は
ACL_REVISION および ACL_REVISION_DS の ACL に対して動作する。

情報

プラグイン / モジュールadvapi32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の advapi32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_advapi32_gen2.hs