这三个函数主要用来提升进程的权限 
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()函数 
我们可以将上述函数组合为一个方法

void EenableDebugPriv()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[].Luid);
tkp.PrivilegeCount = ;
tkp.Privileges[].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, ,(PTOKEN_PRIVILEGES)NULL, );
CloseHandle( hToken );
}

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

原贴地址:https://blog.csdn.net/cxq_1993/article/details/48053997

windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue<转>的更多相关文章

  1. <转载>提升程序的特权(AdjustTokenPrivileges)

    首先列出需要的函数 1.OpenProcessToken 2.AdjustTokenPrivileges 3. LookupPrivilegeValue ----------------------- ...

  2. 提升程序的特权(AdjustTokenPrivileges)

    首先列出需要的函数 1.OpenProcessToken 2.AdjustTokenPrivileges 3. LookupPrivilegeValue ----------------------- ...

  3. windows提权操作以及系统开机关机重启代码(用到了LookupPrivilegeValue和AdjustTokenPrivileges调整进程的Token权限)

    对于UAC提权操作,一般在编译期间,如果程序有需求要提权,会在编译器里设置,vs2010比较简单,在工程属性里可以直接设置,vs2005稍微有点儿麻烦,参考这篇文章: http://www.seany ...

  4. [转载]提升进程权限-OpenProcessToken等函数的用法

    GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限 AdjustTokenPriv ...

  5. OpenProcessToken令牌函数使用方法

    >GetCurrentProcessID 得到当前进程的ID OpenProcessToken得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限AdjustTokenPr ...

  6. [转]远程注入DLL : 取得句柄的令牌 OpenProcessToken()

    http://hi.baidu.com/43755979/blog/item/3ac19711ea01bdc4a6ef3f6a.html 要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关 ...

  7. AdjustTokenPrivileges启用权限

    原文链接地址:http://blog.csdn.net/xbgprogrammer/article/details/7276760    我们有很多操作需要用到OpenProcess函数,而为了使程序 ...

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

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

  9. WindowsAPI调用和OCR图片识别

    傻了吧唧的装双系统.成功的干崩了原本的系统.现在重装VS.闲的没事胡扯几句. WindowsAPI在每一台Windows系统上开放标准API供开发人员调用.功能齐全.在这里只介绍三个部分. 1.利用A ...

随机推荐

  1. Oracle之ora-01031 insufficient privileges

              解决ora-01031insufficient privileges错误 解决system用户不能登录的问题 alter user system account unlock id ...

  2. Toast--报错

    Toast的makeText()方法报错帖上一代码,用Toast来简单处理回调机制.但是Toast的makeText()方法老报错:import android.content.Context;imp ...

  3. [UE4]图片按钮设置技巧

  4. 关于Centos7 firewalld防火墙开放端口后仍不能访问ftp和nginx的问题解决

    我在阿里轻量应用服务器搭建ftp服务器这篇博客中把防火墙换为iptables,因为当时无论我怎么设置firewalld,就是无法访问ftp服务器,今天在翻看其他博客的时候,突然发现firewalld有 ...

  5. T-SQL 局部变量和全局变量

    局部变量 use StudentManageDB go --声明学号变量 ) --查询李铭的信息 set @stuname='李铭' select StudentId,StudentName,Gend ...

  6. c# 异步进度条组件BackgroundWorker

    //控件事件调用DoWork()方法就行. #region 进度条 private BackgroundWorker worker = null; private void DoWork(string ...

  7. Linux安装jsvc,及Linux服务开发

    在linux上以服务的方式启动java程序,需要提前安装jsvc.linux是利用daemon(jsvc)构建java守护进程. 编译 daemon 安装JSVC 1 下载文件,http://comm ...

  8. 03-String常用方法

    1.获取方法 /* * 编辑:刘诗华 int length() 获取字符串的长度 char charAt(int index) 获取特定位置的字符 (角标越界) int indexOf(String ...

  9. TFTP(Trivial File Transfer Protocol,简单文件传输协议)

    网络特性 通常使用UDP 69端口(据说可改成TCP) 与FTP区别 轻量级,适用于传输小文件,当然功能也少些,比如没有列出目录功能,不进行认证

  10. Spark2.X集群运行模式

    rn 启动 先把这三个文件的名字改一下 配置slaves 配置spark-env.sh export JAVA_HOME=/opt/modules/jdk1..0_60 export SCALA_HO ...