CreatePrivateObjectSecurityEx 関数 (securitybaseapi.h)
CreatePrivateObjectSecurityEx 関数は、この関数を呼び出すリソース マネージャーによって作成された新しいプライベート オブジェクトの自己相対セキュリティ記述子を割り当てて初期化します。
構文
BOOL CreatePrivateObjectSecurityEx(
[in, optional] PSECURITY_DESCRIPTOR ParentDescriptor,
[in, optional] PSECURITY_DESCRIPTOR CreatorDescriptor,
[out] PSECURITY_DESCRIPTOR *NewDescriptor,
[in, optional] GUID *ObjectType,
[in] BOOL IsContainerObject,
[in] ULONG AutoInheritFlags,
[in, optional] HANDLE Token,
[in] PGENERIC_MAPPING GenericMapping
);
パラメーター
[in, optional] ParentDescriptor
オブジェクトの親コンテナーの セキュリティ記述子 へのポインター。 親コンテナーがない場合、このパラメーターは NULL です。
[in, optional] CreatorDescriptor
オブジェクトの作成者によって提供されるセキュリティ記述子へのポインター。 オブジェクトの作成者が新しいオブジェクトのセキュリティ情報を明示的に渡さない場合、このパラメーターは NULL にすることができます。 または、このパラメーターは既定のセキュリティ記述子を指すことができます。
[out] NewDescriptor
新しく割り当てられた自己相対セキュリティ記述子へのポインターを受け取る変数へのポインター。 セキュリティ記述子の使用が完了したら、 を呼び出して解放します。
DestroyPrivateObjectSecurity 関数。
[in, optional] ObjectType
NewDescriptor に関連付けられているオブジェクトの種類を識別する GUID 構造体へのポインター。 オブジェクトに GUID がない場合は、 ObjectType を NULL に設定 します。
[in] IsContainerObject
新しいオブジェクトに他のオブジェクトを含めることができるかどうかを指定します。 値 TRUE は、新しいオブジェクトがコンテナーであることを示します。 FALSE の値は、新しいオブジェクトがコンテナーではないことを示します。
[in] AutoInheritFlags
アクセス制御エントリ (ACE) を ParentDescriptor から継承する方法を制御するビット フラグのセット。 このパラメーターは、次の値と組み合わせて使用できます。
値 | 意味 |
---|---|
|
関数は、次の「備考」で説明するように、結果として得られる NewDescriptor の所有者の有効性をチェックしません。 SEF_AVOID_PRIVILEGE_CHECK フラグも設定されている場合は、 Token パラメーターに NULL を指定できます。 |
|
CreatorDescriptor で DACL を指定する呼び出し元の機能を制限する ParentDescriptor によって指定された制限は無視されます。 |
|
関数は特権チェックを実行しません。 SEF_AVOID_OWNER_CHECK フラグも設定されている場合は、 Token パラメーターに NULL を指定できます。 このフラグは、更新された各子に対する特権をチェックしないように、自動継承を実装するときに便利です。 |
|
新しい 随意アクセス制御リスト (DACL) には、 ParentDescriptor の DACL から継承された ACE と、 CreatorDescriptor の DACL で指定された明示的な ACE が含まれます。 このフラグが設定されていない場合、新しい DACL は ACE を継承しません。 |
|
CreatorDescriptor は、 ObjectType で指定されたオブジェクトの型の既定の記述子です。 したがって、ParentDescriptor に ObjectType パラメーターで指定されたオブジェクトの型に対してオブジェクト固有の ACE がある場合、CreatorDescriptor は無視されます。 このような ACE が継承されない場合、 CreatorDescriptor は、このフラグが指定されていないかのように処理されます。 |
|
NewDescriptor のグループは、ParentDescriptor のグループに既定で設定されます。 設定されていない場合、 NewDescriptor のグループは既定で Token パラメーターで 指定されたトークンのグループになります。 トークンのグループは、トークン自体で指定されます。 どちらの場合も、 CreatorDescriptor パラメーターが NULL でない場合、 NewDescriptor グループは CreatorDescriptor のグループに設定されます。 |
|
NewDescriptor の所有者は、ParentDescriptor の所有者に既定で設定されます。 設定されていない場合、 NewDescriptor の所有者は既定で Token パラメーターで 指定されたトークンの所有者になります。 トークンの所有者は、トークン自体で指定されます。 どちらの場合も、 CreatorDescriptor パラメーターが NULL でない場合、 NewDescriptor 所有者は CreatorDescriptor の所有者に設定されます。 |
|
このフラグが設定されている場合、 CreatorDescriptor の必須ラベル ACE は 、NewDescriptor で必須ラベル ACE を作成するために使用されません。 代わりに、SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UPのアクセス マスクとトークンの整合性 SID からの SID を持つ新しいSYSTEM_MANDATORY_LABEL_ACEが NewDescriptor に追加されます。 |
|
このフラグが設定されている場合、 CreatorDescriptor の必須ラベル ACE は 、NewDescriptor で必須ラベル ACE を作成するために使用されません。 代わりに、SYSTEM_MANDATORY_LABEL_NO_READ_UPのアクセス マスクとトークンの整合性 SID からの SID を持つ新しいSYSTEM_MANDATORY_LABEL_ACEが NewDescriptor に追加されます。 |
|
このフラグが設定されている場合、 CreatorDescriptor の必須ラベル ACE は 、NewDescriptor で必須ラベル ACE を作成するために使用されません。 代わりに、SYSTEM_MANDATORY_LABEL_NO_WRITE_UPのアクセス マスクとトークンの整合性 SID からの SID を持つ新しいSYSTEM_MANDATORY_LABEL_ACEが NewDescriptor に追加されます。 |
|
新しい システム アクセス制御リスト (SACL) には、 ParentDescriptor の SACL から継承された ACE と、 CreatorDescriptor の SACL で指定された明示的な ACE が含まれています。 このフラグが設定されていない場合、新しい SACL は ACE を継承しません。 |
[in, optional] Token
オブジェクトの代わりに作成されるクライアント プロセスのアクセス トークンへのハンドル。 偽装 トークンの場合は、SecurityIdentification レベル以上である必要があります。 SecurityIdentification 偽装レベルの完全な説明については、 SECURITY_IMPERSONATION_LEVEL 列挙型に関するページを参照してください。
クライアント トークンには、既定の所有者、プライマリ グループ、DACL などの既定のセキュリティ情報が含まれています。 情報が入力セキュリティ記述子にない場合、関数はこれらの既定値を使用します。 トークンは、 TOKEN_QUERY アクセスのために開いている必要があります。
次の条件がすべて満たされている場合は、TOKEN_QUERYアクセスに加えて 、TOKEN_DUPLICATE アクセス用にハンドル を 開く必要があります。
- トークン ハンドルは、プライマリ トークンを参照します。
- トークンのセキュリティ記述子には、 OwnerRights SID を持つ 1 つ以上の ACE が含まれています。
- CreatorDescriptor パラメーターにセキュリティ記述子が指定されています。
- この関数の呼び出し元は、AutoInheritFlags パラメーターにSEF_AVOID_OWNER_RESTRICTION フラグを設定しません。
[in] GenericMapping
各汎用権限からオブジェクトの特定の権限へのマッピングを指定する GENERIC_MAPPING 構造体へのポインター。
戻り値
関数が成功した場合、関数は 0 以外の値を返します。
関数が失敗すると、0 が返されます。 詳細なエラー情報を得るには、GetLastError を呼び出します。 拡張エラー コードとその意味の一部を次の表に示します。
リターン コード | 説明 |
---|---|
|
関数は、新しいセキュリティ記述子の所有者を取得できないか、SID を所有者として割り当てることができません。 これは、渡されたトークンに対して所有者 SID を検証するときに発生します。 |
|
関数は、新しいセキュリティ記述子のプライマリ グループを取得できません。 |
|
関数は、所有者の検証または特権チェック用のトークンの代わりに NULL を 受け取ります。 |
|
SACL が設定され、SEF_AVOID_PRIVILEGE_CHECKが渡されず、渡されたトークンが有効になっていないSE_SECURITY_NAME。 |
注釈
CreatePrivateObjectSecurity 関数は、ObjectType が NULL に設定され、AutoInheritFlags が 0 に設定された CreatePrivateObjectSecurityEx 関数の呼び出しと同じです。
AutoInheritFlags パラメーターは、SECURITY_DESCRIPTOR構造体の Control メンバー内の類似した名前付きビットとは異なります。 制御ビットの詳細については、「 SECURITY_DESCRIPTOR_CONTROL」を参照してください。
AutoInheritFlags でSEF_DACL_AUTO_INHERIT ビットが指定されている場合、関数は新しいセキュリティ記述子の DACL に次の規則を適用します。
- SE_DACL_AUTO_INHERITED フラグは、新しいセキュリティ記述子の Control メンバーで設定されます。
- 新しいセキュリティ記述子の DACL は、 CreatorDescriptor が既定のセキュリティ記述子であるか、作成者によって明示的に指定されたかに関係なく、 ParentDescriptor から ACE を継承します。 新しい DACL は、継承の規則によって定義される親と作成者の DACL の組み合わせです。
- 継承された ACE は、INHERITED_ACEとしてマークされます。
DACL と SACL の両方で、 ParentDescriptor と CreatorDescriptor の特定の種類の ACE が操作され、 NewDescriptor の 2 つの ACE に置き換えられる場合があります。 具体的には、次のマップ可能な要素の少なくとも 1 つを含む継承可能な ACE では、出力セキュリティ記述子に 2 つの ACE が生成される可能性があります。 マップ可能な要素は次のとおりです。
- ACCESS_MASKの汎用アクセス権
- ACE サブジェクト識別子としての作成者所有者 SID または作成者グループ SID
- 元のコピーですが、INHERIT_ONLY フラグが設定されている ACE。 ただし、次の 2 つの条件のいずれかが存在する場合、この ACE は作成されません。
- IsContainerObject パラメーターは FALSE です。 継承可能な ACE は、非コンテナー オブジェクトでは意味がありません。
- 元の ACE には、NO_PROPAGATE_INHERIT フラグが含まれています。 元の ACE は、子に対して有効な ACE として継承されることを意図していますが、それらの子の下では継承できません。
- INHERITED_ACE ビットがオンになり、ジェネリック要素が次を含む特定の要素にマップされる有効な ACE。
- 汎用アクセス権は、入力 GenericMapping に示されている対応する標準および特定のアクセス権に置き換えられます。
- 作成者所有者 SID は、結果として得られる NewDescriptor の所有者に置き換えられます
- 作成者グループ SID は、結果として得られる NewDescriptor のグループに置き換えられます
最終的に所有者を設定するクライアントのトークンにアクセスできない呼び出し元は、所有者の検証チェックをスキップすることを選択できます。
新しいオブジェクトのセキュリティ記述子を作成するには、親コンテナーのセキュリティ記述子に ParentDescriptor が設定された CreatePrivateObjectSecurityEx を呼び出し、CreatorDescriptor をオブジェクトの作成者によって提案されたセキュリティ記述子に設定します。
CreatorDescriptor セキュリティ記述子に SACL が含まれている場合は、トークンにSE_SECURITY_NAME特権が有効になっているか、呼び出し元が AutoInheritFlags でSEF_AVOID_PRIVILEGE_CHECK フラグを指定する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | securitybaseapi.h (Windows.h を含む) |
Library | Advapi32.lib |
[DLL] | Advapi32.dll |