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 を含むバッファーへのポインター (存在する場合)。 ParentDescriptor は NULL にすることも、 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 は、次のいずれかを返すことができます。
リターン コード | 説明 |
---|---|
|
割り当てが成功しました。 |
|
ターゲット セキュリティ記述子の所有者に提供される SID は、呼び出し元がオブジェクトの所有者として割り当てる権限を持つ SID ではありません。 |
|
呼び出し元には、指定されたシステム 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) |