提升本程序进程优先级和权限

 

/****************************************************************
本类功能:提升本程序进程优先级和权限
编写作者: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;
}

 

 

 

posted @ 2013-08-22 23:09  huhu0013  阅读(535)  评论(0编辑  收藏  举报