UAC提升权限
来源:互联网 发布:linux的解压缩命令 编辑:程序博客网 时间:2024/06/06 02:21
一,桌面运行一个程序时,Explorer调用ShellExecuteEx(),ShellExecuteEx()进一步调用CreateProcess()创建进程,由于这个进程需要管理员权限才能运行,于是CreateProcess返回ERROR_ELEVATION_REQUIRED (740);
二,ShellExecuteEx接到这个返回值后和一个运行appinfo服务的svchost通讯,要求它来进行权限提升,于是这个svchost创建consent.exe,consent正是UAC对话框的UI进程。
三,如果用户在UAC对话框上选择允许,consent将这个结果返回给appinfo(svchost)后便退出,appinfo依据返回结果进行一系列的函数调用创建高权限进程:
1. appinfo首先获取到当前登录用户的高权限令牌;
2.appinfo初始化一个STARTUPINFOEX结构体:
期中:
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,一个提升权限的的进程被创建了,上述几步的设置使得这个由服务创建的进程运行在当前用户桌面、并且我们看到的它的父进程“依然是”Explorer。
二,ShellExecuteEx接到这个返回值后和一个运行appinfo服务的svchost通讯,要求它来进行权限提升,于是这个svchost创建consent.exe,consent正是UAC对话框的UI进程。
三,如果用户在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,一个提升权限的的进程被创建了,上述几步的设置使得这个由服务创建的进程运行在当前用户桌面、并且我们看到的它的父进程“依然是”Explorer。
0 0
- UAC提升权限细节
- UAC提升权限
- UAC提升权限的细节
- UAC提升权限的细节
- .NET中提升当前进程的UAC权限
- 进程的结束和UAC的权限提升
- 在批处理中提升权限 (UAC开启状态下)
- 在批处理中提升权限 (UAC开启状态下)
- .NET中提升UAC权限的方法总结
- MFC管理员权限(UAC下的程序权限提升)
- MFC管理员权限(UAC下的程序权限提升)
- MFC管理员权限(UAC下的程序权限提升)
- .NET中提升UAC权限的方法总结
- C#应用程序的UAC控制,提升应用程序权限。获得版本号码
- vista UAC权限控制
- UAC权限和安装包
- 管理员权限、进程权限与UAC
- C# UAC自提升与用户体验
- 一些字符串hash算法
- Rockethon 2015C
- delete、drop和truncate的区别
- 【hibernate框架】多对一单向关联(Annotation实现)
- HDU 1045 Fire Net(DFS)
- UAC提升权限
- hdu 5012 dfs+剪枝
- 在 linux下使用 CMake 构建应用程序
- SharePoint 2013 OWA(Office Web Apps)安装部署(一) 根据网络文章做了修改和一些错误的处理方式。
- 同步听 一款捕获电脑声音到手机播放
- GOLDENGATE安装配置与复制流搭建_DG端抽取支持DDL版
- Cannot change version of project facet Dynamic web module to 2.5
- 黑马程序员:面向对象---学习笔记
- ERROR ITMS-9000: “Redundant Binary Upload. There already exists a binary upload with build version '