如何代码设置以管理员身份启动程序

转载 2016年01月07日 11:14:51


将UAC级别设置为图中所示就可在工程生成的程序启动时自动请求获得管理员权限


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


【转】http://blog.csdn.net/abcpanpeng/article/details/4953529

三个给进程提权的方法

 

方法一:

C/C++ code
bool EnableDebugPrivilege() { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { return FALSE; } if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue)) { CloseHandle(hToken); return false; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) { CloseHandle(hToken); return false; } return true; }




方法二:

C/C++ code
bool UpPrivilege() { HANDLE hToken; // handle to process token TOKEN_PRIVILEGES tkp; // pointer to token structure bool result = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken); if(!result) //打开进程错误 return result; result = LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid); if(!result) //查看进程权限错误 return result; tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; result = AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL); return result; }



方法三:

C/C++ code
#define SE_CREATE_TOKEN_NAME              TEXT("SeCreateTokenPrivilege")
#define SE_ASSIGNPRIMARYTOKEN_NAME        TEXT("SeAssignPrimaryTokenPrivilege")
#define SE_LOCK_MEMORY_NAME               TEXT("SeLockMemoryPrivilege")
#define SE_INCREASE_QUOTA_NAME            TEXT("SeIncreaseQuotaPrivilege")
#define SE_UNSOLICITED_INPUT_NAME         TEXT("SeUnsolicitedInputPrivilege")
#define SE_MACHINE_ACCOUNT_NAME           TEXT("SeMachineAccountPrivilege")
#define SE_TCB_NAME                       TEXT("SeTcbPrivilege")
#define SE_SECURITY_NAME                  TEXT("SeSecurityPrivilege")
#define SE_TAKE_OWNERSHIP_NAME            TEXT("SeTakeOwnershipPrivilege")
#define SE_LOAD_DRIVER_NAME               TEXT("SeLoadDriverPrivilege")
#define SE_SYSTEM_PROFILE_NAME            TEXT("SeSystemProfilePrivilege")
#define SE_SYSTEMTIME_NAME                TEXT("SeSystemtimePrivilege")
#define SE_PROF_SINGLE_PROCESS_NAME       TEXT("SeProfileSingleProcessPrivilege")
#define SE_INC_BASE_PRIORITY_NAME         TEXT("SeIncreaseBasePriorityPrivilege")
#define SE_CREATE_PAGEFILE_NAME           TEXT("SeCreatePagefilePrivilege")
#define SE_CREATE_PERMANENT_NAME          TEXT("SeCreatePermanentPrivilege")
#define SE_BACKUP_NAME                    TEXT("SeBackupPrivilege")
#define SE_RESTORE_NAME                   TEXT("SeRestorePrivilege")
#define SE_SHUTDOWN_NAME                  TEXT("SeShutdownPrivilege")
#define SE_DEBUG_NAME                     TEXT("SeDebugPrivilege")
#define SE_AUDIT_NAME                     TEXT("SeAuditPrivilege")
#define SE_SYSTEM_ENVIRONMENT_NAME        TEXT("SeSystemEnvironmentPrivilege")
#define SE_CHANGE_NOTIFY_NAME             TEXT("SeChangeNotifyPrivilege")
#define SE_REMOTE_SHUTDOWN_NAME           TEXT("SeRemoteShutdownPrivilege")
#define SE_UNDOCK_NAME                    TEXT("SeUndockPrivilege")
#define SE_SYNC_AGENT_NAME                TEXT("SeSyncAgentPrivilege")
#define SE_ENABLE_DELEGATION_NAME         TEXT("SeEnableDelegationPrivilege")
#define SE_MANAGE_VOLUME_NAME             TEXT("SeManageVolumePrivilege")

BOOL EnablePrivilege(LPCTSTR lpszPrivilegeName,BOOL bEnable)
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tp;
    LUID luid;
    
    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |
        TOKEN_QUERY | TOKEN_READ,&hToken))
        return FALSE;
    if(!LookupPrivilegeValue(NULL, lpszPrivilegeName, &luid))
        return TRUE;
    
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    tp.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0;
    
    AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,NULL);
    
    CloseHandle(hToken);
    
    return (GetLastError() == ERROR_SUCCESS);
    
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


【转】http://feng06.blog.163.com/blog/static/13501502014102385528860/

在vista以后的windows版本中,有些时候需要提升编译后生成程序的权限,即希望让生成的程序以管理员身份运行。虽然在一般情况下,可以使用鼠标右键选择的方式来强行以管理员身份运行,但它并没有屏蔽普通运行方式,而且普通人通常也不会使用右键选择以管理员身份运行,所以必须在生成程序时就限定程序只能以管理员方式来运行。以下以C++builder为例来说明一下具体方法。

先简单说一下,在vista以后的windows版本中,微软引入了UAC机制,它的目的是防止程序对操作系统本身进行恶意篡改。要让程序以管理员身份运行,就需要在程序中引入UAC标注,也即让程序显示“UAC盾牌”。

如何跳过UAC以管理员身份启动程序

往往我们要用管理员身份去运行一个程序的时候,总是要有一个提示框: 可能会有用户选择禁用UAC,但这毕竟对系统的安全存在影响。下面就用一个简单的方法解决这个问题。该方法就是利用系统自带的任务...

Windows核心编程-如何以管理员的身份启动一个程序

怎样以管理员的身份,来启动一个程序 可以将下面这段代码写在_tmain()函数中,起始相当于开了两个进程,第一个进程起过渡作用,用来 启动第二个管理员权限的进程,但是用户看不见的。 类似于上...

C#设置注册表权限失败,修改应用程序以管理员身份执行

最近写了一个控制台程序,将程序的相关信息注册到注册表中。但是运行的时候提示写注册表被拒。电脑的当前用户没有管理员的权限。 如何给控制台程序赋管理员的权限呢? 给程序添加 .manifest ...

如何让Delphi程序启动自动“以管理员身份运行"

如何让Delphi程序启动自动“以管理员身份运行"
  • rznice
  • rznice
  • 2015年12月14日 17:27
  • 3683

Qt应用程序以管理员身份启动

在做程序的时候,有时候我们需要我们的应用程序拥有管理员权限,这样就可以做一些设置,而且可以防止没有权限修改导致程序出错。 编译好的程序,是没有管理员权限的,我们使用的话,需要右键,以管理员身份启动,...

C# 使用管理员身份启动应用程序源码

最近为公司做了一个项目,自动从网页上抓取数据,抓取时间是固定的,程序运行在服务器上,所以想要给程序写一段开机自动运行的代码。 运行下面代码,在CreateSubKey(..)函数时程序报错:不允许访...

如何判断应用程序是以管理员身份运行,和如何判断应用程序是以提升的权限来启动的,还是正在使用筛选的令牌运行

摘自Windows核心编程(第五版) 本章讲述两个问题: 1、如何判断应用程序是以管理员身份运行; 2、如何判断应用程序是以提升的权限来启动的,还是正在使用筛选的令牌运行。 下面这个名为Get...

以管理员身份运行程序

  • 2011年09月28日 09:10
  • 1.61MB
  • 下载

C# WinForm判断程序是否以管理员身份运行,UAC权限的提权与降权

如果程序不是以管理员身份运行,操作本地文件会提示:System.UnauthorizedAccessException异常   Vista 和 Windows 7 操作系统为了加强...
  • wlanye
  • wlanye
  • 2013年04月08日 10:55
  • 3184

c#通过app.manifest使程序以管理员身份运行

微软在Windows Vista开始引入了UAC(用户帐户控制)新技术。当程序执行时需要权限的话,UAC会弹出警告消息:让用户确认是否同意允许这个程序改变你的计算机配置,windows需要得到你的许可...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何代码设置以管理员身份启动程序
举报原因:
原因补充:

(最多只允许输入30个字)