Administrator 権限を持っているか確認したい

相談されたので、作ってみました。
簡単なサンプルですが、使えると思います。

//
// Administrator 権限を持っていたら、true を返します。
//
bool IsAdmin(DWORD * pdwErr)
{
    PSID psidAdministrators;
    SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
    // SID を割り当てて初期化する。
    if (!AllocateAndInitializeSid(
        &siaNtAuthority,
        2,
        SECURITY_BUILTIN_DOMAIN_RID, // 組み込みのシステムドメイン
        DOMAIN_ALIAS_RID_ADMINS,     // システム/ドメインの管理を行うローカルグループ
        0, 0, 0, 0, 0, 0,
        &psidAdministrators)
        )
    {
        * pdwErr = GetLastError();
        return false;
    }

    BOOL bIsAdmin = FALSE;

    // 指定した SID がアクセストークン内で有効になっているかどうかを調べる。
    if (!CheckTokenMembership(NULL, psidAdministrators, &bIsAdmin))
    {
        * pdwErr = GetLastError();
        bIsAdmin = FALSE;
    }

    // AllocateAndInitializeSid 関数を使って割り当てた SID を解放する。
    FreeSid(psidAdministrators);

    return bIsAdmin ? true : false;
}

ポイントとなる API は、

です。 SID については

あたりに記載があります。

One Response to Administrator 権限を持っているか確認したい

  1. ピンバック: Administrator 権限を持っているか確認したい(その2) « re-Think things

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。