checkTokenMembership 函数 (securitybaseapi.h)

CheckTokenMembership 函数确定是否在访问令牌中启用指定的安全标识符 (SID) 。 如果要确定应用容器令牌的组成员身份,则需要使用 CheckTokenMembershipEx 函数。

语法

BOOL CheckTokenMembership(
  [in, optional] HANDLE TokenHandle,
  [in]           PSID   SidToCheck,
  [out]          PBOOL  IsMember
);

parameters

[in, optional] TokenHandle

访问令牌的句柄。 句柄必须具有对令牌TOKEN_QUERY访问权限。 令牌必须是 模拟令牌

如果 TokenHandleNULL则 CheckTokenMembership 使用调用线程的模拟令牌。 如果线程未模拟,该函数将复制线程 的主令牌 以创建 模拟令牌

[in] SidToCheck

指向 SID 结构的指针。 CheckTokenMembership 函数检查访问令牌的用户和组 SID 中是否存在此 SID。

[out] IsMember

指向接收检查结果的变量的指针。 如果 SID 存在并且具有 SE_GROUP_ENABLED 属性, 则 IsMember 返回 TRUE;否则返回 FALSE

返回值

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

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

注解

CheckTokenMembership 函数简化了确定访问令牌中是否同时存在和已启用 SID 的过程。

即使令牌中存在 SID,系统也不得在访问检查中使用 SID。 SID 可能已禁用或具有 SE_GROUP_USE_FOR_DENY_ONLY 属性。 在执行访问检查时,系统仅使用已启用的 SID 授予访问权限。 有关详细信息,请参阅 访问令牌中的 SID 属性

如果 TokenHandle 是受限令牌,或者 TokenHandleNULL ,并且调用线程的当前有效令牌是受限令牌, 则 CheckTokenMembership 还会检查 SID 是否存在于限制 SID 列表中。

示例

以下示例演示如何检查管理员本地组中的成员身份的令牌。

BOOL IsUserAdmin(VOID)
/*++ 
Routine Description: This routine returns TRUE if the caller's
process is a member of the Administrators local group. Caller is NOT
expected to be impersonating anyone and is expected to be able to
open its own process and process token. 
Arguments: None. 
Return Value: 
   TRUE - Caller has Administrators local group. 
   FALSE - Caller does not have Administrators local group. --
*/ 
{
    BOOL b;
    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    PSID AdministratorsGroup;
    b = AllocateAndInitializeSid(
        &NtAuthority,
        2,
        SECURITY_BUILTIN_DOMAIN_RID,
        DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0,
        &AdministratorsGroup );

    if(b)
    {
        if (!CheckTokenMembership( NULL, AdministratorsGroup, &b))
        {
             b = FALSE;
        }
        FreeSid(AdministratorsGroup);
    }

    return(b);
}

要求

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

请参阅

访问控制概述

AccessCheck

基本访问控制函数

CheckTokenMembershipEx

CreateRestrictedToken