Функция CheckTokenMembership (securitybaseapi.h)

Функция CheckTokenMembership определяет, включен ли указанный идентификатор безопасности (SID) в маркере доступа. Если вы хотите определить членство в группах для маркеров контейнера приложений, необходимо использовать функцию CheckTokenMembershipEx .

Синтаксис

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

Параметры

[in, optional] TokenHandle

Дескриптор маркера доступа. Дескриптор должен иметь TOKEN_QUERY доступ к маркеру. Маркер должен быть маркером олицетворения.

Если tokenHandle имеет значение NULL, CheckTokenMembership использует токен олицетворения вызывающего потока. Если поток не олицетворение, функция дублирует основной маркер потока для создания токена олицетворения.

[in] SidToCheck

Указатель на структуру SID . Функция CheckTokenMembership проверяет наличие этого идентификатора безопасности в идентификаторах безопасности пользователя и группы маркера доступа.

[out] IsMember

Указатель на переменную, получающую результаты проверка. Если идентификатор безопасности присутствует и имеет атрибут SE_GROUP_ENABLED, IsMember возвращает значение TRUE; в противном случае возвращается значение FALSE.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Функция CheckTokenMembership упрощает процесс определения наличия идентификатора безопасности и его включения в маркере доступа.

Даже если в маркере присутствует идентификатор безопасности, система не может использовать его в проверка доступа. Идентификатор безопасности может быть отключен или иметь атрибут SE_GROUP_USE_FOR_DENY_ONLY . Система использует только включенные идентификаторы безопасности для предоставления доступа при выполнении проверка доступа. Дополнительные сведения см. в разделе Атрибуты SID в маркере доступа.

Если TokenHandle является ограниченным маркером или tokenHandle имеет значение NULL , а текущий действующий маркер вызывающего потока является ограниченным маркером, CheckTokenMembership также проверяет, присутствует ли идентификатор безопасности в списке ограничивающих идентификаторов безопасности.

Примеры

В следующем примере показана проверка маркера на членство в локальной группе Администраторы.

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
Header securitybaseapi.h (включая Windows.h)
Библиотека Advapi32.lib
DLL Advapi32.dll

См. также раздел

Обзор контроль доступа

AccessCheck

Базовые функции контроль доступа

CheckTokenMembershipEx

CreateRestrictedToken