您的位置:首页 > 编程语言 > C语言/C++

提升本程序进程优先级和权限(VC++源代码)

2013-05-28 17:28 295 查看

提升本程序进程优先级和权限(VC++源代码)

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

/****************************************************************

本类功能:提升本程序进程优先级和权限

编写作者:Coderui

编写日期:2008年03月24日

联系邮箱:

作者博客: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日

联系邮箱:

作者博客: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;

}

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