ZwSetSecurityObject 函数 (ntifs.h)
ZwSetSecurityObject 例程设置对象的安全状态。
语法
NTSYSAPI NTSTATUS ZwSetSecurityObject(
[in] HANDLE Handle,
[in] SECURITY_INFORMATION SecurityInformation,
[in] PSECURITY_DESCRIPTOR SecurityDescriptor
);
参数
[in] Handle
要设置其安全状态的 对象的句柄。 此句柄必须具有 在 SecurityInformation 参数说明中显示的表的“含义”列中指定的访问权限。
[in] SecurityInformation
指定要设置的信息 的SECURITY_INFORMATION值。 可以是以下一个或多个值的组合。
值 | 含义 |
---|---|
DACL_SECURITY_INFORMATION | 指示要设置对象的 DACL) (任意访问控制列表。 需要WRITE_DAC访问权限。 |
GROUP_SECURITY_INFORMATION | 指示要设置对象的主组标识符。 需要WRITE_OWNER访问权限。 |
OWNER_SECURITY_INFORMATION | 指示要设置对象的所有者标识符。 需要WRITE_OWNER访问权限。 |
SACL_SECURITY_INFORMATION | 指示要设置对象的系统 ACL (SACL) 。 需要ACCESS_SYSTEM_SECURITY访问权限。 |
[in] SecurityDescriptor
指向要为对象设置的安全描述符的指针。
返回值
ZwSetSecurityObject 返回STATUS_SUCCESS或适当的错误状态。 可能的错误状态代码包括以下内容:
返回代码 | 说明 |
---|---|
STATUS_ACCESS_DENIED | 句柄 没有所需的访问权限。 |
STATUS_ACCESS_VIOLATION | SecurityDescriptor 是 NULL 指针。 |
STATUS_INSUFFICIENT_RESOURCES | 无法捕获对象的安全描述符。 |
STATUS_INVALID_ACL | 对象的安全描述符包含无效的 ACL。 |
STATUS_INVALID_HANDLE | 句柄 不是有效的句柄。 |
STATUS_INVALID_SECURITY_DESCR | SecurityDescriptor 不指向有效的安全描述符。 |
STATUS_INVALID_SID | 对象的安全描述符包含无效 的 SID。 |
STATUS_OBJECT_TYPE_MISMATCH | 句柄 不是预期类型的句柄。 |
STATUS_UNKNOWN_REVISION | 对象的安全描述符的修订级别未知或不受支持。 |
注解
安全描述符可以采用绝对或自相对形式。 在自相对形式中,结构的所有成员都位于内存中。 在绝对形式中,结构仅包含指向成员的指针。 有关详细信息,请参阅 Windows SDK 文档的安全性部分中的“绝对和 Self-Relative 安全描述符”。
有关安全性和访问控制的详细信息,请参阅 面向驱动程序开发人员的 Windows 安全模型 以及 Windows SDK 中有关这些主题的文档。
微筛选器应使用 FltSetSecurityObject 而不是 ZwSetSecurityObject。
ZwSetSecurityObject 的调用方必须在 IRQL = PASSIVE_LEVEL 运行,并且启用了特殊的内核 APC。
注意
如果在用户模式下调用 ZwSetSecurityObject 函数,则应使用名称“NtSetSecurityObject”而不是“ZwSetSecurityObject”。
对于来自内核模式驱动程序的调用,Windows 本机系统服务例程的 NtXxx 和 ZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP |
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (请参阅备注部分) |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) 、 PowerIrpDDis (wdm) |