IAzApplication::InitializeClientContextFromStringSid 方法 (azroles.h)

InitializeClientContextFromStringSid 方法从文本形式的指定安全标识符 (SID) 获取 IAzClientContext 对象指针。

注意 如果可能,请调用 InitializeClientContextFromToken 函数而不是 InitializeClientContextFromStringSid。 有关详细信息,请参阅“备注”。

 

语法

HRESULT InitializeClientContextFromStringSid(
  [in]           BSTR             SidString,
  [in]           LONG             lOptions,
  [in, optional] VARIANT          varReserved,
  [out]          IAzClientContext **ppClientContext
);

参数

[in] SidString

一个字符串,其中包含安全主体的 SID 的文本形式。 这必须是可由 ConvertStringSidToSid 函数转换的有效字符串 SID。

[in] lOptions

用于创建上下文的选项。

如果指定了AZ_CLIENT_CONTEXT_SKIP_GROUP,则 SidString 参数中指定的 SID 不一定是有效的用户帐户。 SID 将用于在不进行验证的情况下创建上下文。 创建的上下文将标记为已从 SID 创建,SID 字符串将存储在客户端名称字段中,域名字段将为空。 创建客户端上下文时不会使用令牌组。 指定AZ_CLIENT_CONTEXT_SKIP_GROUP时,不支持轻型目录访问协议 (LDAP) 查询组。 由于帐户未在 Active Directory 中验证,因此客户端上下文的用户信息属性(如 UserSamCompat)将无效,在访问时,它们将返回ERROR_INVALID_HANDLE。 仍可使用 IAzClientContextRoleForAccessCheck 属性和 AccessCheck 方法指定用于访问检查的角色。 IAzClientContextGetRoles 方法仍可用于枚举分配给特定范围内的上下文的角色。

如果未指定AZ_CLIENT_CONTEXT_SKIP_GROUP,则 SID 必须表示有效的用户帐户。

[in, optional] varReserved

保留供将来使用。 此参数可能是以下值之一:

  • varReserved.vt == VT_ERROR 和 varReserved.scode == DISP_E_PARAMNOTFOUND
  • varReserved.vt == VT_EMPTY
  • varReserved.vt == VT_NULL
  • varReserved.vt == VT_I4 and varReserved.lVal == 0
  • varReserved.vt == VT_I2 和 varReserved.iVal == 0

[out] ppClientContext

指向返回的 IAzClientContext 对象的指针的指针。

返回值

如果函数成功,该函数将返回S_OK。

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

备注

如果可能,请调用 InitializeClientContextFromToken 函数而不是 InitializeClientContextFromStringSidInitializeClientContextFromStringSid 尝试检索客户端实际登录的登录令牌中可用的信息。 实际的登录令牌提供更多信息,例如登录类型和登录属性,并反映用于登录的身份验证包的行为。 由 InitializeClientContextFromToken 创建的客户端上下文使用登录令牌,并且生成的客户端上下文比 InitializeClientContextFromStringSid 创建的客户端上下文更完整、更准确。

重要 应用程序不应假定调用上下文有权使用此函数。 AuthzInitializeContextFromSid 函数读取调用中指定的 SID 的 tokenGroupsGlobalAndUniversal 属性,以确定当前用户的组成员身份。 如果用户的对象位于 Active Directory 中,则调用上下文必须对用户对象上的 tokenGroupsGlobalAndUniversal 属性具有读取访问权限。 对 tokenGroupsGlobalAndUniversal 属性的读取访问权限授予给 Windows 2000 之前的兼容访问 组,但默认情况下,新域包含空的 Windows 2000 Pre-Windows 2000 兼容访问 组,因为默认设置选择是 与 Windows 2000 和 Windows Server 2003 兼容的权限。 因此,应用程序可能无权访问 tokenGroupsGlobalAndUniversal 属性;在这种情况下, AuthzInitializeContextFromSid 函数将失败并ACCESS_DENIED。 使用此函数的应用程序应正确处理此错误并提供支持文档。 若要简化授予帐户查询用户组信息的权限,请将需要能够查找组信息的帐户添加到 Windows 授权访问组。
 
调用此函数的应用程序应使用完全限定的域名或 用户主体名称 (UPN) 。 否则,如果使用 NetBIOS 域名且两个域没有直接信任关系,则此方法可能会跨林失败。

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 azroles.h
Library Azroles.lib
DLL Azroles.dll
可再发行组件 Windows XP 上的 Windows Server 2003 管理工具包

另请参阅

允许匿名访问

IAzApplication