/****************************************************************
本类功能:提升本程序进程优先级和权限
编写作者:Coderui
编写日期:2008年03月24日
联系邮箱:
作者博客:http://hi.baidu.com/coderui
文件名称:EnablePriv.h
****************************************************************/
class CEnablePriv
{
public: //公有(对外开放的接口)
//
//设置当前进程优先级为最高(实时)
//
BOOL SetRealTimePriority();
//
//调整当前进程权限函数
//
BOOL AdjustPrivilege(LPCTSTR lpName, BOOL bEnable)
private: //私有(内部使用的接口)
};
/****************************************************************
本类功能:提升本程序进程优先级和权限
编写作者:Coderui
编写日期:2008年03月24日
联系邮箱:
作者博客:http://hi.baidu.com/coderui
文件名称:EnablePriv.cpp
****************************************************************/
#include "stdafx.h"
#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;
}
//
//调整当前进程权限函数
//
//返回值:“FALSE”是失败,“TRUE”是成功。
BOOL CEnablePriv::AdjustPrivilege(LPCTSTR lpName, BOOL bEnable)
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
BOOL bret = FALSE;
if (OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ))
{
if (LookupPrivilegeValue( NULL, lpName, &sedebugnameValue ))
{
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = (bEnable ? SE_PRIVILEGE_ENABLED: SE_PRIVILEGE_REMOVED);
bret = AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL);
}
CloseHandle( hToken );
}
return bret;
}