« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9696269 建立时间:2004年12月20日 |

| |
[编程感想]从Vista看进去,Microsoft是最好的学生  原创空间, 软件技术
邢红瑞 发表于 2008/3/10 22:46:19 |
最近把我做的程序移植到vista上,发现vista从界面到使用逻辑,和linux越来越像,界面简直就是kde4,进程管理就是Debian。UAC,Windows Vista 里面重要构成部分。对 Windows 安全保护起着绝对重要用途。在安全机制的问题上,微软已经被病毒制造者以及黑客们整得抓狂了,有些显得好笑。用牺牲大量易用性来换取安全,可以是权宜之计,不是长久之计,无异于饮鸩止渴。在Windows Vista里面,进程是分权限级别的。Windows会根据manifest内容、Windows Installer detection、兼容性数据库等方法判断一个进程是否需要一开始就运行在完整admin模式下。Activex控件的安装需要adminstrator权限,路由添加需要Administrator。有时候不得不写manifest,是程序运行就是Administrator权限,这样可以后台启用服务,不需要每次跑起来总会跳出一个UAC窗口,问是否继续操作。<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="solo.exe" type="win32"/><trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security></trustInfo></assembly>很有意思的是但是不是所有的程序一开始就需要运行在完整admin模式下的,例如任务管理器TaskMgr.EXE。在Windows Vista里面,启动任务管理器以后,默认只能显示当前账户相关的进程信息,一个没有完全admin权限的进程是没法直接创建更高权限进程的,也就是说一般权限下的进程是没法直接创建完全Admin权限进程的。因此CreateProcess API函数肯定是不能使用的。如果使用CreateProcessAsUser函数,那么需要提供一个比较高的token才能完成,而TaskMgr根本无法做到。原因是在Windows Vista里面,ShellExecuteExW的lpVerb的参数可以传入runas命令,使得系统调用 ShellExecuteExW 的时候,会强制将目标文件以完全admin模式启动,即使目标文件的manifest没有申明需要完全admin权限。看来微软很善于学习,至少不是那末固步自封。 |
|
|