1. 程式人生 > >提升本程式程序優先順序和許可權(VC++原始碼) (轉)

提升本程式程序優先順序和許可權(VC++原始碼) (轉)

/****************************************************************
本類功能:提升本程式程序優先順序和許可權
編寫作者:Coderui
編寫日期:2008年03月24日
聯絡郵箱:[email protected]
作者部落格: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日
聯絡郵箱:
[email protected]

作者部落格: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;
}