DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Administrator権限の有無を調べる方法

環境/言語:[環境(Windows 7)、Visual  Studio2008、使用言語(C#)、.NET Frameworkのバージョン(2.0)]
分類:[.NET]

Windows 7等で以下のプログラムを実行した時にアドミニ権限を調べたのですが、
実際のユーザ アカウントでの設定値と異なる結果を返します。

using System;
using System.Security.Principal;
public static bool IsAdmin()
{
WindowsIdentity ident = WindowsIdentity.GetCurrent();
WindowsPrincipal princ = new WindowsPrincipal(ident);
bool result = princ.IsInRole(WindowsBuiltInRole.Administrator);
return result;
}

IsInRoleを調べた結果、以下のことが分かりました。
*********************************************************************
Windows Vista では、ユーザー アカウント制御 (UAC: User Account Control) でユーザーの権限が決定されます。
ユーザーが組み込みの Administrators グループのメンバである場合、そのユーザーには
標準ユーザー アクセス トークンおよび管理者アクセス トークンという 2 つのランタイム アクセス トークンが割り当てられています。
既定では、ユーザーは標準ユーザー ロールに所属します。
管理者特権が必要なタスクを実行しようとする場合は、[同意] ダイアログ ボックスを使用して動的にロールを昇格できます。
IsInRole メソッドを実行するコードでは、[同意] ダイアログ ボックスは表示されません。
ユーザーが標準ユーザー ロールに所属する場合は、そのユーザーが組み込みの Administrators グループのメンバであっても、
このコードは false を返します。
ユーザーの権限は、コードの実行前にアプリケーション アイコンを右クリックし、
管理者として実行するタスクを示すことで昇格できます。
*********************************************************************

何か他にアドミニ権限の有無を調べられる方法があれば
教えて下さい。よろしくお願いします。
> 何か他にアドミニ権限の有無を調べられる方法があれば
> 教えて下さい。よろしくお願いします。

  http://www.usefullcode.net/2006/12/post_32.html

  これ使えませんか?

以上。
>   http://www.usefullcode.net/2006/12/post_32.html
>
>   これ使えませんか?

[DllImport("shell32.dll")]
public static extern bool IsUserAnAdmin();
public static bool IsAdmin3()
{
bool result = IsUserAnAdmin();
return result;
}

上記で試してみましたが、結果はfalseが返って来ました。

他にも、下記方法で試してみましたが、ダメでした。
public static bool IsAdmin2()
{
AppDomain.CurrentDomain.SetPrincipalPolicy(
PrincipalPolicy.WindowsPrincipal);

WindowsPrincipal princ =
(WindowsPrincipal)Thread.CurrentPrincipal;

bool result = princ.IsInRole(WindowsBuiltInRole.Administrator);
return result;
}

他に方法は無いでしょうか?
よろしくお願いします。
自身が管理者権限を取得できるのか?
と言うことを知りたいんでか?
それとも「今、管理者権限を保有しているか?」を
知りたいんですか?

管理者として実行
としてその実行形式プログラムを起動すれば、True
が返ってきます。

以上。
■No27558に返信(オショウさんの記事)
> 自身が管理者権限を取得できるのか?
> と言うことを知りたいんでか?
> それとも「今、管理者権限を保有しているか?」を
> 知りたいんですか?
>
> 管理者として実行
> としてその実行形式プログラムを起動すれば、True
> が返ってきます。
>

「現在、管理者として実行しているか」では無く
実際のユーザアカウントでの設定が知りたいのです。

宜しくお願いします。
> 「現在、管理者として実行しているか」では無く
> 実際のユーザアカウントでの設定が知りたいのです。

  そのユーザーがどのグループに属しているか?
  を取得すれば、済む話かと思いますが・・・

  http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37033&forum=6

※ 取れなければ(エラーすれば)ゲストに属している
  とか・・・

以上。参考まで
http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/d96d10d3-0a9d-4f60-9fbc-4f601120a2fe

上記サイトを参考に、Administratorのユーザーの抽出を行うことが出来たので
自分のユーザーもアドミニ権限があるか調べることができました。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板