ログオンユーザーが所属するグループを取得するには?


息詰まり  2007-02-20 01:06:02  No: 64493  IP: 192.*.*.*

開発環境WinXP VS2003
CDから起動するネイティブプログラムを作成しています。
実行時に管理者権限か否かを判断したいのですが、どうも
よく分かりません。
初心者なので分かりやすくご教授いただければ幸いです。
実行先のOSはXP/2000です。

宜しくお願いします。

編集 削除
シャノン  2007-02-20 10:37:33  No: 64494  IP: 192.*.*.*

1. OpenProcessToken で、自プロセスのトークンハンドルを得る
2. GetTokenInformation に TokenGroups を渡せば、グループ情報が取れる。

以上で、プロセスを実行しているユーザの属するグループ情報がわかる。

このユーザが現在ログオンしているユーザかどうかは、このグループ情報の中に、( SID_AND_ATTRIBUTES.Attribute & SE_GROUP_LOGON_ID ) != 0 であるグループがあるかどうかで判別できる。

このユーザが Administrators グループに属しているかどうかは、このグループ情報の中に、EqualSid( SID_AND_ATTRIBUTES.Sid, <AdministratorsグループのSid> ) が成り立つグループがあるかどうかで判別できる。

Administrators グループの SID の取得方法は以下のページで紹介されている。
http://www7a.biglobe.ne.jp/~lshen/EternalWindows/Security/AccessControl/AccessControl20.html

あとは SDK 見てがんばれ。

編集 削除
シャノン  2007-02-20 10:39:24  No: 64495  IP: 192.*.*.*

ただし、Administrators グループに属しているかどうかで処理方法を変えるのは下策のような気がする。
対象のリソースに対してアクセス権があるかどうかを調べる一番いい方法は、実際にアクセスしてみて成功するかどうかを調べることだと思う。

編集 削除