VC程序提升管理员权限
2015-12-31 12:08
351 查看
程序的权限不够,应用管理员权限打开程序运行方可。
如何使vc程序运行时请求管理员权限?
如果是2005或者2008 就简单了,直接项目右键---属性---连接器---清单文件---uac执行级别 选择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程序运行时请求管理员权限?
如果是2005或者2008 就简单了,直接项目右键---属性---连接器---清单文件---uac执行级别 选择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;
}
相关文章推荐
- java POI读取excel 并保存在数据库中
- RxJava练习(3)--跳过与截取
- javaweb项目将文件上传至数据库中的大小限制
- 2015-菜鸟Android历程
- komodo远程调试perl
- UIScrollView在有点击手势的情况下,会导致UITableView的cell点击事件无法响应
- 欢迎使用CSDN-markdown编辑器
- struts2
- 从SqlServer现有数据生成Insert脚本
- expect语法
- 文件上传方法总结
- JMeter使用总结
- 关于android中sharedpreferences数据不更新的问题
- iOS开发 UICollectionView详解+实例
- RVM(Ruby Version Manager)安装和使用
- Android Studio 快捷键
- oracle中cursor与refcursor及sys_refcursor的区别
- 鲁迅:《在酒楼上》
- 【日常】摸一摸怎样把LOL修改成英文版
- 10019---浅谈UML的概念和模型之UML九种图