您的位置:首页 > 其它

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: