(securitybaseapi.h) SetSecurityDescriptorDacl 函式
SetSecurityDescriptorDacl 函式會在 DACL) (任意存取控制清單中設定資訊。 如果安全性 描述項中已經有 DACL,則會取代 DACL。
語法
BOOL SetSecurityDescriptorDacl(
[in, out] PSECURITY_DESCRIPTOR pSecurityDescriptor,
[in] BOOL bDaclPresent,
[in, optional] PACL pDacl,
[in] BOOL bDaclDefaulted
);
參數
[in, out] pSecurityDescriptor
函式在其中加入 DACL 之SECURITY_DESCRIPTOR 結構的指標。 這個安全性描述元必須是 絕對 格式,這表示其成員必須是其他結構的指標,而不是連續數據的位移。
[in] bDaclPresent
旗標,表示在安全性描述元中存在 DACL。 如果此參數為TRUE,函式會在SECURITY_DESCRIPTOR_CONTROL結構中設定SE_DACL_PRESENT旗標,並使用 pDacl 和 bDaclDefaulted 參數中的值。 如果此參數為 FALSE,函式會清除SE_DACL_PRESENT旗標,並忽略 pDacl 和 bDaclDefaulted。
[in, optional] pDacl
ACL 結構的指標,指定安全描述元的 DACL。 如果此參數為 NULL,則會將 NULL DACL 指派給安全性描述項,以允許所有存取物件。 DACL 是由安全性描述項所參考,而不是複製到中。
[in] bDaclDefaulted
表示 DACL 來源的旗標。 如果此旗標為 TRUE,則 DACL 已由某些預設機制擷取。 如果為 FALSE,則表示 DACL 已由使用者明確指定。 函式會將此值儲存在 SECURITY_DESCRIPTOR_CONTROL結構的 SE_DACL_DEFAULTED 旗標中。 如果未指定此參數,則會清除SE_DACL_DEFAULTED旗標。
傳回值
如果函式成功,函式會傳回非零。
如果函式失敗,則會傳回零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
空白和不存在的 DACL 之間有一個重要差異。 當 DACL 是空的時,它不包含 (ACE) 的 存取控制專案 ;因此,不會明確授與任何訪問許可權。 因此,隱含拒絕對物件的存取。
當 pDacl 參數為 NULL) 時,當對象沒有 DACL (時,不會指派任何保護給物件,而且會授與所有存取要求。 為了協助維護安全性,請使用 DACL 限制存取。
bDaclPresent 旗標和 pDacl 參數的不同組態有三個可能的結果:
- 當 pDacl 參數指向 DACL 且 bDaclPresent 旗標為 TRUE 時,會指定 DACL,而且必須包含允許存取的 ACE,才能允許存取物件。
- 當 pDacl 參數未指向 DACL 且 bDaclPresent 旗標為 TRUE 時,會指定 NULL DACL。 允許所有存取。 您不應該搭配物件使用 NULL DACL,因為任何使用者可以變更安全描述元的 DACL 和擁有者。 這會干擾物件的使用。
- 當 pDacl 參數未指向 DACL 且 bDaclPresent 旗標為 FALSE 時,可以透過繼承或默認機制為物件提供 DACL。
範例
如需使用此函式的範例,請參閱 為New物件建立安全性描述元。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | securitybaseapi.h (包含 Windows.h) |
程式庫 | Advapi32.lib |
Dll | Advapi32.dll |