Windows 进程及线程(复习)
进程权限复习
操作系统权限
我们的操作系统(Vista版本及以上)分为三种权限
- 超级管理员权限(Administrator权限)
- 管理员权限(Administrator的大部分操作)
用户权限(基本的操作)
- 可以"以管理员身份执行程序"
- 需要输入管理员账号的密码
用户启动程序
我们通过鼠标双击或者回车启动的程序, 都是由explorer.exe(资源管理器)来进行启动的.
UAC机制
因为我们的进程权限是会继承的, UAC的出现就是为了限制这种继承.
我们使用CreateProcess来进行启动子进程
进程权限继承规则如下:
Explorer以管理员权限运行
它启动一个需要提权(管理员权限)的程序RA
- 启动成功, 子进程拥有
所有管理员权限
- 启动成功, 子进程拥有
它启动一个正常的程序(不需要提权)NA
- 启动成功, 子进程拥有
UAC过滤后的权限
- 启动成功, 子进程拥有
Explorer以用户权限运行
它启动一个需要提权(管理员权限)的程序RB
- 弹出UAC, 提示输入管理员密码
- 授权后获得
所有管理员权限
它启动一个正常的程序(不需要提权)NB
- 启动成功, 子进程拥有
用户权限
- 启动成功, 子进程拥有
RA程序启动一个需要提权(管理员权限)的程序RC
- 启动成功, 子进程拥有
所有管理员权限
- 启动成功, 子进程拥有
RA程序启动一个正常(不需要提权)的程序NC
- 启动成功, 子进程拥有
UAC过滤后的权限
- 启动成功, 子进程拥有
NA程序启动一个需要提权(管理员权限)的程序RC
- 启动失败, GetLastError会是
ERROR_ELEVATION_REQUIRED
- 启动失败, GetLastError会是
NA程序启动一个正常(不需要提权)的程序NC
- 启动成功, 子进程拥有
UAC过滤后的权限
- 启动成功, 子进程拥有
要解决ERROR_ELEVATION_REQUIRED的问题, 需要使用ShellExecuteEx
未完待续...
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-06-07 at 02:22 pm