主要用在有UAC弹窗的情况下,没有管理员运行程序时,IsElevatedAdministrator会返回FALSE
#include<Windows.h>
#include<stdio.h>
BOOL IsElevatedAdministrator()
{
BOOL fIsAdmin = FALSE;
HANDLE hTokenToCheck = NULL;
DWORD lastErr;
DWORD sidLen = SECURITY_MAX_SID_SIZE;
BYTE localAdminsGroupSid[SECURITY_MAX_SID_SIZE];
if (!CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL,
localAdminsGroupSid, &sidLen))
{
goto CLEANUP;
}
if (CheckTokenMembership(hTokenToCheck, localAdminsGroupSid, &fIsAdmin))
{
lastErr = ERROR_SUCCESS;
}
CLEANUP:
if (hTokenToCheck)
{
CloseHandle(hTokenToCheck);
hTokenToCheck = NULL;
}
return (fIsAdmin);
}
int main()
{
if (IsElevatedAdministrator(NULL))
{
printf("有管理员权限\n");
}
else
{
printf("没有管理员权限\n");
}
getchar();
return 0;
}