服务器应用程序使用AccessCheck函数,以根据与对象关联的访问控制来检查客户端对对象的访问。
BOOL AccessCheck(
PSECURITY_DESCRIPTOR 【pSecurityDescriptor】, | //指向安全描述符的指针 |
HANDLE 【ClientToken】, | //处理客户端访问令牌 |
DWORD 【DesiredAccess】, | //访问掩码以请求 |
PGENERIC_MAPPING 【GenericMapping】, | //通用映射结构的地址 |
PPRIVILEGE_SET 【PrivilegeSet】, | //特权集结构的地址 |
LPDWORD 【PrivilegeSetLength】, | //特权集合结构的大小 |
LPDWORD 【GrantedAccess】, | //授权访问掩码的地址 |
LPBOOL 【AccessStatus】 | //指示是否授予访问权限的标志的地址 |
); |
参数
【pSecurityDescriptor】
指向检查访问的SECURITY_DESCRIPTOR结构的指针。
【ClientToken】
标识表示客户端尝试访问的访问令牌。
必须从通信会话层__获取此句柄,例如命名管道__以防止可能的安全策略违规。
【DesiredAccess】
指定要请求的访问掩码。该掩码必须由MapGenericMask函数映射,以不包含通用访问权限。
【GenericMapping】
指向与正在检查访问的对象相关联的GENERIC_MAPPING结构的指针。
【PrivilegeSet】
指向PRIVILEGE_SET结构的指针,该函数用用于执行访问验证的任何特权填充。如果没有使用特权,则缓冲区包含由零权限组成的权限集。
【PrivilegeSetLength】
指定【PrivilegeSet】参数指向的缓冲区的大小(以字节为单位)。
【GrantedAccess】
指向变量的指针功能填充一个访问掩码,指示哪些访问权限被授予。如果功能失败,则不提供该访问掩码。
【AccessStatus】
指向访问检查成功或失败的标志。如果【AccessStatus】为TRUE,则访问令牌具有对该对象的请求访问权限。如果【AccessStatus】为FALSE,则访问令牌不具有请求的访问权限。当此参数为FALSE时,应用程序可以使用GetLastError函数获取扩展错误信息。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
AccessCheck功能将指定的安全描述符与指定的访问令牌进行比较,并在【AccessStatus】参数中指示访问是否被授予或拒绝。如果访问被授予,请求的访问掩码将成为对象的授权访问掩码。
在访问检查期间只检查自由访问控制列表。
也可以看看
AccessCheckAndAuditAlarm, AreAllAccessesGranted, AreAnyAccessesGranted, GENERIC_MAPPING, MapGenericMask, PrivilegeCheck, PRIVILEGE_SET, SECURITY_DESCRIPTOR