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