博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AdjustTokenPrivileges启用权限
阅读量:4317 次
发布时间:2019-06-06

本文共 2024 字,大约阅读时间需要 6 分钟。

原文链接地址:

   我们有很多操作需要用到OpenProcess函数,而为了使程序有权限使用这个函数,我们经常利用AdjustTokenPrivileges提升权限(准确的说不是提升,而是将访问令牌中禁用的权限启用)

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;}void main( ){    HANDLE hToken;    BOOL bRet = OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);    SetPrivilege(hToken,SE_DEBUG_NAME,TRUE);}

这段代码在xp上没有问题,但如果在windows 7 或者vista上,如果程序以标准用户启动,AdjustTokenPrivileges将会调用失败,以管理员省份启动没有问题。

这是因为在Windows 7上,标准用户权限很少,没有Debug权限,更无从谈起启用Debug权限,用户可以以管理员和标准用户两种方式启用控制台,输入命令whoami /ALL

来查看两种权限下权限的不同

PS:即使提升调试权限,也不意味着对其它进程调用OpenProcess会成功(例如win7系统下的system和audiodg进程)

 

 

关于TOKEN_PRIVILEGES结构

typedef struct _TOKEN_PRIVILEGES {  DWORD PrivilegeCount;  LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;

转载于:https://www.cnblogs.com/wuyuan2011woaini/p/5340357.html

你可能感兴趣的文章
流畅的Python (Fluent Python) —— 前言
查看>>
Jquery-menu-aim流畅的菜单滑动体验
查看>>
Jquery EasyUI修改行背景的两种方式
查看>>
生成器模式(Builder)C++实现
查看>>
Centos 7.5安装 Redis 5.0.0
查看>>
嵌入式Linux学习笔记(0)基础命令。——Arvin
查看>>
二分图匹配
查看>>
c++ 模板template
查看>>
javascript中的string对象
查看>>
CString的成员函数详解
查看>>
Appium Studio 初体验(windows做ios自动化,录制appium脚本)
查看>>
学习java前端 两种form表单提交方式
查看>>
Linux常用命令
查看>>
整体二分&cdq分治 ZOJ 2112 Dynamic Rankings
查看>>
【POJ2976】Dropping tests (01分数规划入门题)
查看>>
通过正则表达式获取url中参数
查看>>
86.运算符重载
查看>>
cxx signal信号捕获
查看>>
《Android开发艺术探索》读书笔记——Cha3.2.3改变布局参数实现View的滑动
查看>>
python闭包与装饰器
查看>>