前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue

windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue

作者头像
全栈程序员站长
发布2022-09-12 19:38:33
3450
发布2022-09-12 19:38:33
举报

大家好,又见面了,我是你们的朋友全栈君。

这三个函数主要用来提升进程的权限 1 OpenProcessToken()函数:获取进程的令牌句柄 OpenProcessToken的原型. BOOL WINAPI OpenProcessToken( __in HANDLE ProcessHandle, __in DWORD DesiredAccess, __out PHANDLE TokenHandle ); 第一个参数 进程句柄(当前进程为GetCurrentProcess()为参数) 第二个参数 访问令牌特权(可以参考msdnhttps://msdn.microsoft.com/zh-cn/library/aa374905) 第三个参数 令牌句柄 返回的参数 就是AdjustTokenPrivileges的第一个参数 2LookupPrivilegeValue()函数: 在认识这个函数之前我们需要了解一下结构体 TOKEN_PRIVILEGES结构体 typedef struct _TOKEN_PRIVILEGES { DWORD PrivilegeCount; LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; }TOKEN_PRIVILEGES; 第一个参数是个特权数组。 第二个参数是要修改的特权数目 LUID_AND_ATTRIBUTES 结构体 typedef struct _LUID_AND_ATTRIBUTES { LUID Luid; DWORD Attributes; } LUID_AND_ATTRIBUTES;

LookupPrivilegeValue的原型 BOOL WINAPI LookupPrivilegeValue( __in_opt LPCTSTR lpSystemName, __in LPCTSTR lpName, __out PLUID lpLuid ); 第一个参数是系统的名字,如果为NULL,就是本地名字(这里就填NULL) 第二个参数是特权的名字,要查看详细特权,在这里写SE_DEBUG_NAME 第三个参数就可以通过指针返回一个LUID类型的Luid的标识了。 通过这个值就可以填入刚才的结构体里了。 3 AdjustTokenPrivileges()函数 BOOL WINAPI AdjustTokenPrivileges( __in HANDLE TokenHandle, __in BOOL DisableAllPrivileges, __in_opt PTOKEN_PRIVILEGES NewState, __in DWORD BufferLength, __out_opt PTOKEN_PRIVILEGES PreviousState, __out_opt PDWORD ReturnLength ); 第一个参数为OpenProcessToken第三个指针参数传出的句柄值 第二个参数为是否禁用所有所有的特权(这里填false) 第三个参数为新的TOKEN_PRIVILEGES的特权结构体指针 第四个参数是上面结构体的字节长度(sizeof) 第五个参数是 接受原先的特权的结构体 第六个参数也是这个结构体的字节长度的指针

最后要记得调用CloseHandle()函数 我们可以将上述函数组合为一个方法

代码语言:javascript
复制
void EenableDebugPriv()
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken);
    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);
    CloseHandle( hToken );
}

这样就可以修改相关进程的权限了

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152958.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档