提升本程序进程优先级和权限(VC++源代码)

/****************************************************************
本类功能:提升本程序进程优先级和权限
编写作者:Coderui
编写日期:2008年03月24日
联系邮箱:coderui@163.com
作者博客:http://hi.baidu.com/coderui
文件名称:EnablePriv.h
****************************************************************/

 1 class CEnablePriv
2 {
3 public: //公有(对外开放的接口)
4
5 //
6 //设置当前进程优先级为最高(实时)
7 //
8 BOOL SetRealTimePriority();
9
10 //
11 //提升当前进程权限函数("SeShutdownPrivilege"关机权限)
12 //
13 BOOL EnableShutdownPriv();
14
15 //
16 //提升当前进程权限函数("SeDebugPrivilege"读、写控制权限)
17 //
18 BOOL EnableDebugPriv();
19
20 //
21 //提升当前进程权限函数("SeBackupPrivilege"注册表备份权限)
22 //
23 BOOL EnableBackupPriv();
24
25 //
26 //提升当前进程权限函数("SeRestorePrivilege"恢复数据权限)
27 //
28 BOOL EnableRestorePriv();
29
30 private: //私有(内部使用的接口)
31
32 };

------------------------------------------------------------------------------------------------------------------------------
/****************************************************************
本类功能:提升本程序进程优先级和权限
编写作者:Coderui
编写日期:2008年03月24日
联系邮箱:coderui@163.com
作者博客:http://hi.baidu.com/coderui
文件名称:EnablePriv.cpp
****************************************************************/

  1 #include "stdafx.h"           //需要引用MFC中的这个头文件
2 #include "EnablePriv.h" //调用时需要引用的联接头文件
3
4 //宏的功能介绍:
5 //-------------------------------------------------------------
6 //#define SE_BACKUP_NAME TEXT("SeBackupPrivilege") //备份数据权限
7 //#define SE_RESTORE_NAME TEXT("SeRestorePrivilege") //恢复数据权限
8 //#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege") //关机权限
9 //#define SE_DEBUG_NAME TEXT("SeDebugPrivilege") //读、写控制权限
10 //-------------------------------------------------------------
11
12 //宏的功能介绍:
13 //-------------------------------------------------------------
14 //ABOVE_NORMAL_PRIORITY_CLASS(0x00008000) 高于标准
15 //BELOW_NORMAL_PRIORITY_CLASS(0x00004000) 低于标准
16 //HIGH_PRIORITY_CLASS(0x00000080) 高
17 //IDLE_PRIORITY_CLASS(0x00000040) 低
18 //NORMAL_PRIORITY_CLASS(0x00000020) 标准
19 //REALTIME_PRIORITY_CLASS(0x00000100) 实时
20 //-------------------------------------------------------------
21
22 //
23 //设置当前进程优先级为最高(实时)
24 //
25 //返回值:“false”是失败,“true”是成功。
26 BOOL CEnablePriv::SetRealTimePriority()
27 {
28 if( ! SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS ))
29 {
30 return false;
31 }
32
33 return true;
34 }
35
36 //
37 //提升当前进程权限函数("SeShutdownPrivilege"关机权限)
38 //
39 //返回值:“false”是失败,“true”是成功。
40 BOOL CEnablePriv::EnableShutdownPriv()
41 {
42 HANDLE hToken;
43 LUID sedebugnameValue;
44 TOKEN_PRIVILEGES tkp;
45
46 if ( ! OpenProcessToken( GetCurrentProcess(),
47 TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
48 return false;
49
50 if ( ! LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &sedebugnameValue ) )
51 {
52 CloseHandle( hToken );
53 return false;
54 }
55
56 tkp.PrivilegeCount = 1;
57 tkp.Privileges[0].Luid = sedebugnameValue;
58 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
59
60 if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
61 CloseHandle( hToken );
62
63 return true;
64 }
65
66 //
67 //提升当前进程权限函数("SeDebugPrivilege"读、写控制权限)
68 //
69 //返回值:“false”是失败,“true”是成功。
70 BOOL CEnablePriv::EnableDebugPriv()
71 {
72 HANDLE hToken;
73 LUID sedebugnameValue;
74 TOKEN_PRIVILEGES tkp;
75
76 if ( ! OpenProcessToken( GetCurrentProcess(),
77 TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
78 return false;
79
80 if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
81 {
82 CloseHandle( hToken );
83 return false;
84 }
85
86 tkp.PrivilegeCount = 1;
87 tkp.Privileges[0].Luid = sedebugnameValue;
88 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
89
90 if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
91 CloseHandle( hToken );
92
93 return true;
94 }
95
96 //
97 //提升当前进程权限函数("SeBackupPrivilege"备份数据权限)
98 //
99 //返回值:“false”是失败,“true”是成功。
100 BOOL CEnablePriv::EnableBackupPriv()
101 {
102 HANDLE hToken;
103 LUID sedebugnameValue;
104 TOKEN_PRIVILEGES tkp;
105
106 if ( ! OpenProcessToken( GetCurrentProcess(),
107 TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
108 return false;
109
110 if ( ! LookupPrivilegeValue( NULL, SE_BACKUP_NAME, &sedebugnameValue ) )
111 {
112 CloseHandle( hToken );
113 return false;
114 }
115
116 tkp.PrivilegeCount = 1;
117 tkp.Privileges[0].Luid = sedebugnameValue;
118 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
119
120 if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
121 CloseHandle( hToken );
122
123 return true;
124 }
125
126 //
127 //提升当前进程权限函数("SeRestorePrivilege"恢复数据权限)
128 //
129 //返回值:“false”是失败,“true”是成功。
130 BOOL CEnablePriv::EnableRestorePriv()
131 {
132 HANDLE hToken;
133 LUID sedebugnameValue;
134 TOKEN_PRIVILEGES tkp;
135
136 if ( ! OpenProcessToken( GetCurrentProcess(),
137 TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
138 return false;
139
140 if ( ! LookupPrivilegeValue( NULL, SE_RESTORE_NAME, &sedebugnameValue ) )
141 {
142 CloseHandle( hToken );
143 return false;
144 }
145
146 tkp.PrivilegeCount = 1;
147 tkp.Privileges[0].Luid = sedebugnameValue;
148 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
149
150 if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
151 CloseHandle( hToken );
152
153 return true;
154 }

posted @ 2011-09-20 21:38  bamb00  阅读(1194)  评论(0)    收藏  举报