AdjustTokenPrivileges(进程权限)

2023-05-16

AdjustTokenPrivileges(进程权限)

原文地址:http://hi.baidu.com/xuqipi/blog/item/07f43363b3d690630d33fa90.html

GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限 AdjustTokenPrivileges 判断令牌权限


要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Administrator或是被给予了相应的权限,就可以具有该权限。可是,就算我们用Administrator帐号对一个系统安全进程执行OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcessID)还是会遇到“访问拒绝”的错误。什么原因呢?原来在默认的情况下进程的一些访问权限是没有被使能(Enabled)的,所以我们要做的首先是使能这些权限。与此相关的一些API函数有OpenProcessToken、LookupPrivilegevalue、AdjustTokenPrivileges。我们要修改一个进程的访问令牌,首先要获得进程访问令牌的句柄,这可以通过OpenProcessToken得到,函数的原型如下:

BOOL OpenProcessToken(
HANDLE ProcessHandle,
DWORD DesiredAccess,
PHANDLE TokenHandle
);
第一参数是要修改访问权限的进程句柄;第三个参数就是返回的访问令牌指针;第二个参数指定你要进行的操作类型,如要修改令牌我们要指定第二个参数为TOKEN_ADJUST_PRIVILEGES(其它一些参数可参考Platform SDK)。通过这个函数我们就可以得到当前进程的访问令牌的句柄(指定函数的第一个参数为GetCurrentProcess()就可以了)。接着我们可以调用AdjustTokenPrivileges对这个访问令牌进行修改。AdjustTokenPrivileges的原型如下:
BOOL AdjustTokenPrivileges(
HANDLE TokenHandle, // handle to token
BOOL DisableAllPrivileges, // disabling option
PTOKEN_PRIVILEGES NewState, // privilege information
DWORD BufferLength, // size of buffer
PTOKEN_PRIVILEGES PreviousState, // original state buffer
PDWORD ReturnLength // required buffer size
);
第一个参数是访问令牌的句柄;第二个参数决定是进行权限修改还是除能(Disable)所有权限;第三个参数指明要修改的权限,是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,数据组的每个项指明了权限的类型和要进行的操作; 第四个参数是结构PreviousState的长度,如果PreviousState为空,该参数应为NULL;第五个参数也是一个指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息,可空;最后一个参数为实际PreviousState结构返回的大小。在使用这个函数前再看一下TOKEN_PRIVILEGES这个结构,其声明如下:

typedef struct _TOKEN_PRIVILEGES {
DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[];
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
PrivilegeCount指的数组原素的个数,接着是一个LUID_AND_ATTRIBUTES类型的数组,再来看一下LUID_AND_ATTRIBUTES这个结构的内容,声明如下:

typedef struct _LUID_AND_ATTRIBUTES {
LUID Luid;
DWORD Attributes;
} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES

第二个参数就指明了我们要进行的操作类型,有三个可选项: SE_PRIVILEGE_ENABLED、SE_PRIVILEGE_ENABLED_BY_DEFAULT、SE_PRIVILEGE_USED_FOR_ACCESS。要使能一个权限就指定Attributes为SE_PRIVILEGE_ENABLED。第一个参数就是指权限的类型,是一个LUID的值,LUID就是指locally unique identifier,我想GUID大家是比较熟悉的,和GUID的要求保证全局唯一不同,LUID只要保证局部唯一,就是指在系统的每一次运行期间保证是唯一的就可以了。另外和GUID相同的一点,LUID也是一个64位的值,相信大家都看过GUID那一大串的值,我们要怎么样才能知道一个权限对应的LUID值是多少呢?这就要用到另外一个API函数LookupPrivilegevalue,其原形如下:

BOOL LookupPrivilegevalue(
LPCTSTR lpSystemName, // system name
LPCTSTR lpName, // privilege name
PLUID lpLuid // locally unique identifier
);
第一个参数是系统的名称,如果是本地系统只要指明为NULL就可以了,第三个参数就是返回LUID的指针,第二个参数就是指明了权限的名称,如“SeDebugPrivilege”。在Winnt.h中还定义了一些权限名称的宏,如:

#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")

#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")

#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")

#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")

这样通过这三个函数的调用,我们就可以用OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcessID)来打获得任意进程的句柄,并且指定了所有的访问权

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AdjustTokenPrivileges(进程权限) 的相关文章

  • bat管理mstsc 远程桌面连接

    批量添加用户 64 echo off set 34 用户名文件 61 a txt 34 set 34 用户组名称 61 administrators 34 文件路径可以有空格 xff0c 但是不需要额外加 34 引号 for f 34 us
  • logback与Log4J的区别

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Logback和log4j是非常相似的 xff0c 如果你对log4j很熟悉 xff0c 那对logback很快就会得心应手 下面列举了logback相对于log4j的一些
  • Spark-scala-API

    1 sc version 2 集群对象 xff1a SparkContext xff1b 获得Spark集群的SparkContext对象 xff0c 是构造Spark应用的第一步 xff01 SparkContext对象代表 整个 Spa
  • ClearCanvas DICOM 开发系列 一

    概述 C 开源的DICOM server 支持影像处理 影像归档 影像管理 影像传输和影像浏览功能 开源代码可学习地方很多 官方网站 http www clearcanvas ca building ImageViewer 的代码 1 打开
  • spark dataFrame withColumn

    说明 xff1a withColumn用于在原有DF新增一列 1 初始化sqlContext val sqlContext 61 new org apache spark sql SQLContext sc 2 导入sqlContext隐式
  • 我凭什么为美国人买单?(转)

    香港一个朋友的妈妈是我见到过最忠诚的股迷 xff0c 老太太做了一辈子的护士 xff0c 八九年退休后成了专业股迷 xff0c 只要开市风雨不误去银行大厅炒股机前上班 老太太炒股同别人不同 xff0c 她只炒一只股 xff0c 那就是香港股
  • postgresql 清空数据表数据

    在 mysql中 xff0c 只需要执行 xff1a TRUNCATE table name 即可 xff0c 数据会情况 xff0c 而且自增id也会变回0 xff1b 但在 postgresql 则稍有不同 xff0c 因为 postg
  • 适合初学者小白的10本Python书籍,你值得收藏

    我会经常分享一本书 你看完如果对你有帮助 xff0c 值得你购买 xff0c 请到官网购买正版书籍 声明 xff1a 我不是卖书的 xff0c 我搞得是Python技术 xff0c 文章最后免费为你准备了一些Python资料 Python是
  • Rust开发操作系统系列:从零制作x86_64位系统

    Rust开发操作系统系列 xff1a 从零制作x86 64位系统 在发表这个文章之前 xff0c 我曾发布过另一篇文章 xff1a Rust开发操作系统系列 xff1a 全新Hello World系统 那篇文章我发布在云栖社区以及我自己的博
  • 莫名其妙报module 'urllib' has no attribute 'request'的解决方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 以前在pycharm下运行好好的程序 xff0c 今天就加了两个log xff0c 莫名其妙报错说urllib下找不到request 报错 xff1a module 39
  • 【NativeScript Vue 2019--中文字幕】精通原生手机UI之路

    在NativeScript原生手机app开发里 xff0c 其中的UI界面就跟我们常用的html 或blade模板 或vue的普通template不一样了 xff0c 其中就有很多值得警惕的了 xff0c 有的方式是好的 xff0c 可以提
  • SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    该项目源码地址 xff1a https github com ggb2312 JavaNotes tree master springboot integration examples xff08 其中包含SpringBoot和其他常用技术
  • sql server 对储存过程和函数的加密解密

    加密使用关键字 xff1a ENCRYPTION CREATE procedure dbo sp EytTest 64 para varchar 50 WITH ENCRYPTION as begin select 64 para end
  • 设计模式之(十三)备忘机制Memento

    Memento备望录模式定义 memento是一个保存另外一个对象内部状态拷贝的对象 这样以后就可以将该对象恢复到原先保存的状态 Memento模式相对也比较好理解 我们看下列代码 public class Originator publi
  • 从点击Button到弹出一个MessageBox, 背后发生了什么

    思考一个最简单的程序行为 xff1a 我们的Dialog上有一个Button xff0c 当用户用鼠标点击这个Button时 xff0c 我们弹出一个MessageBox 这个看似简单的行为 xff0c 谁能说清楚它是如何运行起来的 xff
  • Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘

    Windows 7 封装篇 xff08 一 xff09 母盘定制 手动制作 定制合适的系统母盘 http www win10u com article html 10 html Windows 7 封装篇 xff08 一 xff09 母盘定
  • #ifdef __cplusplus 倒底是什么意思?

    时常在cpp的代码之中看到这样的代码 ifdef cplusplus extern 34 C 34 endif 一段代码 ifdef cplusplus endif 这样的代码到底是什么意思呢 xff1f 首先 xff0c cplusplu
  • ping过程详细解读

    0 前言 在讲解ping过程之前 xff0c 我们需要了解以下概念 1 何为ping PING Packet Internet Groper xff0c 因特网包探索器 xff0c 用于测试网络连通性的程序 Ping发送一个ICMP Int
  • 使用源码安装MariaDB

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 系统 xff1a CentOS 6 5 x86 64 为什么源码安装 xff1f 自定义编译参数 xff0c 编译器优化 xff0c 自定义安装位置 源码安装系统需求 xf

随机推荐

  • VS2015配置Linux开发远程调试

    VS2015配置Linux开发远程调试 简介 vs2015支持跨平台开发 软件环境 VS2015 update3 Visual C 43 43 for Linux Development VC Linux exe 安装步骤 安装VS2015
  • 将linux文件中的tab更换为空格的三种方法

    将linux文件中的tab更换为空格的三种方法 1 xff0c 用sed命令 sed s t g filename gt filename1 2 用tr命令 cat filename tr 34 t 34 34 34 gt filename
  • React生命周期-踩坑记_10

    React生命周期 生命周期概览 生命周期的状态 组件的生命周期可分成三个状态 xff1a Mounting xff1a 已插入真实 DOMUpdating xff1a 正在被重新渲Unmounting xff1a 已移出真实 DOMcom
  • 转录组入门(5): 序列比对

    欢迎来GitHub上fork xff0c 一起进步 xff1a https github com xuzhougeng 比对软件很多 xff0c 首先大家去收集一下 xff0c 因为我们是带大家入门 xff0c 请统一用hisat2 xff
  • amavisd 规则备忘

    邮件服务器在做内容过滤 xff0c 结果误杀好多邮件 xff0c 有一些常用规则再现 xff0c 记录一下 20150113 初版 amavisd 版本为2 6 4 https wiki apache org spamassassin Ru
  • TensorFlow Lite 支持移动 GPU,速度推测提升4-6倍

    最近 xff0c 开源机器学习框架 TensorFlow Lite 更新 xff0c 新版更新支持了 GPU 支持 GPU 原因 虽然移动设备的处理能力和功率都有限 虽然 TensorFlow Lite 提供了不少的加速途径 xff0c 比
  • Linux开机启动顺序简述

    Linux的开机启动顺序 第一步 xff1a 当然是加电了 第二步 xff1a 加载BIOS设置 xff0c 选择启动盘 这是因为因为BIOS中包含了CPU的相关信息 设备启动顺序信息 硬盘信息 内存信息 时钟信息 PnP特性等等 在此之后
  • IdentityServer4 实现 OpenID Connect 和 OAuth 2.0

    关于 OAuth 2 0 的相关内容 xff0c 点击查看 xff1a ASP NET WebApi OWIN 实现 OAuth 2 0 OpenID 是一个去中心化的网上身份认证系统 对于支持 OpenID 的网站 xff0c 用户不需要
  • 使用MakeSureDirectoryPathExists 创建多级目录

    The MakeSureDirectoryPathExists function creates all the directories in the specified DirPath beginning with the root BO
  • gnome桌面显示计算机,使用 GNOME 桌面

    Fedora 12 默认使用 GNOME 作为窗口管理器 Window Manager xff0c GNOME 的目标是基于自由软件 xff0c 为 Unix 或者类 Unix 操作系统构造一个功能完善 操作简单以及界面友好的桌面环境 xf
  • jQuery匹配各种条件的选择器用法

    hidden 匹配所有的不可见元素 xff0c input 元素的 type 属性为 34 hidden 34 的话也会被匹配到 Matches all elements that are hidden or input elements
  • 加ing形式的单词有哪些_利用英语原版教材轻松记单词快乐学语法

    英语中 xff0c 不定冠词有a和an两种形式 区别在an多了一个辅音字母n xff0c 其作用是在元音之间起分隔作用 强烈建议家长和小朋友一起重点学习英语中的五个元音并牢记相应的音标 很多朋友发音不好 xff0c 重要原因是元音不到位 x
  • linux 批量登录脚本,批量登陆linux主机脚本

    test sh bin bash dir 61 home test while read line do host 61 96 echo line awk print 1 96 passwd 61 96 echo line awk prin
  • Lottie - 轻松实现复杂的动画效果

    1 Lottie 介绍 Lottie 是 Airbnb 开源的一套跨平台的完整的动画效果解决方案 xff0c 设计师可以使用 Adobe After Effects 设计出漂亮的动画之后 xff0c 使用 Lottic 提供的 Bodymo
  • 【迁移】—Entity Framework实例详解

    好久没有在博客园更新博客了 xff0c 如今都换了新公司 前段时间写了关于EF迁移的文档 xff0c 今天拿出来作为这个系列的一篇吧 一 Entity Framework 迁移命令 xff08 get help EntityFramewor
  • 源码阅读技巧篇

    转载请注明原创出处 xff0c 谢谢 xff01 说在前面 本人水平有限 xff0c 下面的一些都是本人的思考与理解 xff0c 如果有那里不对 xff0c 希望各位大佬积极指出 xff0c 欢迎在留言区进行评论交流 探讨 主题 为什么要读
  • 文件服务器 之 VSFTPD的高手篇

    此文章细致的讲解了VSFTP的配置 环境 xff1a linux as 3 0 43 vsftpd 1 2 0 4的系统架构 xff0c 是在独立服务器下的哦 xff01 1 xff0e 配置本地组访问的FTP 首先创建用户组 test和F
  • [Windows Azure] Manage the Availability of Virtual Machines

    Manage the Availability of Virtual Machines You can ensure the availability of your application by using multiple Window
  • Myeclipse优化配置

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 作为企业级开发最流行的工具 xff0c 用Myeclipse开发java web程序无疑是最合适的 xff0c java web前端采用jsp来显示 xff0c myecl
  • AdjustTokenPrivileges(进程权限)

    AdjustTokenPrivileges 进程权限 原文地址 http hi baidu com xuqipi blog item 07f43363b3d690630d33fa90 html GetCurrentProcessID 得到当