首先说下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提升子进程权限相关推荐

  1. win10 VS2010 VS studio 生成程序默认管理员运行 此任务要求应用程序具有提升的权限

    win10有些跟进程有关的程序,生成之后如果不管理员运行,会不正常运作 让生成的程序默认管理员运行: 新建项 应用程序清单文件(app1.manifest) 将原本注释里的这行,替换到箭头所示位置即可 ...

  2. 解决“远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端”问题

    解决"远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端"问题 参考文章: (1)解决"远程会话已断开连接,因为访问被拒绝导致 ...

  3. windows下批量创建用户、提升用户权限、设置用户不能更改密码、设置密码永不过期

    一.实现的效果 实现批量创建用户.提升用户权限.设置用户不能更改密码.设置密码永不过期操作. 二.实现方法 2.1.在Excel中生成命令 ①通过使用Excel表格生成对应的命令,然后复制这些命令到文 ...

  4. sudo命令普通用户提升root权限配置

    sudo命令普通用户提升root权限配置 1.概述 在操作linux时候,有些命令需要使用root权限才能执行,如果我们使用的是普通用户可以使用sudo命令将普通用户权限提升到root权限解决权限限制 ...

  5. c语言程序 管理员,ShellExecuteEX(获取管理员权限) | C/C++程序员之家

    ShellExecuteEx取得管理员权限,ShellExecuteEx取得管理员权限 [cpp] void GainAdminPrivileges(UINT idd, BOOL bWait){ CS ...

  6. RtlAdjustPrivilege 一行代码提升进程权限

    前言:今天逆向一个非常实用的函数RtlAdjustPrivliege这个函数封装在NtDll.dll中(在所有DLL加载之前加载),被微软严格保密,就是说你在MSDN上查不到关于他的任何信息.先来看看 ...

  7. linux 提升cpu权限,CPUlimit有效防止Linux系统CPU过载

    最近使用Nginx服务器测试 pagespeed 的加速效果时,发现这货会造成 CPU 占用过高,Nginx 经常 100%,尽管使用的是静态缓存,总是触发主机商的CPU占用上限,不停的被强制关机.发 ...

  8. MySQL -- 创建用户并提升用户权限

    给mysql数据库增加用户并提升权限 -- -- 给mysql数据库增加用户并提升权限 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ...

  9. Windows提升进程权限

    Windows提升进程权限 文章一: 在枚举/结束系统进程或操作系统服务时,会出现权限不足而失败的情况,这时就需要提升自己进程到系统权限,其实提升权限的代码很简单的,看过的最经典的应该是<WIN ...

最新文章

  1. How to read a book
  2. 一个可以设置中奖概率的抽奖程序[转]
  3. 这是一份通俗易懂的知识图谱技术与应用指南(转)
  4. BZOJ2425:[HAOI2010]计数——题解
  5. 基于百度地图API的微信周边搜索
  6. Git仓库只拷贝代码-不拷贝提交记录-不拷贝其他分支
  7. stm32 python界面开发_【STM32开发】使用Qt Creator 开发STM32
  8. 在C#中ParameterizedThreadStart和ThreadStart区别
  9. 记录一下很好用的java爬虫代码-很有意思,原理也很简单,一看就懂
  10. 所谓敏感(数字的敏感)
  11. 面向对象进阶4:软件开发规范
  12. 磁盘驱动器号的修改恢复
  13. 大战设计模式【10】—— 外观模式
  14. sqlitedev 注册码
  15. [Android]按阶段编译Android kernel中的代码
  16. matlab生成随机数,matlab随机数生成方法
  17. java.sql.SQLException: Access denied for user ‘root’@‘localhost’ (using password: YES)和错误原因 解决方案:
  18. 盈米基金如何实现基金实时评价的百倍提速?
  19. 网址最后面不带斜杠与带斜杠有什么区别
  20. 神经网络程序设计学习心得

热门文章

  1. 代码随想录算法训练营第七天| 454.四数相加II 、383. 赎金信 、15. 三数之和 、18. 四数之和 。
  2. OCR-paddleocr
  3. python 换算美分的小功能
  4. 网络文件存储系统(一)网络文件存储系统的概述
  5. Python爬虫基础(三) —— 爬取动态渲染页面
  6. Windows下弱网模拟工具Clumsy
  7. 基于深度学习的相位恢复及处理相关工作
  8. HID Global推出新一代门禁读卡器以及非接触式智能卡(BlackBerry 9900)
  9. 进出口贸易被指遭港口部门挡路收费2000亿
  10. Go语言适用于Web开发吗