AccessCheckByTypeAndAuditAlarmW 函数 (securitybaseapi.h)

AccessCheckByTypeAndAuditAlarm 函数确定安全描述符是否向由调用线程模拟的客户端授予一组指定的访问权限。 函数可以检查客户端对对象层次结构(例如对象、其属性集和属性)的访问。 函数作为一个整体授予或拒绝对层次结构的访问权限。 如果安全描述符具有 系统访问控制列表 (SACL) ,其中包含适用于客户端的 访问控制项 (ACE) ,则函数会在安全事件日志中生成任何必要的审核消息。

当前不支持警报。

语法

BOOL AccessCheckByTypeAndAuditAlarmW(
  [in]                LPCWSTR              SubsystemName,
  [in]                LPVOID               HandleId,
  [in]                LPCWSTR              ObjectTypeName,
  [in, optional]      LPCWSTR              ObjectName,
  [in]                PSECURITY_DESCRIPTOR SecurityDescriptor,
  [in, optional]      PSID                 PrincipalSelfSid,
  [in]                DWORD                DesiredAccess,
  [in]                AUDIT_EVENT_TYPE     AuditType,
  [in]                DWORD                Flags,
  [in, out, optional] POBJECT_TYPE_LIST    ObjectTypeList,
  [in]                DWORD                ObjectTypeListLength,
  [in]                PGENERIC_MAPPING     GenericMapping,
  [in]                BOOL                 ObjectCreation,
  [out]               LPDWORD              GrantedAccess,
  [out]               LPBOOL               AccessStatus,
  [out]               LPBOOL               pfGenerateOnClose
);

参数

[in] SubsystemName

指向以 null 结尾的字符串的指针,该字符串指定调用函数的子系统的名称。 此字符串显示在函数生成的任何审核消息中。

[in] HandleId

指向表示客户端对象句柄的唯一值的指针。 如果拒绝访问,系统会忽略此值。

[in] ObjectTypeName

指向以 null 结尾的字符串的指针,该字符串指定要创建或访问的对象类型。 此字符串显示在函数生成的任何审核消息中。

[in, optional] ObjectName

指向以 null 结尾的字符串的指针,该字符串指定要创建或访问的对象的名称。 此字符串显示在函数生成的任何审核消息中。

[in] SecurityDescriptor

指向 SECURITY_DESCRIPTOR结构的指针 ,针对该结构检查访问。

[in, optional] PrincipalSelfSid

