Windows 2000 以降なら GetTokenInformation で TokenGroups を取得してゴリゴリやらなくても OK です。
CheckTokenMembership がありますので。そこに載っている sample IsUserAdmin がそのままですね。
ただ、Windows XP 以降が前提なら AllocateAndInitializeSid を利用しなくてもいいですね。つまり SID に関する知識が無くてもなんとかなります。
CreateWellKnownSid というのがありますので。ということで適当に作った sample 書いておきます。
DWORD cbSid;
CreateWellKnownSid(WinBuiltinUsersSid
, NULL
, NULL
, &cbSid);
SetLastError(0);
HANDLE thisHeap = GetProcessHeap();
PSID pSid = (PSID)HeapAlloc(thisHeap
, HEAP_GENERATE_EXCEPTIONS
, cbSid);
if (!(CreateWellKnownSid(WinBuiltinAdministratorsSid
, NULL
, pSid
, &cbSid)))
{
_tprintf_s(_T("CreateWellKnownSid error\t%d\n")
, GetLastError());
}
BOOL result;
if (!(CheckTokenMembership(NULL
, pSid
, &result)))
{
_tprintf_s(_T("CheckTokenMembership error\t%d\n")
, GetLastError());
}
HeapFree(thisHeap, 0, pSid);
_tprintf_s(_T("%d\n")
, result);
でも、ぶっちゃけ純粋な調査目的でもない限り Administrators group に所属しているか?で分岐するのは推奨しません。