VC中程序提升管理员权限

转载 2016年08月31日 10:44:39
程序的权限不够,应用管理员权限打开程序运行方可。
如何使vc程序运行时请求管理员权限?

如果是2005或者2008 就简单了,直接

(项目右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator )中文版

(project->property->Configuration Properties->Linker->Manifest File->UAC  Execution Level 选择requireAdministrator)英文版

重新编译 这样你的程序直接运行就拥有管理员权限了。 


代码提权

/****************************************************************
本类功能:提升本程序进程优先级和权限
编写作者:Coderui
编写日期:2008年03月24日
联系邮箱:coderui@163.com 
作者博客:http://hi.baidu.com/coderui 
文件名称:EnablePriv.h
****************************************************************/

class CEnablePriv
{
public:            //公有(对外开放的接口)

	//
	//设置当前进程优先级为最高(实时)
	//
	BOOL SetRealTimePriority();

	//
	//提升当前进程权限函数("SeShutdownPrivilege"关机权限)
	//
	BOOL EnableShutdownPriv();

	//
	//提升当前进程权限函数("SeDebugPrivilege"读、写控制权限)
	//
	BOOL EnableDebugPriv();

	//
	//提升当前进程权限函数("SeBackupPrivilege"注册表备份权限)
	//
	BOOL EnableBackupPriv();

	//
	//提升当前进程权限函数("SeRestorePrivilege"恢复数据权限)
	//
	BOOL EnableRestorePriv();

private:           //私有(内部使用的接口)

};
------------------------------------------------------------------------------------------------------------------------------
/****************************************************************
本类功能:提升本程序进程优先级和权限
编写作者:Coderui
编写日期:2008年03月24日
联系邮箱:coderui@163.com 
作者博客:http://hi.baidu.com/coderui 
文件名称:EnablePriv.cpp
****************************************************************/

#include "stdafx.h"           //需要引用MFC中的这个头文件
#include "EnablePriv.h"          //调用时需要引用的联接头文件

//宏的功能介绍:
//-------------------------------------------------------------
//#define            SE_BACKUP_NAME               TEXT("SeBackupPrivilege")     //备份数据权限
//#define            SE_RESTORE_NAME              TEXT("SeRestorePrivilege")    //恢复数据权限
//#define            SE_SHUTDOWN_NAME             TEXT("SeShutdownPrivilege")   //关机权限
//#define            SE_DEBUG_NAME                TEXT("SeDebugPrivilege")      //读、写控制权限
//-------------------------------------------------------------

//宏的功能介绍:
//-------------------------------------------------------------
//ABOVE_NORMAL_PRIORITY_CLASS(0x00008000)   高于标准
//BELOW_NORMAL_PRIORITY_CLASS(0x00004000)   低于标准
//HIGH_PRIORITY_CLASS(0x00000080)           高
//IDLE_PRIORITY_CLASS(0x00000040)           低
//NORMAL_PRIORITY_CLASS(0x00000020)         标准
//REALTIME_PRIORITY_CLASS(0x00000100)       实时
//-------------------------------------------------------------

//
//设置当前进程优先级为最高(实时)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::SetRealTimePriority()
{
	if( ! SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS ))
	{
		return false;
	}

	return true;
}

//
//提升当前进程权限函数("SeShutdownPrivilege"关机权限)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::EnableShutdownPriv()
{
	HANDLE hToken;
	LUID sedebugnameValue;
	TOKEN_PRIVILEGES tkp;

	if ( ! OpenProcessToken( GetCurrentProcess(),
		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
		return false;

	if ( ! LookupPrivilegeValue( NULL, SE_SHUTDOWN_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 true;
}

//
//提升当前进程权限函数("SeDebugPrivilege"读、写控制权限)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::EnableDebugPriv()
{
	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 true;
}

//
//提升当前进程权限函数("SeBackupPrivilege"备份数据权限)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::EnableBackupPriv()
{
	HANDLE hToken;
	LUID sedebugnameValue;
	TOKEN_PRIVILEGES tkp;

	if ( ! OpenProcessToken( GetCurrentProcess(),
		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
		return false;

	if ( ! LookupPrivilegeValue( NULL, SE_BACKUP_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 true;
}

//
//提升当前进程权限函数("SeRestorePrivilege"恢复数据权限)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::EnableRestorePriv()
{
	HANDLE hToken;
	LUID sedebugnameValue;
	TOKEN_PRIVILEGES tkp;

	if ( ! OpenProcessToken( GetCurrentProcess(),
		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
		return false;

	if ( ! LookupPrivilegeValue( NULL, SE_RESTORE_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 true;
}

相关文章推荐

VC提升进程权限

#include #include #include #include #pragma comment(lib, "Dbghelp.lib") #include #include...

【VC++积累】之二、黑客编程之提权SDK

提权啊。。。。1要打开当前进程的权限令牌。。。。。。。2要获取权限标识。。。。。。。3要提升令牌权限。。。。。。。。。。。。3个API函数搞定 分别是:            OpenProces...

VC程序提升管理员权限

程序的权限不够,应用管理员权限打开程序运行方可。 如何使vc程序运行时请求管理员权限? 如果是2005或者2008 就简单了,直接项目右键---属性---连接器---清单文件---uac执行级...

VC程序在win7系统上运行,自动获取管理员权限

在win7 上运行程序,经常需要管理员权限,如何让自己编写的程序启动的时候获取管理员权限呢?方法如下:   1: 在VS2010中,可以参考《VS2010与Win7共舞:UAC与数据重定向》这篇文...

VC 一句代码提升进程权限

RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE,1,0,NULL); 这个函数封装在NtDll.dll中(在所有DLL加载之前加载),被微软严格保密,就是说你在MSD...

MFC程序提升运行权限

1   vs2012       右击项目选择属性 2   链接器-》 清单文件 -》 UAC执行级别-》 改为requireAdministrator

MFC中提升至管理员权限

满意答案 蓝天 9级 2011-07-19 首先,创建一个文件命名为 ***.manifest  然后将以下内容复制到文件 vers...

MFC中怎样让应用程序获得或以管理员权限运行

原文: ShellExecuteEX编程 --- 获取管理员权限:http://blog.csdn.net/jhui163/article/details/5873027 ...

【总结】用户权限设置和进程权限提升

使用某些Windows API的时候需要提升进程的默认权限,例如RegRestoreKey需要SE_RESTORE_NAME 和SE_BACKUP_NAME 权限。在这种情况下,我们需要使用到一组Wi...
  • yockie
  • yockie
  • 2013-11-29 20:23
  • 13770

VC++程序提升管理员权限

程序的权限不够,应用管理员权限打开程序运行方可。 如何使vc程序运行时请求管理员权限? 如果是2005或者2008 就简单了,直接项目右键---属性---连接器---清单文件---uac执行级...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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