-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPriv.cpp
131 lines (105 loc) · 3.03 KB
/
Priv.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "Priv.h"
BOOL CEnablePriv::SetRealTimePriority()
{
if (!SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS))
{
return false;
}
return true;
}
//
// Elevate current process privileges function ("SeShutdownPrivilege" shutdown privilege)
//
// Returns: "false" on failure, "true" on success.
BOOL CEnablePriv::EnableShutdownPriv()
{
HANDLE hToken;
LUID shutdownPrivilegeValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return false;
if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &shutdownPrivilegeValue))
{
CloseHandle(hToken);
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = shutdownPrivilegeValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL))
CloseHandle(hToken);
return true;
}
//
// Elevate current process privileges function ("SeDebugPrivilege" read, write control privilege)
//
// Returns: "false" on failure, "true" on success.
BOOL CEnablePriv::EnableDebugPriv()
{
HANDLE hToken;
LUID debugPrivilegeValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return false;
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &debugPrivilegeValue))
{
CloseHandle(hToken);
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = debugPrivilegeValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL))
CloseHandle(hToken);
return true;
}
//
// Elevate current process privileges function ("SeBackupPrivilege" backup data privilege)
//
// Returns: "false" on failure, "true" on success.
BOOL CEnablePriv::EnableBackupPriv()
{
HANDLE hToken;
LUID backupPrivilegeValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return false;
if (!LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &backupPrivilegeValue))
{
CloseHandle(hToken);
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = backupPrivilegeValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL))
CloseHandle(hToken);
return true;
}
//
// Elevate current process privileges function ("SeRestorePrivilege" restore data privilege)
//
// Returns: "false" on failure, "true" on success.
BOOL CEnablePriv::EnableRestorePriv()
{
HANDLE hToken;
LUID restorePrivilegeValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return false;
if (!LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &restorePrivilegeValue))
{
CloseHandle(hToken);
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = restorePrivilegeValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL))
CloseHandle(hToken);
return true;
}