アクセス トークン

アクセス トークンは、プロセスまたはスレッドのセキュリティ コンテキストを記述するオブジェクトです。 トークン内の情報には、プロセスまたはスレッドに関連付けられているユーザー アカウントの 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 アクセス トークンをプライマリ トークンまたは偽装トークンとして識別します。