UAC提升权限的细节
来源:互联网 发布:淘宝怎样增加销量 编辑:程序博客网 时间:2024/05/19 06:48
UAC提升权限的细节
一,桌面运行一个程序时
桌面运行一个程序时,Explorer调用ShellExecuteEx(),ShellExecuteEx()进一步调用CreateProcess()创建进程,由于这个进程需要管理员权限才能运行,于是CreateProcess返回ERROR_ELEVATION_REQUIRED (740);
二,ShellExecuteEx接到这个返回值后
ShellExecuteEx接到这个返回值后和一个运行appinfo服务的svchost通讯,要求它来进行权限提升,于是这个svchost创建consent.exe,consent正是UAC对话框的UI进程。
三,如果用户在UAC对话框上选择
如果用户在UAC对话框上选择允许,consent将这个结果返回给appinfo(svchost)后便退出,appinfo依据返回结果进行一系列的函数调用创建高权限进程:
1.appinfo首先获取到当前登录用户的高权限令牌;
2.appinfo初始化一个STARTUPINFOEX结构体:
typedef struct _STARTUPINFOEX { STARTUPINFO StartupInfo; PPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;}STARTUPINFOEX, *LPSTARTUPINFOEX;
其中:
A. 初始化Startupinfo的时候将其成员lpDesktop设置为winsta0\default,使得将来创建的提升进程处于当前用户桌面上(否则就会在appinfo服务的这个不可见桌面上);
B. 初始化lpAttributeList的时候会用OpenProcess()取得原始调用进程的进程句柄,然后调用UpdateProcThreadAttribute(),指定参数分别为:这个句柄和PROC_THREAD_ATTRIBUTE_PARENT_PROCESS,这一步后,将来创建的被提升进程的父进程就被还原为原始的调用进程的(否则他的父进程就会是Svchost(appinfo))
3. 接下来svchost(appinfo服务)调用CreateProcessAsUser()创建提升权限的进程:
期中的参数设置是:
A.dwCreationFlags使用EXTENDED_STARTUPINFO_PRESENT(这个仅vista才有,用于指定倒数第二个参数lpStartupInfo指向的是STARTUPINFOEX而不是STARTUPINFO)
B.倒数第二个参数lpStartupInfo使用上述几步中初始化完成的结构体STARTUPINFOEX
4. 最后appinfo将相关函数调用返回给Explorer
最后appinfo将相关函数调用返回给Explorer,一个提升权限的的进程被创建了,上述几步的设置使得这个由服务创建的进程运行在当前用户桌面、并且我们看到的它的父进程“依然是”Explorer。
参考资料:
转自
参考2
参考3
参考4
- UAC提升权限的细节
- UAC提升权限的细节
- UAC提升权限细节
- UAC提升权限
- 进程的结束和UAC的权限提升
- .NET中提升当前进程的UAC权限
- .NET中提升UAC权限的方法总结
- MFC管理员权限(UAC下的程序权限提升)
- MFC管理员权限(UAC下的程序权限提升)
- MFC管理员权限(UAC下的程序权限提升)
- .NET中提升UAC权限的方法总结
- C#应用程序的UAC控制,提升应用程序权限。获得版本号码
- 在批处理中提升权限 (UAC开启状态下)
- 在批处理中提升权限 (UAC开启状态下)
- Win7 UAC的安全、兼容及权限
- Win7 UAC的安全、兼容及权限
- win7下的UAC机制与提升管理员权限
- 权限的提升
- 圆形头像
- Service通信(service介绍之二)
- Android 怎么使用Bitmap+Canvas 自适应屏幕
- 秒杀核心设计(减库存部分)-防超卖与高并发
- openstack Juno版部署记录
- UAC提升权限的细节
- C语言做的键盘操作的五子棋
- 第四章 冒泡排序法 潘璠
- 并查集的简单应用——HDU
- ARM 64位处理器架构ARMv8技术浅析
- C++线程基础
- 第十二篇 无聊的一天
- linux core dump
- Servlet自学第27讲:Session与Cookie对比总结