IEffectivePermission2::ComputeEffectivePermissionWithSecondarySecurity 方法 (aclui.h)

ComputeEffectivePermissionWithSecondarySecurity 方法计算对象的有效权限。 它支持集成辅助或自定义安全策略。 可以选择通过实现 ISecurityInformation4 接口来提供此附加安全信息。 此方法支持复合标识,即主体的访问令牌包含用户和设备授权信息。

语法

HRESULT ComputeEffectivePermissionWithSecondarySecurity(
  [in]           PSID                                   pSid,
  [in, optional] PSID                                   pDeviceSid,
  [in, optional] PCWSTR                                 pszServerName,
  [in]           PSECURITY_OBJECT                       pSecurityObjects,
  [in]           DWORD                                  dwSecurityObjectCount,
  [in, optional] PTOKEN_GROUPS                          pUserGroups,
  [in, optional] PAUTHZ_SID_OPERATION                   pAuthzUserGroupsOperations,
  [in, optional] PTOKEN_GROUPS                          pDeviceGroups,
  [in, optional] PAUTHZ_SID_OPERATION                   pAuthzDeviceGroupsOperations,
  [in, optional] PAUTHZ_SECURITY_ATTRIBUTES_INFORMATION pAuthzUserClaims,
  [in, optional] PAUTHZ_SECURITY_ATTRIBUTE_OPERATION    pAuthzUserClaimsOperations,
  [in, optional] PAUTHZ_SECURITY_ATTRIBUTES_INFORMATION pAuthzDeviceClaims,
  [in, optional] PAUTHZ_SECURITY_ATTRIBUTE_OPERATION    pAuthzDeviceClaimsOperations,
  [in, out]      PEFFPERM_RESULT_LIST                   pEffpermResultLists
);

参数

[in] pSid

指向 SID 结构的指针,该结构表示要确定其有效权限的安全主体。

[in, optional] pDeviceSid

指向 SID 结构的指针,该结构表示主体从中访问对象的设备。 如果这不是 NULL,并且你正在使用 AuthzAccessCheck 函数来计算有效权限,则设备 SID 可能会通过使用 AuthzInitializeCompoundContext 函数与 pSid 参数复合。

[in, optional] pszServerName

对象所在的服务器的名称。 此名称与从 ISecurityInformation::GetObjectInformation 方法返回的名称相同。

[in] pSecurityObjects

安全对象的数组。 此数组由访问控制编辑器推断的对象以及从 ISecurityInformation4::GetSecondarySecurity 方法返回的对象组成。

[in] dwSecurityObjectCount

pSecurityObjects 参数中的安全对象数,以及 pEffpermResultLists 参数中的结果列表数。

[in, optional] pUserGroups

指向其他用户组的指针,这些用户组应用于修改从 pSid 参数初始化的安全上下文。 如果使用 AuthzAccessCheck 函数计算有效权限,则可以通过使用 AuthzContextInfoGroupsSids 作为 SidClass 参数调用 AuthzModifySids 函数来完成修改。

[in, optional] pAuthzUserGroupsOperations

指向 AUTHZ_SID_OPERATION 结构的数组的指针,这些结构指定如何为 pUserGroups 参数中的每个用户组修改 authz 上下文中的用户组。 此数组包含的元素数与 pUserGroups 参数中的组数相同。

[in, optional] pDeviceGroups

指向其他设备组的指针,这些设备组应用于修改从 pSid 参数初始化的安全上下文,或者通过复合从 pSidpDeviceSid 参数初始化的上下文而创建的安全上下文。 如果使用 AuthzAccessCheck 函数计算有效权限,则可以通过使用 AuthzContextInfoDeviceSids 作为 SidClass 参数调用 AuthzModifySids 函数来完成修改。

[in, optional] pAuthzDeviceGroupsOperations

指向 AUTHZ_SID_OPERATION 枚举类型的数组的指针,这些枚举类型指定如何为 pDeviceGroups 参数中的每个设备组修改 authz 上下文中的设备组。 此数组包含的元素数与 pDeviceGroups 参数中的组数相同。

[in, optional] pAuthzUserClaims

指向 AUTHZ_SECURITY_ATTRIBUTES_INFORMATION 结构的指针,该结构包含用户声明上下文,该上下文应用于修改从 pSid 参数初始化的安全上下文。 如果使用 AuthzAccessCheck 函数计算有效权限,则可以通过使用 AuthzContextInfoUserClaims 作为 ClaimClass 参数调用 AuthzModifyClaims 函数来完成修改。

[in, optional] pAuthzUserClaimsOperations

指向 AUTHZ_SECURITY_ATTRIBUTE_OPERATION 枚举类型的指针,该枚举类型指定与用户声明上下文关联的操作。

[in, optional] pAuthzDeviceClaims

指向设备声明上下文的指针,该上下文应用于修改从 pSid 参数初始化的安全上下文,或者通过复合从 pSidpDeviceSid 参数初始化的上下文来创建的安全上下文。 这可由调用方提供,即使 pDeviceSid 参数不是。 如果使用 AuthzAccessCheck 函数计算有效权限,则可以通过使用 AuthzContextInfoDeviceClaims 作为 ClaimClass 参数调用 AuthzModifyClaims 函数来完成修改。

[in, optional] pAuthzDeviceClaimsOperations

指向 AUTHZ_SECURITY_ATTRIBUTE_OPERATION 枚举类型的指针,该枚举类型指定与设备声明上下文关联的操作。

[in, out] pEffpermResultLists

指向 类型为 EFFPERM_RESULT_LIST 的有效权限结果数组的指针。 此数组为 dwSecurityObjectCount 元素长。 数组由调用方初始化,实现应设置数组中每个成员的所有字段,指示相应的安全对象授予的访问权限。

如果考虑安全对象,则 fEvaluated 成员应设置为 TRUE。 在这种情况下, pObjectTypeListpGrantedAccessList 成员都应为 cObjectTypeListLength 元素长。 pObjectTypeList 成员必须指向资源管理器拥有的内存,并且必须在 EditSecurity 函数退出之前保持有效。 pGrantedAccessList 成员由调用方使用 LocalFree 函数释放。 如果资源管理器不支持对象 ACE,则 pObjectTypeList 成员应指向 NULL GUID,cObjectTypeListLength 成员应为 1,pGrantedAccessList 成员应为单个 DWORD。

返回值

如果函数成功,则返回值S_OK。

如果函数成功但返回了近似结果,则返回值S_FALSE。

如果函数失败,则返回值为 指示错误的 HRESULT 。 有关常见错误代码的列表,请参阅 常见 HRESULT 值

注解

id 成员 SECURITY_OBJECT 结构设置为SECURITY_OBJECT_ID_CENTRAL_ACCESS_RULE时, ComputeEffectivePermissionWithSecondarySecurity 方法应首先使用 pData2 成员,然后才使用 pData 成员评估访问权限。

预计调用方将使用 AuthzAccessCheck 来确定有效权限。 如果可能,实现应使用 AuthzInitializeRemoteResourceManager 函数在提供的 pszServerName 成员上初始化远程资源管理器,以确保以主体真正访问对象时相同的方式初始化组和声明。 如果 AuthzInitializeRemoteResourceManager 失败,则实现可能会回退到使用 AuthzInitializeResourceManager 函数并返回S_FALSE以指示返回近似结果。

对于 fEvaluated 成员设置为 TRUE 的每个辅助安全对象,访问控制编辑器将使用 pwszName 成员显示该对象限制的权限和属性。

要求

要求
最低受支持的客户端 Windows 8 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 [仅限桌面应用]
目标平台 Windows
标头 aclui.h

另请参阅

AUTHZ_SECURITY_ATTRIBUTE_OPERATION

AuthzInitializeRemoteResourceManager

IEffectivePermission2

ISecurityInformation4::GetSecondarySecurity

SECURITY_OBJECT