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 检查。 但是, SeAccessCheck 不会执行任何特权检查,除非调用方专门通过设置ACCESS_SYSTEM_SECURITY或WRITE_OWNER位来请求这些权限检查。
[in] PreviouslyGrantedAccess
指定已授予的访问权限 ACCESS_MASK 位掩码,例如,由于持有权限而授予的访问权限。
[out] Privileges
指向调用方提供的变量的指针,该变量设置为将用作访问验证的一部分 的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 安全模型以及Microsoft Windows SDK中有关这些主题的文档。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 |
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) , PowerIrpDDis (wdm) |