永发信息网

SE_PRIVILEGE_ENABLED是什么样的权限?

答案:2  悬赏:0  手机版
解决时间 2021-02-19 17:55
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
MessageBox("OpenProcessToken failed!");
}

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); //获得本地机唯一的标识
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限

if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("AdjustTokenPrivileges enable failed!");
}
可以告诉我获得权限的过程吗?比如这些代码的操作及其原因
最佳答案
1、关于提升权限的方法,在MSDN里面有一个好例子:

#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "cmcfg32.lib")

BOOL SetPrivilege(
HANDLE hToken, // access token handle
LPCTSTR lpszPrivilege, // name of privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid;

if ( !LookupPrivilegeValue(
NULL, // lookup privilege on local system
lpszPrivilege, // privilege to lookup
&luid ) ) // receives LUID of privilege
{
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;

// Enable the privilege or disable all privileges.

if ( !AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL) )
{
printf("AdjustTokenPrivileges error: %u\n", GetLastError() );
return FALSE;
}

if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)

{
printf("The token does not have the specified privilege. \n");
return FALSE;
}

return TRUE;
}
2、经过分析之后,于是写出开关Debug权限的函数:
BOOL CWarKeyDlg::EnableDebugPrivilege(BOOL bEnableDebugPrivilege)
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;

if(!::OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
::MessageBox(this->GetSafeHwnd(), GET_TOKEN_ERROR, MSG_BOX_TITLE, MB_OK);
return FALSE;
}

if(!::LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
{
::MessageBox(this->GetSafeHwnd(), GET_PRIVILEGE_VALUE_ERROR, MSG_BOX_TITLE, MB_OK);
::CloseHandle(hToken);
return FALSE;
}

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if(bEnableDebugPrivilege)
{
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
}
else
{
tp.Privileges[0].Attributes = 0;
}

if(!::AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL))
{
::MessageBox(this->GetSafeHwnd(), ADJUST_PRIVILEGE_ERROR, MSG_BOX_TITLE, MB_OK);
::CloseHandle(hToken);
return FALSE;
}

::CloseHandle(hToken);

if(::GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
::MessageBox(this->GetSafeHwnd(), ENABLE_DEBUG_ERROR, MSG_BOX_TITLE, MB_OK);
return FALSE;
}
return TRUE;
}

利用这个函数给自己的WarKey开启Debug权限,再访问魔兽进程的内存时,就可以读出其中的数据了。
全部回答

tlhelp32.h

winbase.h

psapi.h

windows.h

一般在这几个头文件

呵呵~~你想提升进程权限吧~?!

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
空难失事,一般可以获赔多少?如果买了保险又
精选赤霞珠SANTA ROSA CABERNET SAUVIGNON 这
如皋市江安镇葛市幼儿园在哪里啊,我有事要去
一家三口去杭州2天一夜怎么玩好,
狮城百姓大药房万润绿景园店地址有知道的么?
我是派出所协警队队长,但是他却代理了我怎么
【电容换算】电容之间是怎么换算的?(详细的)1
1.6875是怎么换算成1又16分之11的
红掌有毒吗 会自动释放毒气
花草堂鲜花婚庆怎么去啊,有知道地址的么
画图软件如何更改像素
晚上睡觉出冷汗身体发冷是什么原因
岳阳利维货代有限公司这个地址在什么地方,我
I(10分)右图是对一位患有胃瘘的妇女所进行
一个出租师专杀美女还截肢的那部恐怖片叫什么
推荐资讯
男的欠银行贷款一百多万还不起,死了会连累他
求重生在90年代的小说,要女主的,最好女主是
bootstrap table mergecells设置怎么判断其co
富鑫鞋店我想知道这个在什么地方
可持续发展战略是在下列哪一个国际会议上被各
90%,1,5分之4,110%,0.7,( )分数( )百分数(
华元欢乐城·揽悦轩我想知道这个在什么地方
攀爬摩托车的牌子
怎样除去水中的氧蒸馏水如何祛除里面的氧气
关于四川师范大学播音主持..
泗洪到菏泽怎么坐车
2015年4月,某税务师对A企业进行2014年度纳税
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?