次の方法で共有


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

通常、呼び出し元 PagedPoolを指定するか、IRQL >= DISPATCH_LEVELまたは任意のスレッド コンテキストでバッファーにアクセスする場合は 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 ビットをオフにするのが理想的です。

  • SecurityDescriptorではなく、現在のセキュリティ記述子にSE_DACL_PROTECTEDが設定されている場合、現在のセキュリティ記述子は無視されます。 出力セキュリティ記述子は、SecurityDescriptorのコピーとして構築されます。 正しい ACE で INHERITED_ACE ビットがオンになっていることを確認するのは呼び出し元の責任です。

AutoInheritFlags SEF_SACL_AUTO_INHERIT ビットを指定する場合、SeSetSecurityDescriptorInfoEx は、新しい SACL に同様の規則を適用します。

アクセス制御と ACE 継承の詳細については、Microsoft Windows SDK ドキュメントの「セキュリティ」セクションを参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000
ターゲット プラットフォーム 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

関連項目

ACE

ACL

GENERIC_MAPPING

RtlCreateSecurityDescriptor

RtlCreateSecurityDescriptorRelative

RtlLengthSecurityDescriptorする

RtlSetDaclSecurityDescriptor

RtlSetOwnerSecurityDescriptorする

RtlValidSecurityDescriptor

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SeQuerySecurityDescriptorInfo

SeSetSecurityDescriptorInfo