2011-11-08 37 views
12

プロセスが管理者権限で実行されているかどうかを正しく確認する方法を教えてください。プロセスに管理者権限があるかどうかを確認する方法

IsUserAnAdim function in MSDNを確認しましたが、それ以降のバージョンのWindowsでは変更または使用できない可能性があるのでお勧めできません。代わりに、CheckTokenMembership関数を使用することをお勧めします。

次に、CheckTokenMembership関数の説明からMSDNの代替例を検討しました。しかし、UACが無効になっていると、Windows Vistaでこの例が正しく動作しないというMSDNのStefan Ozminskiのコメントがあります。

は最後に、私は、MSDNからステファンOzminskiのコードを使用しようとしましたが、それは、私は、Windows 7の管理者権限を持たない一般のユーザーで

+1

あなたがここに任意のコードを表示できない場合は、少なくともあなたは、参照記事/コメント/コードへのリンクを提供してくれるだろうか? –

+2

「管理者権限」の意味を正確に定義するのに役立ちます。それが管理者グループのユーザーとして実行されている場合は意味しますか? UACの完全な権利を持っているのですか? –

+0

PrivilegeCheck APIを試しましたか? – sarat

答えて

36

それを起動しても、これがあれば教えてくれますプロセスが管理者権限を持っていると判断し昇格された権限で実行されているかどうか。マニフェストをプロンプトする場合は、可能な限り実行するようにマニフェストを設定できます。また、別の資格情報のコードを介してウィンドウに問い合わせる他の方法もあります。

 
BOOL IsElevated() { 
    BOOL fRet = FALSE; 
    HANDLE hToken = NULL; 
    if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken)) { 
     TOKEN_ELEVATION Elevation; 
     DWORD cbSize = sizeof(TOKEN_ELEVATION); 
     if(GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) { 
      fRet = Elevation.TokenIsElevated; 
     } 
    } 
    if(hToken) { 
     CloseHandle(hToken); 
    } 
    return fRet; 
} 

関連する問題