ShellExecuteEx提升子进程权限
首先说下ShellExecuteEx是如何提升权限的,ShellExecuteEx函数只有一个参数,就是SHELLEXECUTEINFO结构体,不过是指针类型的,这无所谓,关键是这个结构体中有一个参数lpVerb,它的作用就是指定如何操作文件lpFile,提升权限就是设置lpVerb为“runas”。
将lpVerb设定为”open”或NULL的时候,创建的子进程继承了主进程的权限,当主进程使用管理员身份运行时,经lpVerb设置为”open”或NULL时,就会发现创建的子进程依旧是管理员身份。
最终测试的结果是
(1).当主进程以管理员身份运行时,创建的子进程都是管理员身份;
(2).当主进程以普通用户身份运行时,若将lpVerb参数设置为“runas”,则创建的子进程是管理员身份;若将lpVerb设置为“open”或NULL时,则创建的子进程时普通用户身份。
函数原型
BOOL ShellExecuteEx(_Inout_ SHELLEXECUTEINFO *pExecInfo
);结构:
typedef struct _SHELLEXECUTEINFO {DWORD cbSize; //这个是结构体大小,sizeof下SHELLEXECUTEINFO就行ULONG fMask;HWND hwnd; //主进程的窗口句柄,一般没用LPCTSTR lpVerb; //设置成runas就可以以管理员身份运行了,其他的都是普通用户身份LPCTSTR lpFile; //要运行的文件LPCTSTR lpParameters; //要运行的文件的参数LPCTSTR lpDirectory;int nShow; //设置窗口显示(SW_SHOW)和不显示(SW_HIDE),当然还有其他的HINSTANCE hInstApp;LPVOID lpIDList;LPCTSTR lpClass;HKEY hkeyClass;DWORD dwHotKey;union {HANDLE hIcon;HANDLE hMonitor;} DUMMYUNIONNAME;HANDLE hProcess; //返回子进程句柄
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;测试:
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"runas";
ShExecInfo.lpFile = L"cmd";
ShExecInfo.lpParameters = L"";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
运行结果可以明显看到,启动的cmd命令行窗口,的权限是不同的。
ShellExecuteEx提升子进程权限相关推荐
- win10 VS2010 VS studio 生成程序默认管理员运行 此任务要求应用程序具有提升的权限
win10有些跟进程有关的程序,生成之后如果不管理员运行,会不正常运作 让生成的程序默认管理员运行: 新建项 应用程序清单文件(app1.manifest) 将原本注释里的这行,替换到箭头所示位置即可 ...
- 解决“远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端”问题
解决"远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端"问题 参考文章: (1)解决"远程会话已断开连接,因为访问被拒绝导致 ...
- windows下批量创建用户、提升用户权限、设置用户不能更改密码、设置密码永不过期
一.实现的效果 实现批量创建用户.提升用户权限.设置用户不能更改密码.设置密码永不过期操作. 二.实现方法 2.1.在Excel中生成命令 ①通过使用Excel表格生成对应的命令,然后复制这些命令到文 ...
- sudo命令普通用户提升root权限配置
sudo命令普通用户提升root权限配置 1.概述 在操作linux时候,有些命令需要使用root权限才能执行,如果我们使用的是普通用户可以使用sudo命令将普通用户权限提升到root权限解决权限限制 ...
- c语言程序 管理员,ShellExecuteEX(获取管理员权限) | C/C++程序员之家
ShellExecuteEx取得管理员权限,ShellExecuteEx取得管理员权限 [cpp] void GainAdminPrivileges(UINT idd, BOOL bWait){ CS ...
- RtlAdjustPrivilege 一行代码提升进程权限
前言:今天逆向一个非常实用的函数RtlAdjustPrivliege这个函数封装在NtDll.dll中(在所有DLL加载之前加载),被微软严格保密,就是说你在MSDN上查不到关于他的任何信息.先来看看 ...
- linux 提升cpu权限,CPUlimit有效防止Linux系统CPU过载
最近使用Nginx服务器测试 pagespeed 的加速效果时,发现这货会造成 CPU 占用过高,Nginx 经常 100%,尽管使用的是静态缓存,总是触发主机商的CPU占用上限,不停的被强制关机.发 ...
- MySQL -- 创建用户并提升用户权限
给mysql数据库增加用户并提升权限 -- -- 给mysql数据库增加用户并提升权限 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ...
- Windows提升进程权限
Windows提升进程权限 文章一: 在枚举/结束系统进程或操作系统服务时,会出现权限不足而失败的情况,这时就需要提升自己进程到系统权限,其实提升权限的代码很简单的,看过的最经典的应该是<WIN ...
最新文章
- How to read a book
- 一个可以设置中奖概率的抽奖程序[转]
- 这是一份通俗易懂的知识图谱技术与应用指南(转)
- BZOJ2425:[HAOI2010]计数——题解
- 基于百度地图API的微信周边搜索
- Git仓库只拷贝代码-不拷贝提交记录-不拷贝其他分支
- stm32 python界面开发_【STM32开发】使用Qt Creator 开发STM32
- 在C#中ParameterizedThreadStart和ThreadStart区别
- 记录一下很好用的java爬虫代码-很有意思,原理也很简单,一看就懂
- 所谓敏感(数字的敏感)
- 面向对象进阶4:软件开发规范
- 磁盘驱动器号的修改恢复
- 大战设计模式【10】—— 外观模式
- sqlitedev 注册码
- [Android]按阶段编译Android kernel中的代码
- matlab生成随机数,matlab随机数生成方法
- java.sql.SQLException: Access denied for user ‘root’@‘localhost’ (using password: YES)和错误原因 解决方案:
- 盈米基金如何实现基金实时评价的百倍提速?
- 网址最后面不带斜杠与带斜杠有什么区别
- 神经网络程序设计学习心得
热门文章
- 代码随想录算法训练营第七天| 454.四数相加II 、383. 赎金信 、15. 三数之和 、18. 四数之和 。
- OCR-paddleocr
- python 换算美分的小功能
- 网络文件存储系统(一)网络文件存储系统的概述
- Python爬虫基础(三) —— 爬取动态渲染页面
- Windows下弱网模拟工具Clumsy
- 基于深度学习的相位恢复及处理相关工作
- HID Global推出新一代门禁读卡器以及非接触式智能卡(BlackBerry 9900)
- 进出口贸易被指遭港口部门挡路收费2000亿
- Go语言适用于Web开发吗