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