AuthzInitializeContextFromSid 函数 (authz.h)

AuthzInitializeContextFromSid 函数从用户安全标识符 (SID) 创建用户模式客户端上下文。 域 SID 从 Active Directory 检索令牌组属性。

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

 

语法

AUTHZAPI BOOL AuthzInitializeContextFromSid(
  [in]           DWORD                         Flags,
  [in]           PSID                          UserSid,
  [in, optional] AUTHZ_RESOURCE_MANAGER_HANDLE hAuthzResourceManager,
  [in]           PLARGE_INTEGER                pExpirationTime,
  [in]           LUID                          Identifier,
  [in, optional] PVOID                         DynamicGroupArgs,
  [out]          PAUTHZ_CLIENT_CONTEXT_HANDLE  phAuthzClientContext
);

参数

[in] Flags

定义了以下标志。

从 Windows 8 和 Windows Server 2012 开始,在远程上下文句柄上调用此函数时,高 16 位必须为零。

含义
0 (0x0)
默认值。

AuthzInitializeContextFromSid 尝试通过执行 S4U 登录来检索用户的令牌组信息。

如果用户的域或调用计算机不支持 S4U 登录, 则 AuthzInitializeContextFromSid 会查询用户的帐户对象以获取组信息。 直接查询帐户时,将省略一些表示登录特征的组,例如网络、交互式、匿名、网络服务或本地服务。 应用程序可以通过实现 AuthzComputeGroupsCallback 函数或调用 AuthzAddSidsToContext 函数来显式添加此类组 SID。

AUTHZ_SKIP_TOKEN_GROUPS
2 (0x2)
使 AuthzInitializeContextFromSid 跳过所有组评估。 使用此标志时,返回的上下文仅包含 UserSid 参数指定的 SID 。 指定的 SID 可以是任意或特定于应用程序的 SID。 可以通过实现 AuthzComputeGroupsCallback 函数或调用 AuthzAddSidsToContext 函数,将其他 SID 添加到此上下文中。
AUTHZ_REQUIRE_S4U_LOGON
4 (0x4)
如果 Windows Services For User 无法检索令牌组信息,则会导致 AuthzInitializeContextFromSid 失败。

Windowsxp: 不支持此标志。

AUTHZ_COMPUTE_PRIVILEGES
8 (0x8)
使 AuthzInitializeContextFromSid 检索新上下文的权限。 如果此函数执行 S4U 登录,它将从令牌中检索特权。 否则,该函数将从上下文中的所有 SID 中检索特权。

[in] UserSid

将为其创建客户端上下文的用户的 SID。 除非使用 AUTHZ_SKIP_TOKEN_GROUPS 标志,否则该帐户必须是有效的用户或计算机帐户。

[in, optional] hAuthzResourceManager

创建此客户端上下文的资源管理器的句柄。 此句柄存储在客户端上下文结构中。

从 Windows 8 和 Windows Server 2012 开始,资源管理器可以是本地的,也可以是远程的,可以通过调用 AuthzInitializeRemoteResourceManager 函数来获取。

[in] pExpirationTime

令牌的过期日期和时间。 如果未传递任何值,则令牌永不过期。 当前未强制实施过期时间。

[in] Identifier

资源管理器的特定标识符。 当前未使用此参数。

[in, optional] DynamicGroupArgs

指向要传递给计算动态组的回调函数的参数的指针。 如果未将动态参数传递给回调函数,则此参数可以为 NULL

从 Windows 8 和 Windows Server 2012 开始,如果资源管理器是远程的,则此参数必须为 NULL。 否则,将设置ERROR_NOT_SUPPORTED。

[out] phAuthzClientContext

指向 AuthzInitializeContextFromSid 函数创建的客户端上下文句柄的指针。 使用完句柄后,通过调用 AuthzFreeContext 函数释放它。

返回值

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

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

注解

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

此函数仅解析有效的用户 SID。

Windowsxp: 此函数解析有效用户和组 SID (的组成员身份,除非) 使用 AUTHZ_SKIP_TOKEN_GROUPS 标志。 对解析组 SID 成员身份的支持可能在后续版本中更改或不可用。

此函数调用 AuthzComputeGroupsCallback 回调函数,将 SID 添加到新创建的上下文。

重要 应用程序不应假定调用上下文有权使用此函数。 AuthzInitializeContextFromSid 函数读取调用中指定的 SID 的 tokenGroupsGlobalAndUniversal 属性,以确定当前用户的组成员身份。 如果用户的对象位于 Active Directory 中,则调用上下文必须对用户对象上的 tokenGroupsGlobalAndUniversal 属性具有读取访问权限。 创建新域时,默认的访问兼容性选择是 与 Windows 2000 和 Windows Server 2003 操作系统兼容的权限。 设置此选项后, Windows 2000 之前的兼容访问 组仅包含 经过身份验证的用户 内置安全标识符。 因此,应用程序可能无权访问 tokenGroupsGlobalAndUniversal 属性;在这种情况下, AuthzInitializeContextFromSid 函数将失败并ACCESS_DENIED。 使用此函数的应用程序应正确处理此错误并提供支持文档。 若要简化授予帐户查询用户组信息的权限,请将需要能够查找组信息的帐户添加到 Windows 授权访问组。
 

要求

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

另请参阅

允许匿名访问

AuthzFreeContext

基本访问控制函数