SeSetSecurityDescriptorInfoEx 関数 (ntifs.h)
SeSetSecurityDescriptorInfoEx ルーチンは、オブジェクトのセキュリティ記述子を変更し、オブジェクトがアクセス制御エントリ (ACE) の自動継承をサポートするかどうかを指定します。
構文
NTSTATUS SeSetSecurityDescriptorInfoEx(
[in, optional] PVOID Object,
[in] PSECURITY_INFORMATION SecurityInformation,
PSECURITY_DESCRIPTOR ModificationDescriptor,
[in, out] PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
[in] ULONG AutoInheritFlags,
[in] POOL_TYPE PoolType,
[in] PGENERIC_MAPPING GenericMapping
);
パラメーター
[in, optional] Object
セキュリティ記述子を変更するオブジェクトへのポインター。 これは、セキュリティ クォータ情報を更新するために使用されます。
[in] SecurityInformation
設定するセキュリティ情報を指定する値へのポインター。 次の 1 つ以上の組み合わせを使用できます。
値 | 説明 |
---|---|
DACL_SECURITY_INFORMATION | オブジェクトの随意アクセス制御リスト (DACL) が設定されていることを示します。 WRITE_DACアクセスが必要です。 |
GROUP_SECURITY_INFORMATION | オブジェクトのプライマリ グループ識別子が設定されていることを示します。 WRITE_OWNERアクセスが必要です。 |
OWNER_SECURITY_INFORMATION | オブジェクトの所有者識別子が設定されていることを示します。 WRITE_OWNERアクセスが必要です。 |
SACL_SECURITY_INFORMATION | オブジェクトのシステム ACL (SACL) が設定されていることを示します。 ACCESS_SYSTEM_SECURITYアクセスが必要です。 |
ModificationDescriptor
オブジェクトに適用される入力セキュリティ記述子。 このルーチンの呼び出し元は、呼び出す前に渡されたセキュリティ記述子をプローブしてキャプチャし、呼び出した後に解放することが期待されます。
[in, out] ObjectsSecurityDescriptor
オブジェクトのセキュリティ記述子へのポインターへのポインター。 セキュリティ記述子は自己相対形式である必要があります。 この構造体は、呼び出し元によって割り当てを解除する必要があります。
[in] AutoInheritFlags
ACE の自動継承を制御するビットマスク。 次の 1 つ以上のビット フラグの論理 OR に設定します。
セキュリティ情報フラグ | 意味 |
---|---|
SEF_DACL_AUTO_INHERIT | このフラグが設定されている場合、DACL は自動継承 DACL として扱われ、次の「解説」セクションで説明されているように処理されます。 SecurityInformation パラメーターでDACL_SECURITY_INFORMATIONが設定されていない場合、このビットは無視されます。 |
SEF_SACL_AUTO_INHERIT | このフラグが設定されている場合、SACL は自動継承 SACL として扱われ、次の「解説」セクションで説明されているように処理されます。 SecurityInformation パラメーターでSACL_SECURITY_INFORMATIONが設定されていない場合、このビットは無視されます。 |
[in] PoolType
新しいセキュリティ記述子を割り当てるときに使用するプールの種類を指定します。次のいずれかになります。
- NonPagedPool
- PagedPool
- NonPagedPoolCacheAligned
- PagedPoolCacheAligned
通常、IRQL >= DISPATCH_LEVELまたは任意のスレッド コンテキストでバッファーにアクセスする場合、呼び出し元は PagedPool を指定します。それ以外の場合は NonPagedPool を指定します。
NonPagedPoolMustSucceed および NonPagedPoolCacheAlignedMustS プールの種類は古く、使用しないでください。
[in] GenericMapping
アクセスするオブジェクトの特定のアクセス型と標準アクセス型へのジェネリックのマッピングを指定するGENERIC_MAPPING構造体へのポインター。 このマッピング構造は、このルーチンに渡される前に安全にアクセスできる (つまり、必要に応じてキャプチャされる) ことが予想されます。
戻り値
リターン コード | 説明 |
---|---|
STATUS_SUCCESS | オブジェクトのセキュリティ記述子が正常に変更されました。 |
STATUS_BAD_DESCRIPTOR_FORMAT | 指定されたオブジェクトのセキュリティ記述子が自己相対形式ではありません。 |
STATUS_NO_SECURITY_ON_OBJECT | オブジェクトにはセキュリティ記述子がありません。 |
注釈
AutoInheritFlags パラメーターが 0 の場合、SeSetSecurityDescriptorInfoEx を呼び出した場合の効果は、SeSetSecurityDescriptorInfo を呼び出す場合と同じです。
AutoInheritFlags でSEF_DACL_AUTO_INHERIT ビットが指定されている場合、SeSetSecurityDescriptorInfoEx は DACL に次の規則を適用して、現在の記述子から新しいセキュリティ記述子を作成します。
現在のセキュリティ記述子または入力 SecurityDescriptor の制御ビットでSE_DACL_PROTECTED フラグが設定されていない場合、 SeSetSecurityDescriptorInfoEx は、現在のセキュリティ記述子の継承された ACE と SecurityDescriptor の非継承 ACE から出力セキュリティ記述子を構築します。 つまり、オブジェクトの ACL を変更することで、継承された ACE を変更することはできません。 この動作では、親コンテナーから継承された継承された ACE が保持されます。
入力 SecurityDescriptor でSE_DACL_PROTECTEDが設定されている場合、現在のセキュリティ記述子は無視されます。 出力セキュリティ記述子は、INHERITED_ACE ビットがオフになっている入力 SecurityDescriptor のコピーとして構築されます。
ACL エディターでは、オブジェクトの親から継承された ACE がオブジェクトに明示的に設定されていることを呼び出し元に示すINHERITED_ACE ビットをオフにするのが理想的です。
- SE_DACL_PROTECTEDが SecurityDescriptor ではなく、現在のセキュリティ記述子で設定されている場合、現在のセキュリティ記述子は無視されます。 出力セキュリティ記述子は、 SecurityDescriptor のコピーとして構築されます。 正しい ACE でINHERITED_ACE ビットがオンになっていることを確認するのは、呼び出し元の責任です。
AutoInheritFlags でSEF_SACL_AUTO_INHERIT ビットが指定されている場合、SeSetSecurityDescriptorInfoEx は新しい SACL に同様の規則を適用します。
アクセス制御と ACE の継承の詳細については、Microsoft Windows SDKドキュメントの「セキュリティ」セクションを参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 |
対象プラットフォーム | ユニバーサル |
Header | ntifs.h (Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |