对当前进程进行提升权限

对于进程提升权限主要用到下面三个API

OpenProcessToken();打开权限令牌
LookupPrivilegeValue();检索一个唯一的本地标识符 LUID
AdjustTokenPrivileges();调整令牌特权

  BOOL OpenProcessToken(

   HANDLE ProcessHandle, //要修改访问权限的进程句柄
  DWORD DesiredAccess, //指定你要进行的操作类型
   PHANDLE TokenHandle //返回的访问令牌指针
  );
 



 BOOL LookupPrivilegevalue(

  LPCTSTR lpSystemName, // 表示所要查看的系统,本地系统直接用NULL
  LPCTSTR lpName, // 表示所要查看的特权信息的名称
  PLUID lpLuid //
接收所返回的制定特权名称的信息
  );

LUID是用来填充如下结构体的

typedef struct _TOKEN_PRIVILEGES {

DWORD PrivilegeCount; //令牌属性的个数

LUID_AND_ATTRIBUTES Privileges[]; //LUID和属性数组

} TOKEN_PRIVILEGES, *PTOKEN




BOOL AdjustTokenPrivileges(
  HANDLE
TokenHandle, //包含特权的句柄
  BOOL DisableAllPrivileges,//禁用所有权限标志
  PTOKEN_PRIVILEGESNewState,//新特权信息的指针(结构体)
  DWORD BufferLength, //缓冲数据大小,以字节为单位的PreviousState的缓存区(sizeof)
  PTOKEN_PRIVILEGES PreviousState,//接收被改变特权当前状态的Buffer
  PDWORD ReturnLength //接收PreviousState缓存区要求的大小
  
);


看代码:

  1. HANDLE TokenHandle;
  2. if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &TokenHandle))
  3. {
  4. return ;
  5. }

  6. TOKEN_PRIVILEGES t_privileges = {0};
  7. if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &t_privileges.Privileges[0].Luid))
  8. {
  9. return ;
  10. }
  11. t_privileges.PrivilegeCount = 1;
  12. t_privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

  13. if(!AdjustTokenPrivileges(TokenHandle, FALSE, &t_privileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
  14. {
  15. CloseHandle(TokenHandle);
  16. return ;
  17. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值