RtlCreateAcl 函数 (ntifs.h)
RtlCreateAcl 例程创建并初始化 ACL (访问控制) 。
语法
NTSYSAPI NTSTATUS RtlCreateAcl(
[out] PACL Acl,
[in] ULONG AclLength,
ULONG AclRevision
);
参数
[out] Acl
指向调用方分配的缓冲区的指针,用于接收初始化的 ACL 结构。 此缓冲区必须至少是 ACL ( 的大小) ,
[in] AclLength
Acl 参数指向的缓冲区的长度(以 字节 为单位)。 此值必须足够大,以包含 ACL 标头以及要存储在 ACL (ACE) 的所有访问控制条目。 有关计算 ACL 大小的信息,请参阅以下"备注"部分。
AclRevision
要添加的 ACE 的 ACL 修订级别。 Windows版本要求如下:
值 | 含义 |
---|---|
|
修订级别在所有版本Windows有效。 |
|
NoteAceRevision ACL_REVISION_DS Acl 中的 ACL 包含特定于对象的 ACE 时,
|
返回值
RtlCreateAcl 可以返回以下状态值之一:
返回代码 | 说明 |
---|---|
|
ACL 已成功创建和初始化。 |
|
新 ACL 不适合位于 Acl 的缓冲区 中。 需要更大的 ACL 缓冲区。 |
|
指定的修订版本不是最新的,或者 AclLength 的值太大。 |
注解
RtlCreateAcl 初始化的 ACL 不包含 ACE (访问控制) 。 此 ACL 为空,而不是不存在的 ACL。 如果将空 ACL 应用于对象,ACL 将隐式拒绝对该对象的所有访问。 若要将 ACE 添加到 ACL,请使用 RtlAddAccessAllowedAce。
若要计算 ACL 的大小, (ACL) ACL 的大小添加到 ACL 中存储的所有 AES 的大小。 若要计算 ACE 的大小,将 ACE 结构的大小(如 sizeof (ACCESS_ALLOWED_ACE) )添加到与 ACE 关联的 SID 的长度,然后减去 SidStart 成员 (该大小是 ACE 结构和 SID) 的一部分。 使用 RtlLengthSid 函数获取指定 SID 的长度。
以下示例演示如何计算允许访问的 ACE 的大小:
sizeof (ACCESS_ALLOWED_ACE) - sizeof (ACCESS_ALLOWED_ACE.SidStart)
+ GetLengthSid (pAceSid);
若要计算 ACL 的大小,请使用以下算法,在 ACE 表达式的 sizeof 中 (ACE) 结构:
cbAcl = sizeof (ACL);
for (i = 0 ; i < nAceCount ; i++) {
// subtract ACE.SidStart from the size
cbAce = sizeof (ACE) - sizeof (DWORD);
// add this ACE's SID length
cbAce += GetLengthSid (pAceSid[i]);
// add the length of each ACE to the total ACL length
cbAcl += cbAce;
}
有关安全性和访问控制详细信息,请参阅平台软件开发工具包 (SDK) 中有关这些主题的文档。
要求
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
请参阅
反馈
提交和查看相关反馈