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

值的指標,指定要設定的安全性資訊。 可以是下列一或多個的組合。

意義
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 自動繼承的位掩碼。 設定為下列一或多個位旗標的邏輯 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

NonPagedPoolMustSucceedNonPagedPoolCacheAlignedMustS 集區類型已過時,不應再使用。

[in] GenericMapping

GENERIC_MAPPING 結構的指標,指定所存取物件之泛型與特定和標準存取類型的對應。 此對應結構必須是安全存取 (,也就是說,在傳遞至此例程之前,如有必要) 擷取。

傳回值

傳回碼 Description
STATUS_SUCCESS 已成功修改對象的安全性描述元。
STATUS_BAD_DESCRIPTOR_FORMAT 所提供的物件安全性描述元不是自我相對格式。
STATUS_NO_SECURITY_ON_OBJECT 對象沒有安全性描述元。

備註

如果 AutoInheritFlags 參數為零,則呼叫 SeSetSecurityDescriptorInfoEx 的效果與呼叫 SeSetSecurityDescriptorInfo 的效果相同。

如果 AutoInheritFlags 指定SEF_DACL_AUTO_INHERIT位, SeSetSecurityDescriptorInfoEx 會將下列規則套用至 DACL,以從目前的描述元建立新的安全性描述元:

  • 如果未在目前安全性描述元或輸入 SecurityDescriptor 的控件位中設定SE_DACL_PROTECTED旗標, SeSetSecurityDescriptorInfoEx 會從目前安全性描述元的繼承 ACE 和 SecurityDescriptor 的非繼承 ACE 建構輸出安全性描述元。 也就是說,藉由變更 物件上的 ACL,就無法變更繼承的 ACE。 此行為會保留繼承自父容器的繼承 ACE。

  • 如果在輸入 SecurityDescriptor 中設定SE_DACL_PROTECTED,則會忽略目前的安全性描述元。 輸出安全性描述元會建置為輸入 SecurityDescriptor 的複本,並關閉任何INHERITED_ACE位。

在理想情況下,ACL 編輯器應該關閉INHERITED_ACE位,指出其呼叫端現在已在對象上明確設定繼承自物件的父系 ACE。

  • 如果SE_DACL_PROTECTED是在目前的安全性描述元中設定,而不是在 SecurityDescriptor 中設定,則會忽略目前的安全性描述元。 輸出安全性描述元會建置為 SecurityDescriptor 的複本。 呼叫者必須負責確保正確的 ACE 已開啟INHERITED_ACE位。

如果 AutoInheritFlags 指定SEF_SACL_AUTO_INHERIT位, SeSetSecurityDescriptorInfoEx 會將類似的規則套用至新的 SACL。

如需訪問控制和 ACE 繼承的詳細資訊,請參閱 Microsoft Windows SDK 檔的安全性一節。

規格需求

需求
最低支援的用戶端 Windows 2000
目標平台 Universal
標頭 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