次の方法で共有


CAccessToken クラス

このクラスは、アクセス トークンのラッパーです。

重要

このクラスとそのメンバーは、Windows ランタイムで実行するアプリケーションで使用することはできません。

構文

class CAccessToken

メンバー

パブリック コンストラクター

名前 説明
CAccessToken::~CAccessToken デストラクター。

パブリック メソッド

名前 説明
CAccessToken::Attach 指定されたアクセス トークン ハンドルの所有権を取得するには、このメソッドを呼び出します。
CAccessToken::CheckTokenMembership 指定した SID が CAccessToken オブジェクトで有効になっているかどうかを確認するには、このメソッドを呼び出します。
CAccessToken::CreateImpersonationToken 新しい偽装アクセス トークンを作成するには、このメソッドを呼び出します。
CAccessToken::CreatePrimaryToken 新しいプライマリ トークンを作成するには、このメソッドを呼び出します。
CAccessToken::CreateProcessAsUser CAccessToken オブジェクトによって表されるユーザーのセキュリティ コンテキストで実行される新しいプロセスを作成するには、このメソッドを呼び出します。
CAccessToken::CreateRestrictedToken 新しい制限付き CAccessToken オブジェクトを作成するには、このメソッドを呼び出します。
CAccessToken::Detach アクセス トークンの所有権を取り消すには、このメソッドを呼び出します。
CAccessToken::DisablePrivilege CAccessToken オブジェクトの特権を無効にするには、このメソッドを呼び出します。
CAccessToken::DisablePrivileges CAccessToken オブジェクトの 1 つ以上の特権を無効にするには、このメソッドを呼び出します。
CAccessToken::EnablePrivilege CAccessToken オブジェクトの特権を有効にするには、このメソッドを呼び出します。
CAccessToken::EnablePrivileges CAccessToken オブジェクトの 1 つ以上の特権を有効にするには、このメソッドを呼び出します。
CAccessToken::GetDefaultDacl CAccessToken オブジェクトの既定の DACL を返すには、このメソッドを呼び出します。
CAccessToken::GetEffectiveToken 現在のスレッドで有効になっているアクセストークンと等しい CAccessToken オブジェクトを取得するには、このメソッドを呼び出します。
CAccessToken::GetGroups CAccessToken オブジェクトのトークン グループを返すには、このメソッドを呼び出します。
CAccessToken::GetHandle アクセス トークンへのハンドルを取得するには、このメソッドを呼び出します。
CAccessToken::GetImpersonationLevel アクセス トークンから偽装レベルを取得するには、このメソッドを呼び出します。
CAccessToken::GetLogonSessionId CAccessToken オブジェクトに関連付けられているログオン セッション ID を取得するには、このメソッドを呼び出します。
CAccessToken::GetLogonSid CAccessToken オブジェクトに関連付けられているログオン SID を取得するには、このメソッドを呼び出します。
CAccessToken::GetOwner CAccessToken オブジェクトに関連付けられている所有者を取得するには、このメソッドを呼び出します。
CAccessToken::GetPrimaryGroup CAccessToken オブジェクトに関連付けられているプライマリ グループを取得するには、このメソッドを呼び出します。
CAccessToken::GetPrivileges CAccessToken オブジェクトに関連付けられている特権を取得するには、このメソッドを呼び出します。
CAccessToken::GetProcessToken 指定されたプロセスからアクセス トークンを使用して CAccessToken を初期化するには、このメソッドを呼び出します。
CAccessToken::GetProfile CAccessToken オブジェクトに関連付けられているユーザー プロファイルを指すハンドルを取得するには、このメソッドを呼び出します。
CAccessToken::GetSource CAccessToken オブジェクトのソースを取得するには、このメソッドを呼び出します。
CAccessToken::GetStatistics CAccessToken オブジェクトに関連付けられている情報を取得するには、このメソッドを呼び出します。
CAccessToken::GetTerminalServicesSessionId CAccessToken オブジェクトに関連付けられているターミナル サービス セッション ID を取得するには、このメソッドを呼び出します。
CAccessToken::GetThreadToken 指定されたスレッドからトークンを使用して CAccessToken を初期化するには、このメソッドを呼び出します。
CAccessToken::GetTokenId CAccessToken オブジェクトに関連付けられているトークン ID を取得するには、このメソッドを呼び出します。
CAccessToken::GetType CAccessToken オブジェクトのトークンの種類を取得するには、このメソッドを呼び出します。
CAccessToken::GetUser CAccessToken オブジェクトに関連付けられているユーザーを特定するには、このメソッドを呼び出します。
CAccessToken::HKeyCurrentUser CAccessToken オブジェクトに関連付けられているユーザー プロファイルを指すハンドルを取得するには、このメソッドを呼び出します。
CAccessToken::Impersonate 偽装 CAccessToken をスレッドに割り当てるには、このメソッドを呼び出します。
CAccessToken::ImpersonateLoggedOnUser 呼び出し元のスレッドが、ログオンしているユーザーのセキュリティ コンテキストを偽装できるようにするには、このメソッドを呼び出します。
CAccessToken::IsTokenRestricted CAccessToken オブジェクトに制限付き SID の一覧が含まれているかどうかをテストするには、このメソッドを呼び出します。
CAccessToken::LoadUserProfile CAccessToken オブジェクトに関連付けられているユーザー プロファイルを読み込むには、このメソッドを呼び出します。
CAccessToken::LogonUser 指定した資格情報に関連付けられているユーザーのログオン セッションを作成するには、このメソッドを呼び出します。
CAccessToken::OpenCOMClientToken COM クライアントからアクセス トークンを使用して CAccessToken を初期化するには、クライアントからの呼び出しを処理する COM サーバー内からこのメソッドを呼び出します。
CAccessToken::OpenNamedPipeClientToken クライアントからアクセス トークンを使用して CAccessToken を初期化するには、名前付きパイプを介して要求を受け取るサーバー内からこのメソッドを呼び出します。
CAccessToken::OpenRPCClientToken クライアントからアクセス トークンを使用して CAccessToken を初期化するには、RPC クライアントからの呼び出しを処理するサーバー内からこのメソッドを呼び出します。
CAccessToken::OpenThreadToken このメソッドを呼び出して、偽装レベルを設定し、指定したスレッドのトークンを使用して CAccessToken を初期化します。
CAccessToken::PrivilegeCheck CAccessToken オブジェクトで、指定した権限のセットが有効になっているかどうかを確認するには、このメソッドを呼び出します。
CAccessToken::Revert 偽装トークンを使用しているスレッドを停止するには、このメソッドを呼び出します。
CAccessToken::SetDefaultDacl CAccessToken オブジェクトの既定の DACL を設定するには、このメソッドを呼び出します。
CAccessToken::SetOwner CAccessToken オブジェクトの所有者を設定するには、このメソッドを呼び出します。
CAccessToken::SetPrimaryGroup CAccessToken オブジェクトのプライマリ グループを設定するには、このメソッドを呼び出します。

解説

アクセス トークンは、プロセスまたはスレッドのセキュリティ コンテキストを記述するオブジェクトであり、Windows システムにログオンしている各ユーザーに割り当てられます。

Windows のアクセス制御モデルの概要については、Windows SDK のアクセス制御に関するページをご覧ください。

要件

ヘッダー: atlsecurity.h

CAccessToken::Attach

指定されたアクセス トークン ハンドルの所有権を取得するには、このメソッドを呼び出します。

void Attach(HANDLE hToken) throw();

パラメーター

hToken
アクセス トークンへのハンドル。

解説

デバッグ ビルドでは、CAccessToken オブジェクトにアクセス トークンの所有権が既にある場合、アサーション エラーが発生します。

CAccessToken::~CAccessToken

デストラクター。

virtual ~CAccessToken() throw();

解説

割り当てられているすべてのリソースを解放します。

CAccessToken::CheckTokenMembership

指定した SID が CAccessToken オブジェクトで有効になっているかどうかを確認するには、このメソッドを呼び出します。

bool CheckTokenMembership(
    const CSid& rSid,
    bool* pbIsMember) const throw(...);

パラメーター

rSid
CSid クラス オブジェクトへの参照。

pbIsMember
チェックの結果を受け取る変数へのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

CheckTokenMembership メソッドは、アクセス トークンのユーザーおよびグループ SID に SID があるかどうかを確認します。 SID が存在し、その属性が SE_GROUP_ENABLED の場合、pbIsMember は TRUE に設定されます。それ以外の場合は FALSE に設定されます。

デバッグ ビルドでは、pbIsMember が有効なポインターではない場合、アサーション エラーが発生します。

Note

CAccessToken オブジェクトは、プライマリ トークンではなく、偽装トークンである必要があります。

CAccessToken::CreateImpersonationToken

偽装アクセス トークンを作成するには、このメソッドを呼び出します。

bool CreateImpersonationToken(
    CAccessToken* pImp,
    SECURITY_IMPERSONATION_LEVEL sil = SecurityImpersonation) const throw(...);

パラメーター

pImp
新しい CAccessToken オブジェクトへのポインター。

sil
新しいトークンの偽装レベルを指定する SECURITY_IMPERSONATION_LEVEL 列挙型を指定します。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

CreateImpersonationTokenDuplicateToken を呼び出して新しい偽装アクセス トークンを作成します。

CAccessToken::CreatePrimaryToken

新しいプライマリ トークンを作成するには、このメソッドを呼び出します。

bool CreatePrimaryToken(
    CAccessToken* pPri,
    DWORD dwDesiredAccess = MAXIMUM_ALLOWED,
    const CSecurityAttributes* pTokenAttributes = NULL) const throw(...);

パラメーター

pPri
新しい CAccessToken オブジェクトへのポインター。

dwDesiredAccess
新しいトークンに対して要求されるアクセス権を指定します。 既定の MAXIMUM_ALLOWED は、呼び出し元に対して有効なすべてのアクセス権を要求します。 アクセス権の詳細については、「アクセス権とアクセス マスク」を参照してください。

pTokenAttributes
新しいトークンのセキュリティ記述子を指定し、子プロセスがトークンを継承できるかどうかを決定する SECURITY_ATTRIBUTES 構造体へのポインター。 pTokenAttributes が NULL の場合、トークンは既定のセキュリティ記述子を取得し、ハンドルは継承できません。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

CreatePrimaryTokenDuplicateTokenEx を呼び出して新しいプライマリ トークンを作成します。

CAccessToken::CreateProcessAsUser

CAccessToken オブジェクトによって表されるユーザーのセキュリティ コンテキストで実行される新しいプロセスを作成するには、このメソッドを呼び出します。

bool CreateProcessAsUser(
    LPCTSTR pApplicationName,
    LPTSTR pCommandLine,
    LPPROCESS_INFORMATION pProcessInformation,
    LPSTARTUPINFO pStartupInfo,
    DWORD dwCreationFlags = NORMAL_PRIORITY_CLASS,
    bool bLoadProfile = false,
    const CSecurityAttributes* pProcessAttributes = NULL,
    const CSecurityAttributes* pThreadAttributes = NULL,
    bool bInherit = false,
    LPCTSTR pCurrentDirectory = NULL) throw();

パラメーター

pApplicationName
実行するモジュールを指定する null 終端文字列へのポインター。 このパラメーターを NULL にすることはできません。

pCommandLine
実行するコマンド ラインを指定する null 終端文字列へのポインター。

pProcessInformation
新しいプロセスに関する識別情報を受け取る PROCESS_INFORMATION 構造体へのポインター。

pStartupInfo
新しいプロセスのメイン ウィンドウの表示方法を指定する STARTUPINFO 構造体へのポインター。

dwCreationFlags
優先度クラスとプロセスの作成を制御する追加のフラグを指定します。 フラグの一覧については、Win32 関数 CreateProcessAsUser に関するページを参照してください。

bLoadProfile
TRUE の場合、ユーザー プロファイルは LoadUserProfile で読み込まれます。

pProcessAttributes
新しいプロセスのセキュリティ記述子を指定し、子プロセスが返されたハンドルを継承できるかどうかを決定する SECURITY_ATTRIBUTES 構造体へのポインター。 pProcessAttributes が NULL の場合、プロセスは既定のセキュリティ記述子を取得し、ハンドルは継承できません。

pThreadAttributes
新しいスレッドのセキュリティ記述子を指定し、子プロセスが返されたハンドルを継承できるかどうかを決定する SECURITY_ATTRIBUTES 構造体へのポインター。 pThreadAttributes が NULL の場合、スレッドは既定のセキュリティ記述子を取得し、ハンドルは継承できません。

bInherit
新しいプロセスが呼び出し元のプロセスからハンドルを継承するかどうかを示します。 TRUE の場合、呼び出し元プロセスの継承可能な各オープン ハンドルは、新しいプロセスによって継承されます。 継承されたハンドルは、元のハンドルと同じ値と特権を持ちます。

pCurrentDirectory
新しいプロセスの現在のドライブとディレクトリを指定する、null 終端文字列へのポインター。 文字列は、ドライブ文字を含む完全なパスである必要があります。 このパラメーターが NULL の場合、新しいプロセスは呼び出し元プロセスと同じ現在のドライブとディレクトリを持つことになります。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

CreateProcessAsUserCreateProcessAsUser Win32 関数を使用して CAccessToken オブジェクトによって表されるユーザーのセキュリティ コンテキストで実行される新しいプロセスを作成します。 必要なパラメーターの詳細については、CreateProcessAsUser 関数の説明を参照してください。

このメソッドを成功させるには、CAccessToken オブジェクトが AssignPrimaryToken (制限付きトークンの場合を除く) と IncreaseQuota 特権を保持する必要があります。

CAccessToken::CreateRestrictedToken

新しい制限付き CAccessToken オブジェクトを作成するには、このメソッドを呼び出します。

bool CreateRestrictedToken(
    CAccessToken* pRestrictedToken,
    const CTokenGroups& SidsToDisable,
    const CTokenGroups& SidsToRestrict,
    const CTokenPrivileges& PrivilegesToDelete = CTokenPrivileges()) const throw(...);

パラメーター

pRestrictedToken
新しい制限付き CAccessToken オブジェクト。

SidsToDisable
拒否専用 SID を指定する CTokenGroups オブジェクト。

SidsToRestrict
制限する SID を指定する CTokenGroups オブジェクト。

PrivilegesToDelete
制限付きトークン内で削除する特権を指定する CTokenPrivileges オブジェクト。 既定では、空のオブジェクトが作成されます。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

CreateRestrictedTokenCreateRestrictedToken Win32 関数を使用して、制限付きの新しい CAccessToken オブジェクトを作成します。

重要

CreateRestrictedToken を使用する場合は、既存のトークンが有効であり (かつユーザーが入力したものではない)、SidsToDisablePrivilegesToDelete の両方が有効である (かつユーザーが入力したものではない) ことを確認します。 メソッドが FALSE を返す場合は、機能を拒否します。

CAccessToken::Detach

アクセス トークンの所有権を取り消すには、このメソッドを呼び出します。

HANDLE Detach() throw();

戻り値

デタッチされた CAccessToken へのハンドルを返します。

解説

このメソッドは、アクセス トークンの CAccessToken の所有権を取り消します。

CAccessToken::DisablePrivilege

CAccessToken オブジェクトの特権を無効にするには、このメソッドを呼び出します。

bool DisablePrivilege(
    LPCTSTR pszPrivilege,
    CTokenPrivileges* pPreviousState = NULL) throw(...);

パラメーター

pszPrivilege
CAccessToken オブジェクトで無効にする特権を含んでいる文字列へのポインター。

pPreviousState
特権の以前の状態を含む CTokenPrivileges オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::DisablePrivileges

CAccessToken オブジェクトの 1 つ以上の特権を無効にするには、このメソッドを呼び出します。

bool DisablePrivileges(
    const CAtlArray<LPCTSTR>& rPrivileges,
    CTokenPrivileges* pPreviousState = NULL) throw(...);

パラメーター

rPrivileges
CAccessToken オブジェクトで無効にする特権を含む文字列の配列へのポインター。

pPreviousState
特権の以前の状態を含む CTokenPrivileges オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::EnablePrivilege

CAccessToken オブジェクトの特権を有効にするには、このメソッドを呼び出します。

bool EnablePrivilege(
    LPCTSTR pszPrivilege,
    CTokenPrivileges* pPreviousState = NULL) throw(...);

パラメーター

pszPrivilege
CAccessToken オブジェクトで有効にする特権を含んでいる文字列へのポインター。

pPreviousState
特権の以前の状態を含む CTokenPrivileges オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::EnablePrivileges

CAccessToken オブジェクトの 1 つ以上の特権を有効にするには、このメソッドを呼び出します。

bool EnablePrivileges(
    const CAtlArray<LPCTSTR>& rPrivileges,
    CTokenPrivileges* pPreviousState = NULL) throw(...);

パラメーター

rPrivileges
CAccessToken オブジェクトで有効にする特権を含む文字列の配列へのポインター。

pPreviousState
特権の以前の状態を含む CTokenPrivileges オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetDefaultDacl

CAccessToken オブジェクトの既定の DACL を返すには、このメソッドを呼び出します。

bool GetDefaultDacl(CDacl* pDacl) const throw(...);

パラメーター

pDacl
CAccessToken オブジェクトの既定の DACL を受け取る CDacl クラス オブジェクトへのポインター。

戻り値

既定の DACL が回復されている場合は TRUE、それ以外の場合は FALSE を返します。

CAccessToken::GetEffectiveToken

現在のスレッドで有効になっているアクセストークンと等しい CAccessToken オブジェクトを取得するには、このメソッドを呼び出します。

bool GetEffectiveToken(DWORD dwDesiredAccess) throw();

パラメーター

dwDesiredAccess
アクセス トークンへの要求されたアクセス タイプを指定するアクセス マスクを指定します。 これらの要求されたアクセス タイプをトークンの DACL と比較することで、どのアクセスを許可するか、または拒否するかを判断します。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetGroups

CAccessToken オブジェクトのトークン グループを返すには、このメソッドを呼び出します。

bool GetGroups(CTokenGroups* pGroups) const throw(...);

パラメーター

pGroups
グループの情報を受け取る CTokenGroups クラス オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetHandle

アクセス トークンへのハンドルを取得するには、このメソッドを呼び出します。

HANDLE GetHandle() const throw();

戻り値

CAccessToken オブジェクトのアクセス トークンへのハンドルを返します。

CAccessToken::GetImpersonationLevel

アクセス トークンから偽装レベルを取得するには、このメソッドを呼び出します。

bool GetImpersonationLevel(
    SECURITY_IMPERSONATION_LEVEL* pImpersonationLevel) const throw(...);

パラメーター

pImpersonationLevel
偽装レベル情報を受け取る SECURITY_IMPERSONATION_LEVEL 列挙型へのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetLogonSessionId

CAccessToken オブジェクトに関連付けられているログオン セッション ID を取得するには、このメソッドを呼び出します。

bool GetLogonSessionId(LUID* pluid) const throw(...);

パラメーター

pluid
ログオン セッション ID を受け取る LUID へのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

デバッグ ビルドでは、pluid が無効な値の場合、アサーション エラーが発生します。

CAccessToken::GetLogonSid

CAccessToken オブジェクトに関連付けられているログオン SID を取得するには、このメソッドを呼び出します。

bool GetLogonSid(CSid* pSid) const throw(...);

パラメーター

pSid
CSid クラス オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

デバッグ ビルドでは、pSid が無効な値の場合、アサーション エラーが発生します。

CAccessToken::GetOwner

CAccessToken オブジェクトに関連付けられている所有者を取得するには、このメソッドを呼び出します。

bool GetOwner(CSid* pSid) const throw(...);

パラメーター

pSid
CSid クラス オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

このアクセス トークンが有効な間に作成されるオブジェクトには、既定で所有者が設定されます。

CAccessToken::GetPrimaryGroup

CAccessToken オブジェクトに関連付けられているプライマリ グループを取得するには、このメソッドを呼び出します。

bool GetPrimaryGroup(CSid* pSid) const throw(...);

パラメーター

pSid
CSid クラス オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

このアクセス トークンが有効な間に作成されるオブジェクトには、既定でグループが設定されます。

CAccessToken::GetPrivileges

CAccessToken オブジェクトに関連付けられている特権を取得するには、このメソッドを呼び出します。

bool GetPrivileges(CTokenPrivileges* pPrivileges) const throw(...);

パラメーター

pPrivileges
特権を受け取る CTokenPrivileges クラス オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetProcessToken

指定されたプロセスからアクセス トークンを使用して CAccessToken を初期化するには、このメソッドを呼び出します。

bool GetProcessToken(DWORD dwDesiredAccess, HANDLE hProcess = NULL) throw();

パラメーター

dwDesiredAccess
アクセス トークンへの要求されたアクセス タイプを指定するアクセス マスクを指定します。 これらの要求されたアクセス タイプをトークンの DACL と比較することで、どのアクセスを許可するか、または拒否するかを判断します。

hProcess
アクセス トークンが開いているプロセスへのハンドル。 NULL の既定値を使用すると、現在のプロセスが使用されます。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

OpenProcessToken Win32 関数を呼び出します。

CAccessToken::GetProfile

CAccessToken オブジェクトに関連付けられているユーザー プロファイルを指すハンドルを取得するには、このメソッドを呼び出します。

HANDLE GetProfile() const throw();

戻り値

ユーザー プロファイルを指すハンドルを返します。プロファイルが存在しない場合は NULL を返します。

CAccessToken::GetSource

CAccessToken オブジェクトのソースを取得するには、このメソッドを呼び出します。

bool GetSource(TOKEN_SOURCE* pSource) const throw(...);

パラメーター

pSource
TOKEN_SOURCE 構造体へのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetStatistics

CAccessToken オブジェクトに関連付けられている情報を取得するには、このメソッドを呼び出します。

bool GetStatistics(TOKEN_STATISTICS* pStatistics) const throw(...);

パラメーター

pStatistics
TOKEN_STATISTICS 構造体へのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetTerminalServicesSessionId

CAccessToken オブジェクトに関連付けられているターミナル サービス セッション ID を取得するには、このメソッドを呼び出します。

bool GetTerminalServicesSessionId(DWORD* pdwSessionId) const throw(...);

パラメーター

pdwSessionId
ターミナル サービス セッション ID。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetThreadToken

指定されたスレッドからトークンを使用して CAccessToken を初期化するには、このメソッドを呼び出します。

bool GetThreadToken(
    DWORD dwDesiredAccess,
    HANDLE hThread = NULL,
    bool bOpenAsSelf = true) throw();

パラメーター

dwDesiredAccess
アクセス トークンへの要求されたアクセス タイプを指定するアクセス マスクを指定します。 これらの要求されたアクセス タイプをトークンの DACL と比較することで、どのアクセスを許可するか、または拒否するかを判断します。

hThread
アクセス トークンが開いているスレッドへのハンドル。

bOpenAsSelf
GetThreadToken メソッドを呼び出すスレッドのセキュリティ コンテキスト、または呼び出し元のスレッドのプロセスのセキュリティ コンテキストに対してアクセス チェックを行うかどうかを示します。

このパラメーターが FALSE の場合は、呼び出し元のスレッドのセキュリティ コンテキストを使用してアクセス チェックが実行されます。 スレッドがクライアントを偽装している場合、このセキュリティ コンテキストはクライアント プロセスのものになる可能性があります。 このパラメーターが TRUE の場合、呼び出し元スレッドのプロセスのセキュリティ コンテキストを使用してアクセス チェックが行われます。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetTokenId

CAccessToken オブジェクトに関連付けられているトークン ID を取得するには、このメソッドを呼び出します。

bool GetTokenId(LUID* pluid) const throw(...);

パラメーター

pluid
トークン ID を受け取る LUID へのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::GetType

CAccessToken オブジェクトのトークンの種類を取得するには、このメソッドを呼び出します。

bool GetType(TOKEN_TYPE* pType) const throw(...);

パラメーター

pType
成功した場合はトークンの種類を受け取る TOKEN_TYPE 変数のアドレス。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

TOKEN_TYPE 列挙型には、プライマリ トークンと偽装トークンを区別する値が含まれています。

CAccessToken::GetUser

CAccessToken オブジェクトに関連付けられているユーザーを特定するには、このメソッドを呼び出します。

bool GetUser(CSid* pSid) const throw(...);

パラメーター

pSid
CSid クラス オブジェクトへのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

CAccessToken::HKeyCurrentUser

CAccessToken オブジェクトに関連付けられているユーザー プロファイルを指すハンドルを取得するには、このメソッドを呼び出します。

HKEY HKeyCurrentUser() const throw();

戻り値

ユーザー プロファイルを指すハンドルを返します。プロファイルが存在しない場合は NULL を返します。

CAccessToken::Impersonate

偽装 CAccessToken をスレッドに割り当てるには、このメソッドを呼び出します。

bool Impersonate(HANDLE hThread = NULL) const throw(...);

パラメーター

hThread
偽装トークンを割り当てるスレッドへのハンドル。 このハンドルは TOKEN_IMPERSONATE アクセス権で開かれている必要があります。 hThread が NULL の場合、メソッドは偽装トークンを使用してスレッドを停止します。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

デバッグ ビルドでは、CAccessToken にトークンへの有効なポインターがない場合、アサーション エラーが発生します。

CAutoRevertImpersonation クラスを使用すると、偽装されたアクセス トークンを自動的に元に戻すことができます。

CAccessToken::ImpersonateLoggedOnUser

呼び出し元のスレッドが、ログオンしているユーザーのセキュリティ コンテキストを偽装できるようにするには、このメソッドを呼び出します。

bool ImpersonateLoggedOnUser() const throw(...);

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

重要

何らかの理由で偽装関数の呼び出しが失敗した場合、クライアントは偽装されず、クライアント要求は呼び出し元のプロセスのセキュリティ コンテキストで行われます。 プロセスが高い特権を持つアカウントとして実行されている場合、または管理グループのメンバーとして実行されている場合、ユーザーは、許可されていないアクションを実行できる可能性があります。 そのため、この関数の戻り値は常に確認する必要があります。

CAccessToken::IsTokenRestricted

CAccessToken オブジェクトに制限付き SID の一覧が含まれているかどうかをテストするには、このメソッドを呼び出します。

bool IsTokenRestricted() const throw();

戻り値

オブジェクトに制限する SID の一覧が含まれている場合は TRUE、制限する SID がない場合、またはメソッドが失敗した場合は FALSE を返します。

CAccessToken::LoadUserProfile

CAccessToken オブジェクトに関連付けられているユーザー プロファイルを読み込むには、このメソッドを呼び出します。

bool LoadUserProfile() throw(...);

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

デバッグ ビルドでは、CAccessToken に有効なトークンが含まれていない場合、またはユーザー プロファイルが既に存在する場合、アサーション エラーが発生します。

CAccessToken::LogonUser

指定した資格情報に関連付けられているユーザーのログオン セッションを作成するには、このメソッドを呼び出します。

bool LogonUser(
    LPCTSTR pszUserName,
    LPCTSTR pszDomain,
    LPCTSTR pszPassword,
    DWORD dwLogonType = LOGON32_LOGON_INTERACTIVE,
    DWORD dwLogonProvider = LOGON32_PROVIDER_DEFAULT) throw();

パラメーター

pszUserName
ユーザー名を指定する null 終端文字列へのポインター。 これは、ログオン先のユーザー アカウントの名前です。

pszDomain
アカウント データベースに pszUserName アカウントが含まれているドメインまたはサーバーの名前を指定する null 終端文字列へのポインター。

pszPassword
pszUserName によって指定されたユーザー アカウントのクリアテキスト パスワードを指定する、null 終端文字列へのポインター。

dwLogonType
実行するログオン操作の種類を指定します。 詳細については、LogonUser に関するページを参照してください。

dwLogonProvider
ログオン プロバイダーを指定します。 詳細については、LogonUser に関するページを参照してください。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

ログオンによって生成されるアクセス トークンは、CAccessToken に関連付けられます。 このメソッドを成功させるには、CAccessToken オブジェクトは、信頼されたコンピューター ベースの一部として所有者を識別する SE_TCB_NAME 特権を保持する必要があります。 必要な特権に関する詳細については、LogonUser に関するページを参照してください。

CAccessToken::OpenCOMClientToken

COM クライアントからアクセス トークンを使用して CAccessToken を初期化するには、クライアントからの呼び出しを処理する COM サーバー内からこのメソッドを呼び出します。

bool OpenCOMClientToken(
    DWORD dwDesiredAccess,
    bool bImpersonate = false,
    bool bOpenAsSelf = true) throw(...);

パラメーター

dwDesiredAccess
アクセス トークンへの要求されたアクセス タイプを指定するアクセス マスクを指定します。 これらの要求されたアクセス タイプをトークンの DACL と比較することで、どのアクセスを許可するか、または拒否するかを判断します。

bImpersonate
TRUE の場合、この呼び出しが正常に完了した場合、現在のスレッドは呼び出し元の COM クライアントを偽装します。 FALSE の場合、アクセス トークンは開かれますが、この呼び出しが完了してもスレッドは偽装トークンを持ちません。

bOpenAsSelf
GetThreadToken メソッドを呼び出すスレッドのセキュリティ コンテキスト、または呼び出し元のスレッドのプロセスのセキュリティ コンテキストに対してアクセス チェックを行うかどうかを示します。

このパラメーターが FALSE の場合は、呼び出し元のスレッドのセキュリティ コンテキストを使用してアクセス チェックが実行されます。 スレッドがクライアントを偽装している場合、このセキュリティ コンテキストはクライアント プロセスのものになる可能性があります。 このパラメーターが TRUE の場合、呼び出し元スレッドのプロセスのセキュリティ コンテキストを使用してアクセス チェックが行われます。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

CAutoRevertImpersonation クラスを使用すると、bImpersonate フラグを TRUE にして作成された、偽装されたアクセス トークンを自動的に元に戻すことができます。

CAccessToken::OpenNamedPipeClientToken

クライアントからアクセス トークンを使用して CAccessToken を初期化するには、名前付きパイプを介して要求を受け取るサーバー内からこのメソッドを呼び出します。

bool OpenNamedPipeClientToken(
    HANDLE hPipe,
    DWORD dwDesiredAccess,
    bool bImpersonate = false,
    bool bOpenAsSelf = true) throw(...);

パラメーター

hPipe
名前付きパイプへのハンドル。

dwDesiredAccess
アクセス トークンへの要求されたアクセス タイプを指定するアクセス マスクを指定します。 これらの要求されたアクセス タイプをトークンの DACL と比較することで、どのアクセスを許可するか、または拒否するかを判断します。

bImpersonate
TRUE の場合、この呼び出しが正常に完了した場合、現在のスレッドは呼び出し元のパイプ クライアントを偽装します。 FALSE の場合、アクセス トークンは開かれますが、この呼び出しが完了してもスレッドは偽装トークンを持ちません。

bOpenAsSelf
GetThreadToken メソッドを呼び出すスレッドのセキュリティ コンテキスト、または呼び出し元のスレッドのプロセスのセキュリティ コンテキストに対してアクセス チェックを行うかどうかを示します。

このパラメーターが FALSE の場合は、呼び出し元のスレッドのセキュリティ コンテキストを使用してアクセス チェックが実行されます。 スレッドがクライアントを偽装している場合、このセキュリティ コンテキストはクライアント プロセスのものになる可能性があります。 このパラメーターが TRUE の場合、呼び出し元スレッドのプロセスのセキュリティ コンテキストを使用してアクセス チェックが行われます。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

CAutoRevertImpersonation クラスを使用すると、bImpersonate フラグを TRUE にして作成された、偽装されたアクセス トークンを自動的に元に戻すことができます。

CAccessToken::OpenRPCClientToken

クライアントからアクセス トークンを使用して CAccessToken を初期化するには、RPC クライアントからの呼び出しを処理するサーバー内からこのメソッドを呼び出します。

bool OpenRPCClientToken(
    RPC_BINDING_HANDLE BindingHandle,
    DWORD dwDesiredAccess,
    bool bImpersonate = false,
    bool bOpenAsSelf = true) throw(...);

パラメーター

BindingHandle
クライアントへのバインドを表すサーバー上のバインド ハンドル。

dwDesiredAccess
アクセス トークンへの要求されたアクセス タイプを指定するアクセス マスクを指定します。 これらの要求されたアクセス タイプをトークンの DACL と比較することで、どのアクセスを許可するか、または拒否するかを判断します。

bImpersonate
TRUE の場合、この呼び出しが正常に完了した場合、現在のスレッドは呼び出し元の RPC クライアントを偽装します。 FALSE の場合、アクセス トークンは開かれますが、この呼び出しが完了してもスレッドは偽装トークンを持ちません。

bOpenAsSelf
GetThreadToken メソッドを呼び出すスレッドのセキュリティ コンテキスト、または呼び出し元のスレッドのプロセスのセキュリティ コンテキストに対してアクセス チェックを行うかどうかを示します。

このパラメーターが FALSE の場合は、呼び出し元のスレッドのセキュリティ コンテキストを使用してアクセス チェックが実行されます。 スレッドがクライアントを偽装している場合、このセキュリティ コンテキストはクライアント プロセスのものになる可能性があります。 このパラメーターが TRUE の場合、呼び出し元スレッドのプロセスのセキュリティ コンテキストを使用してアクセス チェックが行われます。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

CAutoRevertImpersonation クラスを使用すると、bImpersonate フラグを TRUE にして作成された、偽装されたアクセス トークンを自動的に元に戻すことができます。

CAccessToken::OpenThreadToken

このメソッドを呼び出して、偽装レベルを設定し、指定したスレッドのトークンを使用して CAccessToken を初期化します。

bool OpenThreadToken(
    DWORD dwDesiredAccess,
    bool bImpersonate = false,
    bool bOpenAsSelf = true,
    SECURITY_IMPERSONATION_LEVEL sil = SecurityImpersonation) throw(...);

パラメーター

dwDesiredAccess
アクセス トークンへの要求されたアクセス タイプを指定するアクセス マスクを指定します。 これらの要求されたアクセス タイプをトークンの DACL と比較することで、どのアクセスを許可するか、または拒否するかを判断します。

bImpersonate
TRUE の場合、スレッドは、このメソッドが完了した後、要求された偽装レベルのままになります。 FALSE の場合、スレッドは元の偽装レベルに戻ります。

bOpenAsSelf
GetThreadToken メソッドを呼び出すスレッドのセキュリティ コンテキスト、または呼び出し元のスレッドのプロセスのセキュリティ コンテキストに対してアクセス チェックを行うかどうかを示します。

このパラメーターが FALSE の場合は、呼び出し元のスレッドのセキュリティ コンテキストを使用してアクセス チェックが実行されます。 スレッドがクライアントを偽装している場合、このセキュリティ コンテキストはクライアント プロセスのものになる可能性があります。 このパラメーターが TRUE の場合、呼び出し元スレッドのプロセスのセキュリティ コンテキストを使用してアクセス チェックが行われます。

sil
トークンの偽装レベルを指定する SECURITY_IMPERSONATION_LEVEL 列挙型を指定します。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

OpenThreadTokenCAccessToken::GetThreadToken に似ていますが、スレッドのアクセス トークンから CAccessToken を初期化する前に偽装レベルを設定します。

CAutoRevertImpersonation クラスを使用すると、bImpersonate フラグを TRUE にして作成された、偽装されたアクセス トークンを自動的に元に戻すことができます。

CAccessToken::PrivilegeCheck

CAccessToken オブジェクトで、指定した権限のセットが有効になっているかどうかを確認するには、このメソッドを呼び出します。

bool PrivilegeCheck(
    PPRIVILEGE_SET RequiredPrivileges,
    bool* pbResult) const throw();

パラメーター

RequiredPrivileges
PRIVILEGE_SET 構造体へのポインター。

pbResult
指定した特権の一部またはすべてが CAccessToken オブジェクトで有効かどうかを示すためにメソッドが設定する値へのポインター。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

PrivilegeCheck が返されたとき、対応する特権が有効な場合、各 LUID_AND_ATTRIBUTES 構造体の Attributes メンバーは SE_PRIVILEGE_USED_FOR_ACCESS に設定されます。 このメソッドは、PrivilegeCheck Win32 関数を呼び出します。

CAccessToken::Revert

スレッドで偽装トークンの使用を停止するには、このメソッドを呼び出します。

bool Revert(HANDLE hThread = NULL) const throw();

パラメーター

hThread
偽装から元に戻すスレッドへのハンドル。 hThread が NULL の場合は、現在のスレッドが想定されます。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

偽装トークンの復帰は、CAutoRevertImpersonation クラスを使用して自動的に実行できます。

CAccessToken::SetDefaultDacl

CAccessToken オブジェクトの既定の DACL を設定するには、このメソッドを呼び出します。

bool SetDefaultDacl(const CDacl& rDacl) throw(...);

パラメーター

rDacl
新しい既定の CDacl クラス情報。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

既定の DACL は、このアクセス トークンを有効にした新しいオブジェクトが作成される場合に既定で使用される DACL です。

CAccessToken::SetOwner

CAccessToken オブジェクトの所有者を設定するには、このメソッドを呼び出します。

bool SetOwner(const CSid& rSid) throw(...);

パラメーター

rSid
所有者情報を含む CSid クラス オブジェクト。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

所有者は、このアクセス トークンが有効な間に作成される新しいオブジェクトに使用される既定の所有者です。

CAccessToken::SetPrimaryGroup

CAccessToken オブジェクトのプライマリ グループを設定するには、このメソッドを呼び出します。

bool SetPrimaryGroup(const CSid& rSid) throw(...);

パラメーター

rSid
プライマリ グループ情報を含む CSid クラス オブジェクト。

戻り値

成功した場合は TRUE を返し、失敗した場合は FALSE を返します。

解説

プライマリ グループは、このアクセス トークンが有効な間に作成される新しいオブジェクトの既定のグループです。

関連項目

ATLSecurity Sample
アクセス トークン
クラスの概要