SeAssignSecurityEx 函式 (wdm.h)

SeAssignSecurityEx 例程會針對具有下列選擇性參數的新物件建置自我相對安全性描述元:物件的父目錄安全性描述元、對象的明確安全性描述元,以及對象類型。

語法

NTSTATUS SeAssignSecurityEx(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in, optional] GUID                      *ObjectType,
  [in]           BOOLEAN                   IsDirectoryObject,
  [in]           ULONG                     AutoInheritFlags,
  [in]           PSECURITY_SUBJECT_CONTEXT SubjectContext,
  [in]           PGENERIC_MAPPING          GenericMapping,
  [in]           POOL_TYPE                 PoolType
);

參數

[in, optional] ParentDescriptor

父物件的 SECURITY_DESCRIPTOR 指標,其中包含要建立的新物件。 ParentDescriptor 可以是 NULL,或具有 NULL 系統存取控制清單 (SACL) 或 NULL 任意存取控制清單 (DACL) 。

[in, optional] ExplicitDescriptor

套用至新對象的明確 SECURITY_DESCRIPTOR 指標。 ExplicitDescriptor 可以是 NULL,或具有 NULL SACL 或 NULL DACL。

[out] NewDescriptor

接收傳回 之SECURITY_DESCRIPTOR的指標。 SeAssignSecurityEx 會從分頁記憶體集區配置緩衝區。

[in, optional] ObjectType

所建立物件類型的 GUID 指標。 如果對象沒有 GUID,ObjectType 必須設定NULL

[in] IsDirectoryObject

指定新物件是否為目錄物件。 如果 IsDirectoryObject 設定為 TRUE,則新物件為目錄對象,否則新物件不是目錄物件。

[in] AutoInheritFlags

指定套用至訪問控制清單中的訪問控制專案 (ACE) 的自動繼承類型, (ParentDescriptor 所指定的 ACL) 。 AutoInheritFlags 也會控制許可權檢查、擁有者檢查,以及設定 NewDescriptor 的預設擁有者和群組。 AutoInheritFlags 必須設定為下列一或多個值的邏輯 OR:

意義
SEF_DACL_AUTO_INHERIT 除了 ExplicitDescriptor 所指定的明確 ACE 之外,NewDescripto r 還會繼承 ParentDescriptor DACL 中的 ACE。
SEF_SACL_AUTO_INHERIT 除了 ExplicitDescriptor 所指定的明確 ACE 之外,NewDescriptor 還會繼承 ParentDescriptor SACL 中的 ACE。
SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT ExplicitDescriptorObjectType 所指定之物件類型的預設描述元。 如果 ACE 繼承自 ParentDescriptor,則不會使用 ExplicitDescriptor
SEF_AVOID_PRIVILEGE_CHECK 未完成許可權檢查。 此旗標對於自動繼承很有用,因為它可避免每個需要更新之子系的許可權檢查。
SEF_AVOID_OWNER_CHECK 未完成擁有者檢查。
SEF_DEFAULT_OWNER_FROM_PARENT 如果 ExplicitDescriptor 指定擁有者,則不會使用此旗標, 而且 NewDescriptor 的擁有者會設定為 ExplictDescriptor 所指定的擁有者。

如果 ExplicitDescriptor 未指定擁有者,則會以下列方式使用此旗標:如果已設定旗標, 則 NewDescriptor 的擁有者會設定為 ParentDescriptor 的擁有者。 否則,NewDescriptor 的擁有者會設定為 SubjectContext 所指定的擁有者。

SEF_DEFAULT_GROUP_FROM_PARENT 如果 Group 是由 ExplicitDescriptor 指定,則不會使用此旗標,而且 NewDescriptor 的群組會設定為 ExplictDescriptor 所指定的群組。

如果 ExplicitDescriptor 未指定群組,則會以下列方式使用此旗標:如果設定旗標, 則 NewDescriptor 的群組會設定為 ParentDescriptor 的群組。 否則,NewDescriptor 的群組會設定為 SubjectContext 所指定的群組。

 

下表說明系統指派和任意 ACL:

非預設明確描述元 (1) 默認明確描述元 (2) 明確描述元
ACL 繼承自父描述元 (3) 。 指派繼承和明確 ACL (5) (6) 。 指派繼承的 ACL。 指派繼承的 ACL。
ACL 不是繼承自父描述元 (4) 。 指派非預設 ACL。 指派預設 ACL。 未指派 ACL。
 

工作分派附注

  1. 未指定SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT旗標。
  2. 指定SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT旗標。
  3. ACL 的自動繼承旗標是指定 (SEF_DACL_AUTO_INHERIT 或SEF_SACL_AUTO_INHERIT) 。
  4. 未指定 ACL 的自動繼承旗標。
  5. 在其 AceFlags 成員中設定INHERITED_ACE位的 ACE ,不會 複製到指派的安全性描述元。
  6. 繼承自父描述元的 ACE 會在明確描述元指定的 ACE 之後附加。

[in] SubjectContext

建立物件之主體的安全性內容指標。 SubjectContext 可用來擷取新對象的預設安全性資訊,包括預設擁有者、主要群組和任意訪問控制。

[in] GenericMapping

存取遮罩值的陣列指標,指定每個泛型許可權與物件特定許可權之間的對應。

[in] PoolType

不使用這個參數。 保存新安全性描述元的緩衝區一律會從分頁集區配置。

傳回值

SeAssignSecurityEx 會傳回下列其中一個值:

傳回碼 Description
STATUS_SUCCESS
指派成功。
STATUS_INVALID_OWNER
以新安全性描述元擁有者身分提供的 SID 不是呼叫端獲授權指派為對象擁有者的 SID。
STATUS_PRIVILEGE_NOT_HELD
呼叫端沒有明確指派指定 SACL 所需的許可權 (SeSecurityPrivilege) 。

備註

SeAssignSecurityEx 會以下列方式擴充 SeAssignSecurity 的基本作業:

  • ObjectType 選擇性地指定物件類型。 物件特定繼承是由物件特定 ACE 的下列成員所控制: FlagsInheritedObjectTypeHeader.AceFlags
  • AutoInheritFlags 會指定所使用的 ACE 自動繼承類型。 AutoInheritFlags 也會控制許可權檢查、擁有者檢查,以及設定 NewDescriptor 的預設擁有者和群組。
如需安全性和訪問控制的詳細資訊,請參閱 Microsoft Windows SDK 中的這些主題檔。

規格需求

需求
最低支援的用戶端 從 Windows 2000 開始提供。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIS (storport)

另請參閱

GENERIC_MAPPING

SECURITY_DESCRIPTOR

SeAssignSecurity

SeDeassignSecurity