UAC が詳しく書いている reference で書いた reference に載っていたこと。
'New Technologies for Windows Vista' より引用
When a user logs on to a Windows Vista computer, Windows looks at the administrative Windows privileges and Relative IDs (RIDs) that the user account possesses to determine if the user should receive two access tokens (a filtered access token and a full access token). Windows will create two access tokens for the user if either of the following is true:
- The user's account contains any of the following RIDs.
- DOMAIN_GROUP_RID_ADMINS
- DOMAIN_GROUP_RID_CONTROLLERS
- DOMAIN_GROUP_RID_CERT_ADMINS
- DOMAIN_GROUP_RID_SCHEMA_ADMINS
- DOMAIN_GROUP_RID_ENTERPRISE_ADMINS
- DOMAIN_GROUP_RID_POLICY_ADMINS
- DOMAIN_ALIAS_RID_ADMINS
- DOMAIN_ALIAS_RID_POWER_USERS
- DOMAIN_ALIAS_RID_ACCOUNT_OPS
- DOMAIN_ALIAS_RID_SYSTEM_OPS
- DOMAIN_ALIAS_RID_PRINT_OPS
- DOMAIN_ALIAS_RID_BACKUP_OPS
- DOMAIN_ALIAS_RID_RAS_SERVERS
- DOMAIN_ALIAS_RID_PREW2KCOMPACCESS
- DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS
- DOMAIN_ALIAS_RID_CRYPTO_OPERATORS
- The user's account contains any privileges other than those of a standard user account. A standard user account contains only the following privileges.
- SeChangeNotifyPrivilege
- SeShutdownPrivilege
- SeUndockPrivilege
- SeIncreaseWorkingSetPrivilege
- SeTimeZonePrivilege
Note:
What privileges the filtered token contain are based on whether the original token contained any of the restricted RIDS listed above. If any of the restricted RIDs were in the token, all of the privileges are removed except:
SeChangeNotifyPrivilege
SeShutdownPrivilege
SeUndockPrivilege
SeReserveProcessorPrivilege
SeTimeZonePrivilege
If no restricted RIDs were in the token, only the following privileges are removed:
SeCreateTokenPrivilege
SeTcbPrivilege
SeTakeOwnershipPrivilege
SeBackupPrivilege
SeRestorePrivilege
SeDebugPrivilege
SeImpersonatePrivilege
SeRelabelPrivilege
まず、RID(relative identifier) とは何なのか?というと SID Components [Security] にちょろっと書かれていますが、SID の '-' で区切られた各要素になります。例えば、下記のような SID があった場合、
S-1-5-21-191058668-193157475-1542849698-500
'1', '5', '21', '191058668', '193157475', '1542849698', '500' が RID になります。
ただ今回使うのは domain group および domain ailias のRID のみなので、一番最後の部分だけです。
上記の例では '500' がそれに当たります。
Well-known RID は "WinNT.h" に定義されていますので、一度覗いてみるとよいでしょう。
ではなぜ RID でかかれているかというと SID は domain や computer 毎に固有の値が設定される(上記の例では '191058668-193157475-1542849698' の部分)ものがあるため、SID では具合が悪いからです。
RID ではわかりにくいためこれをよく見る文字列の形式に直すべきですが、これに関してはこちらの記事で解説されているので割愛します。
第8回 管理者権限での実行を制限するユーザー・アカウント制御UAC(後編)