...
int main(){
HANDLE hToken;
BOOL bRet = OpenProcessToken(
GetCurrentProcess(),
TOKEN_ALL_ACCESS,
&hToken
);
if (bRet !=
TRUE) cout <<
"获取令牌句柄失败!" << endl;
BOOL set = SetPrivilege(hToken, SE_DEBUG_NAME,
TRUE);
if (!set || GetLastError() != ERROR_SUCCESS) cout <<
"提升权限失败 error:" << GetLastError() << endl;
return 0;
}
BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege,
BOOL bEnablePrivilege)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if (!LookupPrivilegeValue(
NULL,
lpszPrivilege,
&luid))
{
printf(
"LookupPrivilegeValue error: %u\n", GetLastError());
return FALSE;
}
tp
.PrivilegeCount =
1;
tp
.Privileges[
0]
.Luid = luid;
if (bEnablePrivilege)
tp
.Privileges[
0]
.Attributes = SE_PRIVILEGE_ENABLED;
else
tp
.Privileges[
0]
.Attributes =
0;
if (!AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
NULL,
NULL))
{
printf(
"AdjustTokenPrivileges error: %u\n", GetLastError());
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
printf(
"令牌在NewState参数中没有这个或这些权限 \n");
return FALSE;
}
return TRUE;
}
转自:https://segmentfault.com/n/1330000003915940
转载请注明原文地址: https://ju.6miu.com/read-1303429.html