seAccessCheck 函数 (wdm.h)
SeAccessCheck 例程确定是否可向受安全描述符和对象所有者保护的对象授予所请求的访问权限。
语法
BOOLEAN SeAccessCheck(
[in] PSECURITY_DESCRIPTOR SecurityDescriptor,
[in] PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
[in] BOOLEAN SubjectContextLocked,
[in] ACCESS_MASK DesiredAccess,
[in] ACCESS_MASK PreviouslyGrantedAccess,
[out] PPRIVILEGE_SET *Privileges,
[in] PGENERIC_MAPPING GenericMapping,
[in] KPROCESSOR_MODE AccessMode,
[out] PACCESS_MASK GrantedAccess,
[out] PNTSTATUS AccessStatus
);
参数
[in] SecurityDescriptor
指向描述保护所访问对象的安全描述符 的SECURITY_DESCRIPTOR 结构的指针。
[in] SubjectSecurityContext
指向指定主题捕获的安全上下文 的SECURITY_SUBJECT_CONTEXT 结构的指针。
[in] SubjectContextLocked
指示用户的主题上下文是否已锁定,因此不必再次锁定。
[in] DesiredAccess
为调用方尝试获取的访问权限指定 ACCESS_MASK 位掩码。 如果调用方设置MAXIMUM_ALLOWED位,则例程将执行所有 DACL 检查。 但是,除非调用方通过设置ACCESS_SYSTEM_SECURITY或WRITE_OWNER位来专门请求它们,否则例程不会执行任何特权检查。
[in] PreviouslyGrantedAccess
指定已授予访问权限 的ACCESS_MASK 位掩码,例如由于拥有特权而授予的访问权限。
[out] Privileges
指向要设置为将用作访问验证一部分 的PRIVILEGE_SET结构的PRIVILEGE_SET 结构的地址的调用方提供的变量的指针,或者此参数可以为 NULL。 返回的缓冲区(如果有)必须由具有 SeFreePrivileges 的调用方释放。
[in] GenericMapping
指向与此对象类型关联的 GENERIC_MAPPING 结构的指针。 此值指定每个GENERIC_XXX 访问权限所暗示的特定访问权限。
[in] AccessMode
指定要在检查中使用的访问模式,即 UserMode 或 KernelMode。
[out] GrantedAccess
指向指示已授予访问权限的返回访问掩码的指针。 如果调用方指定MAXIMUM_ALLOWED, 并且 SecurityDescriptor 中的 DACL 为 NULL,则例程将返回GENERIC_ALL加上调用方显式请求的任何其他访问。
[out] AccessStatus
指向指示为何拒绝访问的状态值的指针。
返回值
如果允许访问, SeAccessCheck 将返回 TRUE。
备注
SeAccessCheck 可能会针对 SeTakeOwnershipPrivilege 和 SeSecurityPrivilege 执行特权测试,具体取决于所请求的访问。 它可能会在操作系统的未来版本中执行其他特权测试。
此例程还可以检查调用方是对象的所有者,以便授予WRITE_DAC还是READ_CONTROL访问权限。
如果此例程返回 FALSE,调用方应使用返回的 AccessStatus 作为其返回值。 也就是说,调用方应避免硬编码STATUS_ACCESS_DENIED或任何其他特定STATUS_XXX 值的返回值。
要求
最低受支持的客户端 | 在 Windows 2000 和更高版本的 Windows 中可用。 |
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDIS (storport) 、 PowerIrpDDis (wdm) |