指向 SID) (安全标识符 的指针。 如果安全描述符与表示主体 (例如用户对象) 的对象相关联, 则 PrincipalSelfSid 参数应为对象的 SID。 在评估访问时,此 SID 在逻辑上替换包含已知PRINCIPAL_SELF SID (S-1-5-10) 的任何 ACE 中的 SID。 有关已知 SID 的信息,请参阅 已知 SID

如果受保护的对象不表示主体,请将此参数设置为 NULL

[in] DesiredAccess

一个访问掩码,指定对检查的访问权限。 此掩码必须已由 MapGenericMask 函数映射,才能包含任何泛型访问权限。

如果此参数MAXIMUM_ALLOWED,则函数将设置 GrantedAccess 访问掩码以指示安全描述符允许客户端的最大访问权限。

[in] AuditType

要生成的审核类型。 这可以是 AUDIT_EVENT_TYPE 枚举类型的值之一。

[in] Flags

一个标志,用于控制调用 进程 未启用SE_AUDIT_NAME特权时函数的行为。 如果设置了AUDIT_ALLOW_NO_PRIVILEGE标志,则函数在未启用权限时执行访问检查而不生成审核消息。 如果此参数为零,则如果未启用权限,函数将失败。

[in, out, optional] ObjectTypeList

指向OBJECT_TYPE_LIST结构的数组的指针,这些结构标识要为其检查访问的对象类型的层次结构。 数组中的每个元素指定一个用于标识对象类型的 GUID 和一个值,该值指示对象类型层次结构中对象类型的级别。 数组不应有两个具有相同 GUID 的元素。

数组必须至少有一个元素。 数组中的第一个元素必须处于零级,并标识对象本身。 数组只能有一个级别零元素。 第二个元素是级别 1 的子对象,例如属性集。 每个级别 1 条目后面的是级别 2 到 4 子对象的从属条目。 因此,数组中元素的级别可能是 {0, 1, 2, 2, 1, 2, 3}。 如果对象类型列表不按顺序排列, AccessCheckByTypeAndAuditAlarm 将失败, GetLastError 将返回ERROR_INVALID_PARAMETER。

[in] ObjectTypeListLength

ObjectTypeList 数组中的元素数。

[in] GenericMapping

指向与要检查其访问权限的对象关联的 GENERIC_MAPPING 结构的指针。

[in] ObjectCreation

一个标志,用于确定调用应用程序在授予访问权限时是否将创建新对象。 值为 TRUE 表示应用程序将创建新对象。 值为 FALSE 表示应用程序将打开现有对象。

[out] GrantedAccess

指向接收已授予访问权限的访问掩码的指针。 如果 AccessStatus 设置为 FALSE,则函数会将访问掩码设置为零。 如果函数失败,则它不会设置访问掩码。

[out] AccessStatus

指向接收访问检查结果的变量的指针。 如果安全描述符允许对客户端的请求访问权限, 则 AccessStatus 设置为 TRUE。 否则, AccessStatus 设置为 FALSE ,可以调用 GetLastError 以获取扩展错误信息。

[out] pfGenerateOnClose

指向函数返回时由审核生成例程设置的标志的指针。 关闭对象句柄时,将此标志传递给 ObjectCloseAuditAlarm 函数。

返回值

如果函数成功,该函数将返回非零值。

如果函数失败,则返回零。 要获得更多的错误信息,请调用 GetLastError。

注解

有关详细信息,请参阅 AccessCheck 工作原理 概述。

如果 PrincipalSelfSidObjectTypeList 参数为 NULL则 AuditType 参数为 AuditEventObjectAccess,Flags 参数为零,则 AccessCheckByTypeAndAuditAlarm 的执行方式与 AccessCheckAndAuditAlarm 函数相同。

ObjectTypeList 数组不一定表示整个定义的对象。 相反,它表示要对其检查访问的 对象的子集。 例如,若要检查对属性集中两个属性的访问权限,请指定具有四个元素的对象类型列表:对象本身位于级别 0,属性设置为级别 1,在级别 2 处设置两个属性。

AccessCheckByTypeAndAuditAlarm 函数评估应用于对象本身的 ACE,以及 ObjectTypeList 数组中列出的对象类型特定于对象的 ACE。 对于 ObjectTypeList 数组中未列出的对象类型,函数将忽略特定于对象的 ACE。 因此, AccessStatus 参数中返回的结果指示允许访问 ObjectTypeList 参数定义的对象的子集,而不是整个对象。

有关 ACE 层次结构如何控制对对象及其子对象的访问的详细信息,请参阅 用于控制对对象属性的访问的 ACE

若要在安全事件日志中生成审核消息,调用进程必须启用SE_AUDIT_NAME特权。 系统会在调用进程 的主令牌 (而不是线程的 模拟令牌 )中检查此特权。 如果 Flags 参数包含 AUDIT_ALLOW_NO_PRIVILEGE 标志,则函数在未启用权限时执行访问检查而不生成审核消息。

如果调用线程未模拟客户端, AccessCheckByTypeAndAuditAlarm 函数将失败。

如果安全描述符不包含所有者和组 SID, 则 AccessCheckByTypeAndAuditAlarm 将失败并ERROR_INVALID_SECURITY_DESCR。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 securitybaseapi.h (包括 Windows.h)
Library Advapi32.lib
DLL Advapi32.dll

另请参阅

AUDIT_EVENT_TYPE
AccessCheck
AccessCheckAndAuditAlarm
AccessCheckByType
AccessCheckByTypeResultList
AccessCheckByTypeResultListAndAuditAlarm
客户端/服务器访问控制
客户端/服务器访问控制函数
GENERIC_MAPPING
AccessCheck 的工作原理
MakeAbsoluteSD
MapGenericMask
OBJECT_TYPE_LIST
ObjectCloseAuditAlarm
PRIVILEGE_SET
SECURITY_DESCRIPTOR