原文链接地址:http://blog.csdn.net/xbgprogrammer/article/details/7276760

   我们有很多操作需要用到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;

AdjustTokenPrivileges启用权限的更多相关文章

  1. 程序的开机关机重启,开机启动,休眠功能delphi实现(使用AdjustTokenPrivileges提升权限)

    TShutDownStatus = (sdShutDown,sdReboot,sdLogOff,sdPowerOff); procedure ShutDown(sdStatus : TShutDown ...

  2. MFC 相关类、函数

    timeSetEvent()函数 CRectTracker类的使用 SetLocalTime设置本地时间 AdjustTokenPrivileges启用权限

  3. MongoDB笔记(二)访问权限

    要访问数据库,那么对访问权限的设置是必须的! 1.启用权限控制(-auth),当启用MongoDB数据库服务时,对参数的设置可以决定是否启用权限控制   不开启: mongod -dbpath=D:/ ...

  4. mongodb 设置权限

    切换到要加密的数据库use diary 创建有 readWrite 权限的用户db.createUser({ user: "youuser", pwd: "youpass ...

  5. MongoDB3.X单机及shading cluster集群的权限管理(基于3.4.5)

    mongodb集群的权限管理分为两部分,一部分是最常用的Role-Based Access Control,也就是用户名密码方式,这种验证方式一般出现在单机系统,或者集群中client端连接Mongo ...

  6. 七:HDFS Permissions Guide 权限

    1.权限模式     简单:启动HDFS的操作系统用户即为超级用户,可以通过HADOOP_USER_NAME指定     kerberos: 2.group mapping      组列表由grou ...

  7. HDFS文件访问权限

    HDFS中的文件访问权限 针对文件和目录,HDFS的权限模式与POSIX非常相似一共提供三类权限模式:只读权限(r).写入权限(w)和可执行权限(x).读取文件或列出目录内容时需要只读权限.写入一个文 ...

  8. MongoDB 学习笔记之 权限管理基础

    权限管理基础 MongoDB有很多用户roles,这里只是简单列举下命令的使用,具体的role的含义,请查阅官方文档. https://docs.mongodb.com/manual/referenc ...

  9. drf框架中认证与权限工作原理及设置

    0909自我总结 drf框架中认证与权限工作原理及设置 一.概述 1.认证 工作原理 返回None => 游客 返回user,auth => 登录用户 抛出异常 => 非法用户 前台 ...

随机推荐

  1. c# WebBrowser开发参考资料--杂七杂八

    c# WebBrowser开发参考资料 http://hi.baidu.com/motiansen/blog/item/9e99a518233ca3b24aedbca9.html=========== ...

  2. 利用PHP str_replace()函数替换符合百度MIP内容标准

    了解过百度MIP的同学都知道(什么?你不知道什么是百度MIP?就是移动网页加速器鸭

  3. YII2.O学习三 前后台用户数据表分离

    之前我们完成了Advanced 模板安装,也完成了安装adminlte 后台模板,这一步是针对前端和后台用户使用不同的数据库表来管理,做到前后台用户分离的效果: 复制一张user数据表并重命名为adm ...

  4. tarnado源码解析系列一

    目录 tarnado tarnado源码安装 tarnado测试程序 application类的解析 一. tarnado简介 最近在学习Python,无意间接触到的tarnado,感觉tarnado ...

  5. Manacher(马拉车)学习笔记

    Manacher可以有效的在\(O(n)\)时间内解决一个字符串的回文子串的题目 目录 简介 讲解 推介 简单的练习 恐怖的练习QAQ 小结 简介 开头都说了,Manacher是目前解决回文子串的最有 ...

  6. 004---os & sys

    os模块和sys模块 这两个模块都提供了很多与操作系统之间交互的功能 使用 import os #当前脚本的工作目录,不是脚本目录 print(os.getcwd()) # 获取指定目录下的所有文件和 ...

  7. 开学测试之——ATM

    ---恢复内容开始--- package ATM;   //信1705-2 20173568 李泽宇   import java.util.*; import java.io.File; import ...

  8. 查看sql 作业明细及运行记录

    --查看作业明细及状态 select j.name 'Job名', j.description '描述', j.ENABLED job_enabled, cast(js.last_run_date a ...

  9. kafka集群部署文档(转载)

    原文链接:http://www.cnblogs.com/luotianshuai/p/5206662.html Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候 ...

  10. Borland和Micorsoft的对话(转载自月光软件网)

      Borland与Microsoft关于Delphi的对话 Bear 1.Delphi较贵  一套Delphi的价格大约相当于两套Visual Studio  ------------------- ...