• 提升本程序进程优先级和权限(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;
    }
  • 相关阅读:
    yuv文件并行解析播放
    视频解析
    有意思的并查集讲解 收藏
    C++输入输出重载
    python 同步IO
    多线程与多进程的理解
    centos7 配置redis
    linux中的raid
    form表单系列中文件上传及预览
    centos7 安装swftools Apache_OpenOffice
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318826.html
Copyright © 2020-2023  润新知