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。
NonPagedPoolMustSucceed 和 NonPagedPoolCacheAlignedMustS 集區類型已過時,不應再使用。
[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 |