SeAssignSecurityEx 関数 (wdm.h)

SeAssignSecurityEx ルーチンは、次の省略可能なパラメーターを指定して、新しいオブジェクトの自己相対セキュリティ記述子を構築します。 オブジェクトの親ディレクトリのセキュリティ記述子、オブジェクトの明示的なセキュリティ記述子、およびオブジェクト型。

構文

NTSTATUS SeAssignSecurityEx(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in, optional] GUID                      *ObjectType,
  [in]           BOOLEAN                   IsDirectoryObject,
  [in]           ULONG                     AutoInheritFlags,
  [in]           PSECURITY_SUBJECT_CONTEXT SubjectContext,
  [in]           PGENERIC_MAPPING          GenericMapping,
  [in]           POOL_TYPE                 PoolType
);

パラメーター

[in, optional] ParentDescriptor

作成される新しいオブジェクトを含む親オブジェクトの SECURITY_DESCRIPTOR へのポインター。 ParentDescriptorNULL にすることも、 NULL システム アクセス制御リスト (SACL) または NULL 随意アクセス制御リスト (DACL) を使用することもできます。

[in, optional] ExplicitDescriptor

新しいオブジェクトに適用される明示的な SECURITY_DESCRIPTOR へのポインター。 ExplicitDescriptor には NULL を指定するか、 NULL SACL または NULL DACL を指定できます。

[out] NewDescriptor

返された SECURITY_DESCRIPTORへのポインターを受け取ります。 SeAssignSecurityEx は、ページングされたメモリ プールからバッファーを割り当てます。

[in, optional] ObjectType

作成されるオブジェクトの種類の GUID へのポインター。 オブジェクトに GUID がない場合は、 ObjectType をNULL に設定する必要があります。

[in] IsDirectoryObject

新しいオブジェクトがディレクトリ オブジェクトかどうかを指定します。 IsDirectoryObjectTRUE に設定されている場合、新しいオブジェクトはディレクトリ オブジェクトになります。それ以外の場合、新しいオブジェクトはディレクトリ オブジェクトではありません。

[in] AutoInheritFlags

ParentDescriptor で指定されたアクセス制御リスト (ACL) のアクセス制御エントリ (ACE) に適用される自動継承の種類を指定します。 AutoInheritFlags では、 NewDescriptor の特権チェック、所有者チェック、既定の所有者とグループの設定も制御します。 AutoInheritFlags は、次の 1 つ以上の値の論理 OR に設定する必要があります。

意味
SEF_DACL_AUTO_INHERIT ParentDescriptor の DACL の ACE は、ExplicitDescriptorで指定された明示的な ACE に加えて、NewDescripto r によって継承されます。
SEF_SACL_AUTO_INHERIT ParentDescriptor の SACL 内の ACE は、ExplicitDescriptor で指定された明示的な ACE に加えて、NewDescriptor によって継承されます。
SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT ExplicitDescriptor は、 ObjectType で指定されたオブジェクト型の既定の記述子です。 ACE が ParentDescriptor から継承される場合、 ExplicitDescriptor は使用されません。
SEF_AVOID_PRIVILEGE_CHECK 特権チェックは行われません。 このフラグは、更新する必要がある各子に対する特権チェックを回避するため、自動継承で役立ちます。
SEF_AVOID_OWNER_CHECK 所有者の確認は行われません。
SEF_DEFAULT_OWNER_FROM_PARENT 所有者が ExplicitDescriptor で指定されている場合、このフラグは使用されず、NewDescriptor の所有者は ExplictDescriptor で指定された所有者に設定されます。

所有者が ExplicitDescriptor で指定されていない場合、このフラグは次のように使用されます。フラグが設定されている場合、NewDescriptor の所有者は ParentDescriptor の所有者に設定されます。 それ以外の場合、NewDescriptor の所有者は SubjectContext で指定された所有者に設定されます。

SEF_DEFAULT_GROUP_FROM_PARENT ExplicitDescriptor でグループが指定されている場合、このフラグは使用されず、NewDescriptor のグループは ExplictDescriptor で指定されたグループに設定されます。

ExplicitDescriptor でグループが指定されていない場合、このフラグは次のように使用されます。フラグが設定されている場合、NewDescriptor のグループは ParentDescriptor のグループに設定されます。 それ以外の場合、NewDescriptor のグループは SubjectContext で指定されたグループに設定されます。

 

システム ACL と随意 ACL の割り当てを次の表に示します。

既定以外の明示的記述子 (1) 既定の明示的記述子 (2) Null 明示的な記述子
ACL は親記述子 (3) から継承されます。 継承された ACL と明示的 ACL(5)(6) の両方を割り当てます。 継承された ACL を割り当てます。 継承された ACL を割り当てます。
ACL は親記述子 (4) から継承されません。 既定以外の ACL を割り当てます。 既定の ACL を割り当てます。 ACL を割り当てない。
 

割り当てに関する注釈

  1. SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT フラグが指定されていません。
  2. SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT フラグが指定されています。
  3. ACL の自動継承フラグが指定されています (SEF_DACL_AUTO_INHERITまたはSEF_SACL_AUTO_INHERIT)。
  4. ACL の自動継承フラグが指定されていません。
  5. AceFlags メンバーにINHERITED_ACE ビットが設定されている ACE は、割り当てられたセキュリティ記述子にコピーされません
  6. 親記述子から継承された ACE は、明示的な記述子で指定された ACE の後に追加されます。

[in] SubjectContext

オブジェクトを作成しているサブジェクトのセキュリティ コンテキストへのポインター。 SubjectContext は、既定の所有者、プライマリ グループ、随意アクセス制御など、新しいオブジェクトの既定のセキュリティ情報を取得するために使用されます。

[in] GenericMapping

オブジェクト固有の権限に対する各汎用権限間のマッピングを指定するアクセス マスク値の配列へのポインター。

[in] PoolType

このパラメーターは使用されません。 新しいセキュリティ記述子を保持するバッファーは、常にページ プールから割り当てられます。

戻り値

SeAssignSecurityEx は 、次のいずれかの値を返します。

リターン コード 説明
STATUS_SUCCESS
割り当てが成功しました。
STATUS_INVALID_OWNER
新しいセキュリティ記述子の所有者として提供される SID は、呼び出し元がオブジェクトの所有者として割り当てる権限を持つ SID ではありません。
STATUS_PRIVILEGE_NOT_HELD
呼び出し元には、指定した SACL を明示的に割り当てるために必要な特権 (SeSecurityPrivilege) がありません。

注釈

SeAssignSecurityEx はSeAssignSecurity の基本的な操作を次の方法で拡張します。

  • ObjectType は、必要に応じてオブジェクトの種類を指定します。 オブジェクト固有の継承は、オブジェクト固有の ACE の次のメンバーによって制御されます: FlagsInheritedObjectTypeHeader.AceFlags
  • AutoInheritFlags は、使用される ACE の自動継承の種類を指定します。 AutoInheritFlags では、 NewDescriptor の特権チェック、所有者チェック、既定の所有者とグループの設定も制御します。
セキュリティとアクセス制御の詳細については、Microsoft Windows SDKのこれらのトピックに関するドキュメントを参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport)

こちらもご覧ください

GENERIC_MAPPING

SECURITY_DESCRIPTOR

SeAssignSecurity

SeDeassignSecurity