CheckTokenMembership 関数 (securitybaseapi.h)

CheckTokenMembership 関数は、アクセス トークンで指定されたセキュリティ識別子 (SID) が有効になっているかどうかを判断します。 アプリ コンテナー トークンのグループ メンバーシップを決定する場合は、 CheckTokenMembershipEx 関数を使用する必要があります。

構文

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

パラメーター

[in, optional] TokenHandle

アクセス トークンへのハンドル。 ハンドルには、トークンへのTOKEN_QUERYアクセス権が必要です。 トークンは 偽装トークンである必要があります。

TokenHandleNULL の場合、CheckTokenMembership は呼び出し元スレッドの偽装トークンを使用します。 スレッドが偽装されていない場合、関数はスレッドの プライマリ トークン を複製して 偽装トークンを作成します。

[in] SidToCheck

SID 構造体へのポインター。 CheckTokenMembership 関数は、アクセス トークンのユーザー SID とグループ SID にこの SID が存在していることを確認します。

[out] IsMember

チェックの結果を受け取る変数へのポインター。 SID が存在し、SE_GROUP_ENABLED属性がある場合、 IsMember はTRUE を返します。それ以外の場合は、 FALSE を返します

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

CheckTokenMembership 関数を使用すると、SID がアクセス トークンに存在するかどうかと有効になっているかどうかを判断するプロセスが簡略化されます。

SID がトークンに存在する場合でも、システムはアクセス チェックで SID を使用しない可能性があります。 SID が無効になっているか、 SE_GROUP_USE_FOR_DENY_ONLY 属性を持っている可能性があります。 システムは、有効な SID のみを使用して、アクセスチェックの実行時にアクセス権を付与します。 詳細については、「 アクセス トークンの SID 属性」を参照してください。

TokenHandle が制限付きトークンである場合、または TokenHandleNULL で、呼び出し元スレッドの現在の有効なトークンが制限付きトークンである場合、CheckTokenMembership は SID が制限 SID の一覧に存在するかどうかをチェックします。

次の例は、Administrators ローカル グループのメンバーシップのトークンを確認する方法を示しています。

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

基本的なAccess Control関数

CheckTokenMembershipEx

CreateRestrictedToken