RtlSetDaclSecurityDescriptor 函数 (wdm.h)

RtlSetDaclSecurityDescriptor 例程设置绝对格式安全描述符的 DACL 信息,或者如果安全描述符中已有 DACL,则会取代它。

语法

NTSYSAPI NTSTATUS RtlSetDaclSecurityDescriptor(
  [in, out]      PSECURITY_DESCRIPTOR SecurityDescriptor,
  [in]           BOOLEAN              DaclPresent,
  [in, optional] PACL                 Dacl,
  [in, optional] BOOLEAN              DaclDefaulted
);

参数

[in, out] SecurityDescriptor

指向 SECURITY_DESCRIPTOR 结构的指针。 此结构是要向其应用 DACL 的安全描述符。

[in] DaclPresent

是否指示 DACL 存在于安全描述符中。 如果此参数为 FALSE,RtlSetDaclSecurityDescriptor 会将安全描述符中的SE_DACL_PRESENT控制标志设置为 FALSE。 在这种情况下,将忽略剩余的可选参数(DaclDaclDefaulted)。 如果 DaclPresentTRUE,则安全描述符中的SE_DACL_PRESENT标志设置为 TRUE ,其余可选参数 不会被 忽略。 有关SE_DACL_PRESENT标志的详细信息,请参阅 SECURITY_DESCRIPTOR_CONTROL

[in, optional] Dacl

指向安全描述符的 DACL 的指针。 如果此参数为 NULL,则安全描述符中的 DACL 指针设置为 NULLNULL DACL 指针无条件地授予对对象的所有访问权限,与空 DACL 不同。 空 DACL 拒绝对对象的所有访问。 如果 Dacl 为非 NULL,则调用方提供的 ACL 结构由安全描述符引用,但不会复制到该描述符中。 调用方可以从分页系统内存分配 ACL 结构,并且可以调用 RtlCreateAcl 例程来初始化结构。

警告❗设置 NULL DACL 允许无限制访问对象,因此,应仅在安全评估验证这是可接受的结果的战略方案中使用。 请考虑使用 DACL,默认为默认拒绝所有访问。

[in, optional] DaclDefaulted

DACL 是由某些默认机制提供的,还是由调用方显式指定。 如果此参数为 TRUE,则 DACL 由默认机制提供。 如果 DaclDefaultedFALSE,则调用方显式指定 DACL。 RtlSetDaclSecurityDescriptor 将此参数指定的值复制到安全描述符中的SE_DACL_DEFAULTED控制标志。 有关SE_DACL_DEFAULTED标志的详细信息,请参阅 SECURITY_DESCRIPTOR_CONTROL

返回值

RtlSetDaclSecurityDescriptor 可以返回以下状态值之一。

返回代码 说明
STATUS_SUCCESS
调用成功完成。
STATUS_UNKNOWN_REVISION
安全描述符的修订未知。
STATUS_INVALID_SECURITY_DESCR
安全描述符不是绝对格式安全描述符。

要求

要求 价值
最低支持的客户端 从 Windows 2000 开始可用。
目标平台 普遍
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
图书馆 NtosKrnl.lib
DLL NtosKrnl.exe(内核模式):Ntdll.dll(用户模式)
IRQL PASSIVE_LEVEL

另请参阅

ACL

RtlCreateAcl

RtlCreateSecurityDescriptor

RtlLengthSecurityDescriptor

RtlValidSecurityDescriptor

SECURITY_DESCRIPTOR

SECURITY_DESCRIPTOR_CONTROL