测试结果
- 用管理员权限运行,返回TRUE;
- 在UAC环境下直接运行,返回FALSE;
- 在SYSTEM权限服务进程中执行,返回TRUE。
//
BOOL IsAdmin()
{
typedef BOOL(WINAPI *_LPFN_ISADMIN) (VOID);
_LPFN_ISADMIN fnIsAdmin;
// IsUserAnAdmin
HMODULE hShell32 = LoadLibraryA("Shell32.dll");
fnIsAdmin = (_LPFN_ISADMIN)::GetProcAddress(hShell32, "IsUserAnAdmin");
if (NULL != fnIsAdmin)
{
return fnIsAdmin();
}
return FALSE;
}
BOOL IsUserAdmin(VOID)
/*++
Routine Description: This routine returns TRUE if the caller's
process is a member of the Administrators local group. Caller is NOT
expected to be impersonating anyone and is expected to be able to
open its own process and process token.
Arguments: None.
Return Value:
TRUE - Caller has Administrators local group.
FALSE - Caller does not have Administrators local group. --
*/
{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = AllocateAndInitializeSid(
&NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup);
if (b)
{
if (!CheckTokenMembership( NULL, AdministratorsGroup, &b))
{
b = FALSE;
}
FreeSid(AdministratorsGroup);
}
return(b);
}
发表回复