zoukankan      html  css  js  c++  java
  • 提升本程序进程优先级和权限(VC++源代码) (转)

    /****************************************************************
    本类功能:提升本程序进程优先级和权限
    编写作者: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;
    }
  • 相关阅读:
    placeholder在ie浏览器里不显示的问题解决
    条件注释判断浏览器版本<!--[if lt IE 9]>
    在CSS中,BOX的Padding属性的数值赋予顺序为
    PhpStorm的注册码、Key
    关于【bootstrap modal 模态框弹出瞬间消失的问题】
    python 常见算法
    scrapy 爬虫基础
    python中的小知识点
    python 数据结构简介
    前端插件定制--表头和表内容
  • 原文地址:https://www.cnblogs.com/rainbowzc/p/1252605.html
Copyright © 2011-2022 走看看