Windows のプログラムを書いていて、管理者権限で実行されているかを判別したいことがあります。
素直にセットアップされた Windows でユーザー起動プログラムが管理者権限の必要な処理を行うためにはプログラム=プロセスに割り当てられた権限が昇格されている必要があります(昇格操作は一般的にはユーザーによる UAC 確認ダイアログの操作によって行われますが、確認操作を要求しない環境もあります)。昇格の確認は次の手順で可能です。
- プログラムのプロセスに割り当てられているアクセストークンを取得
- アクセストークンの昇格種別を取得、昇格されているかを確認
しかし稀に管理者権限の必要な操作はできるのに上記の手順だと昇格されていないと判別されるサインインアカウントがあります。ビルトイン(=ローカル)の Administrator アカウントがそれです。
Local accounts | Microsoft Learn
上記 Web ページによればビルトイン Administrator アカウントはセットアップがすんだら無効化されるとのことですが、なんらかの理由により無効にされないままサインインアカウントとしても利用できる状況が生じうるようです。実際に確認しています。
現実として生じうる現象なので対応する必要があります。ビルトイン Administrator アカウントはセキュリティ識別子(Sercurity Identifier, SID)に環境によらない法則性があり、文字列表現にしたときはじまりが S-1-5- 、終わりが -500 になります。プロセスを実行しているユーザーの SID がこの条件を満たしたら管理者権限とみなして問題ありません。
以上、参考になりましたら幸いです。