ultimatepp/uppdev/Win32Admin/main.cpp
cxl b7403bfbdb .uppdev
git-svn-id: svn://ultimatepp.org/upp/trunk@7814 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2014-10-23 05:52:35 +00:00

52 lines
1.3 KiB
C++

#include <CtrlLib/CtrlLib.h>
#include <Shellapi.h>
using namespace Upp;
bool IsAdmin()
{
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
// Initialize SID.
if( !AllocateAndInitializeSid( &NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup))
{
// Initializing SID Failed.
return false;
}
// Check whether the token is present in admin group.
BOOL IsInAdminGroup = FALSE;
if( !CheckTokenMembership( NULL,
AdministratorsGroup,
&IsInAdminGroup ))
{
// Error occurred.
IsInAdminGroup = FALSE;
}
// Free SID and return.
FreeSid(AdministratorsGroup);
return IsInAdminGroup;
}
GUI_APP_MAIN
{
if(IsAdmin()) {
RLOG("Now I am admin, everything is fine.");
PromptOK("I am an admin!");
}
else {
RLOG("Not an admin, starting as admin");
PromptOK("Not an admin, running as admin");
ShellExecute(NULL, "runas", GetExeFilePath(), 0, 0, SW_SHOWNORMAL);
return;
}
RLOG("Doing admin stuff...");
getchar();
}