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 結構的指標,指定所存取物件之泛型與特定和標準存取類型的對應。 此對應結構應該在傳遞至此例程之前安全存取(也就是在必要時擷取)。
傳回值
傳回碼 | 描述 |
---|---|
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 繼承自物件父系的 ACE 現在已在對象上明確設定。
- 如果SE_DACL_PROTECTED是在目前的安全性描述元中設定,而不是在 SecurityDescriptor中,則會忽略目前的安全性描述元。 輸出安全性描述元會建置為 SecurityDescriptor的複本。 呼叫者有責任確保正確的 ACE 已開啟INHERITED_ACE位。
如果 AutoInheritFlags 指定SEF_SACL_AUTO_INHERIT位,SeSetSecurityDescriptorInfoEx 會將類似的規則套用至新的 SACL。
如需訪問控制和 ACE 繼承的詳細資訊,請參閱 windows SDK 檔Microsoft的安全性一節。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 |
目標平臺 | 普遍 |
標頭 | ntifs.h (include Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |