アクセス トークン

アクセス トークンは、プロセスまたはスレッドのセキュリティ コンテキストを記述するオブジェクトです。 トークン内の情報には、プロセスまたはスレッドに関連付けられているユーザー アカウントの ID と特権が含まれます。 ユーザーがログオンすると、セキュリティ データベースに格納されている情報と比較して、ユーザーのパスワードがシステムによって検証されます。 パスワードが 認証された場合、システムはアクセス トークンを生成します。 このユーザーに代わって実行されるすべてのプロセスには、このアクセス トークンのコピーがあります。

システムはアクセス トークンを使用して、スレッドが セキュリティ保護可能なオブジェクト と対話するとき、または特権を必要とするシステム タスクを実行しようとしたときに、ユーザーを識別します。 アクセス トークンには、次の情報が含まれています。

  • ユーザーのアカウントの セキュリティ識別子 (SID)
  • ユーザーがメンバーであるグループの SID
  • 現在のログオン セッションを識別するログオンSID
  • ユーザーまたはユーザーのグループが保持する 特権 の一覧
  • 所有者 SID
  • プライマリ グループの SID
  • ユーザーがセキュリティ記述子を指定せずにセキュリティ保護可能なオブジェクトを作成するときにシステムが使用する既定の DACL
  • アクセス トークンのソース
  • トークンが プライマリ トークンか 偽装 トークンか
  • 制限 SID の省略可能一覧
  • 現在の偽装レベル
  • その他の統計

すべてのプロセスには、プロセスに関連付けられているユーザー アカウントのセキュリティ コンテキストを記述するプライマリ トークンがあります。 既定では、システムは、プロセスのスレッドがセキュリティ保護可能なオブジェクトと対話するときに、プライマリ トークンを使用します。 さらに、スレッドはクライアント アカウントを偽装できます。 偽装により、スレッドはクライアントのセキュリティ コンテキストを使用してセキュリティ保護可能なオブジェクトと対話できます。 クライアントを偽装しているスレッドには、プライマリ トークンと 偽装トークンの両方があります。

OpenProcessToken 関数を使用して、プロセスのプライマリ トークンへのハンドルを取得します。 OpenThreadToken 関数を使用して、スレッドの偽装トークンへのハンドルを取得します。 詳細については、「 偽装」を参照してください。

次の関数を使用して、アクセス トークンを操作できます。

機能 説明
AdjustTokenGroups アクセス トークン内のグループ情報を変更します。
AdjustTokenPrivileges アクセス トークンの特権を有効または無効にします。 新しい特権の付与や既存の権限の取り消しは行われません。
CheckTokenMembership 指定したアクセス トークンで、指定した SID が有効かどうかを判断します。
CreateRestrictedToken 既存のトークンの制限付きバージョンである新しいトークンを作成します。 制限されたトークンには、無効になっている SID、削除された特権、および制限付き SID の一覧を含めることができます。
DuplicateToken 既存のトークンを複製する新しい偽装トークンを作成します。
DuplicateTokenEx 既存のトークンを複製する新しいプライマリ トークンまたは偽装トークンを作成します。
GetTokenInformation トークンに関する情報を取得します。
IsTokenRestricted トークンに制限 SID の一覧があるかどうかを判断します。
OpenProcessToken プロセスのプライマリ アクセス トークンへのハンドルを取得します。
OpenThreadToken スレッドの偽装アクセス トークンへのハンドルを取得します。
SetThreadToken スレッドの偽装トークンを割り当てるか削除します。
SetTokenInformation トークンの所有者、プライマリ グループ、または既定の DACL を変更します。

 

アクセス トークン関数は、次の構造を使用して、アクセス トークンの部分を記述します。

構造体 説明
TOKEN_CONTROL アクセス トークンを識別する情報。
TOKEN_DEFAULT_DACL スレッドによって作成された新しいオブジェクトのセキュリティ記述子でシステムが使用する既定の DACL。
TOKEN_GROUPS アクセス トークン内のグループ SID の SID と属性を指定します。
TOKEN_OWNER 新しいオブジェクトのセキュリティ記述子の既定の所有者 SID。
TOKEN_PRIMARY_GROUP 新しいオブジェクトのセキュリティ記述子の既定のプライマリ グループ SID。
TOKEN_PRIVILEGES アクセス トークンに関連付けられている特権。 また、特権を有効にするかどうかを決定します。
TOKEN_SOURCE アクセス トークンのソース。
TOKEN_STATISTICS アクセス トークンに関連付けられている統計。
TOKEN_USER アクセス トークンに関連付けられているユーザーの SID。

 

アクセス トークン関数は、次の列挙型を使用します。

列挙型 指定内容
TOKEN_INFORMATION_CLASS アクセス トークンから設定または取得される情報の種類を識別します。
TOKEN_TYPE アクセス トークンをプライマリ トークンまたは偽装トークンとして識別します。