UAC提升权限
2015-02-09 21:08
183 查看
一,桌面运行一个程序时,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。
(740);
二,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。
相关文章推荐
- MFC管理员权限(UAC下的程序权限提升)
- MFC管理员权限(UAC下的程序权限提升)
- .NET中提升当前进程的UAC权限
- .NET中提升UAC权限的方法总结
- MFC管理员权限(UAC下的程序权限提升)
- 在批处理中提升权限 (UAC开启状态下)
- .NET提升应用程序在windows vista和windows 7中的UAC权限
- .NET中提升UAC权限的方法总结
- UAC提升权限的细节
- UAC提升权限细节
- .NET提升应用程序在windows vista和windows 7中的UAC权限
- UAC 编程入门 1:进程Mandatory Level检查和自我提升权限
- .NET中提升UAC权限的方法总结
- 利用ShellExecuteEx手动提升用户特权,以管理员权限来运行程序。win7会有UAC弹窗
- 进程的结束和UAC的权限提升
- win7下的UAC机制与提升管理员权限
- .NET中提升当前进程的UAC权限
- 在批处理中提升权限 (UAC开启状态下)
- C#应用程序的UAC控制,提升应用程序权限。获得版本号码
- UAC提升权限的细节