SeAssignSecurity 関数 (wdm.h)

SeAssignSecurity ルーチンは、親ディレクトリのセキュリティ記述子と、オブジェクトに対して最初に要求されたセキュリティを指定して、新しいオブジェクトの自己相対セキュリティ記述子を構築します。

構文

NTSTATUS SeAssignSecurity(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in]           BOOLEAN                   IsDirectoryObject,
  [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へのポインターを受け取ります。 SeAssignSecurity は、ページングされたメモリ プールからバッファーを割り当てます。

[in] IsDirectoryObject

新しいオブジェクトがディレクトリ オブジェクトかどうかを指定します。 TRUE は 、オブジェクトに他のオブジェクトが含まれていることを示します。

[in] SubjectContext

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

[in] GenericMapping

各ジェネリック権限から暗黙的な非ジェネリック権限へのマッピングを記述する GENERIC_MAPPING構造体への ポインター。

[in] PoolType

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

戻り値

SeAssignSecurity は、次のいずれかを返すことができます。

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

注釈

呼び出し元に返される最終的なセキュリティ記述子には、新しいオブジェクトの親から明示的に提供される情報が混在している場合があります。

SeAssignSecurity は、特権チェックが実行されていないことを前提としています。 このルーチンは、特権チェックを実行します。

システム ACL と随意 ACL の割り当ては、次の表に示すロジックによって制御されます。

明示的な (既定以外の) ACL が指定されました 明示的な既定の ACL の指定 ACL が指定されていない
親から継承可能な ACL 指定された ACL を割り当てる 継承された ACL を割り当てる 継承された ACL を割り当てる
親からの継承可能な ACL なし 指定された ACL を割り当てる 既定の ACL を割り当てる ACL を割り当てない
 

既定の ACL かどうかに関係なく、明示的に指定された ACL は空または null にすることができます。 呼び出し元はカーネル モード クライアントであるか、既定または既定以外のシステム ACL を明示的に割り当てるために適切な特権を持っている必要があります。

新しいオブジェクトの所有者とグループの割り当ては、次のロジックによって制御されます。

  • 渡されたセキュリティ記述子に所有者が含まれている場合は、新しいオブジェクトの所有者として割り当てられます。 それ以外の場合、呼び出し元のトークンは所有者を決定すると見なされます。 トークン内では、既定の所有者 (存在する場合) が割り当てられます。 それ以外の場合は、呼び出し元のユーザー ID が割り当てられます。
  • 渡されたセキュリティ記述子にグループが含まれている場合は、新しいオブジェクトのグループとして割り当てられます。 それ以外の場合は、呼び出し元のトークンがグループを決定すると見なされます。 トークン内には、既定のグループ (存在する場合) が割り当てられます。 それ以外の場合は、呼び出し元のプライマリ グループ ID が割り当てられます。

要件

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

こちらもご覧ください

GENERIC_MAPPING

IoGetFileObjectGenericMapping

SECURITY_DESCRIPTOR

SeDeassignSecurity