谈Windows 8 - 传统管理员权限的危机

其实这篇文章在3月的CP的时候就可以发了,只是我想看看微软在后面会不会有什么改进,因为CP实在太窝囊了,不管是API还是程序还是界面都乱成一团,直至现在RP的发布。
RP这次的发布证明Win8的技术框架在CP的时候就已经定型了(RP发布快1天了,MSDN也没有对RP进行文档更新,DP和CP的时候提前1天就已经更新好了),而我们在RP上看到的更多只是对UI元素和程序体验上的改进和优化,说明前2个版本是为开发者准备的,RP则倾向于普通测试用户和最终消费者,这从RP完善了很多的安装程序上可以看出来。

上面废话太多,我们回到正题,为什么说“管理员权限的危机”?可Win8到现在默认建立的用户依然是管理员啊?!
从简单的说起,一些程序需要在开机的时候启动自己,就将自身添加到开机启动项(开始菜单\启动、注册表Run)里面,大多数程序都添加在注册表的两个Run值内,可问题来了,Win8下的explorer(资源管理器)无论如何都不可能用管理员权限启动,为什么?因为WinRT,explorer是WinRT程序的一个启动载体,微软为了限制WinRT程序对系统的操作(见火狐和谷歌的怨气),第一做的就是让这些程序没有管理员权限,所以启动它们的explorer自然也不能有管理员权限。
我们可以做个测试,结束explorer.exe进程,用任务管理器以管理员权限启动explorer,进入Metro的开始屏幕,点击任意一个Metro应用,嘿嘿,是不是无法启动。
直至Win7,不管系统有没有打开UAC,添加于注册表Run下的启动项,explorer启动时都是以管理员权限启动的。而Win8就不会了,explorer启动任何程序都是非管理员权限,不管UAC是否关闭,除非右键“以管理员权限启动”,不然启动程序都不是管理员权限。
在几个开发者群里面已经有人发现了,Win8运行一些程序,那些程序无法访问注册表?!然后他们做了测试,原因就是因为启动时没管理员权限,比如一些老的API,RegOpenKey之类的无法获取句柄,自然就错误了。

谈x86下的WinRT
微软为了对WinRT程序牢牢控制,把WinRT建立于Win32之上,并且对Win32不安全的API进行了封装,分出3份API版本“桌面专用API”、“Metro专用API”、“共享使用API”,三种API有什么特征呢?
桌面only的API如过去一样,建立于Win32体系之上,可访问和操作系统关键的位置和资源;Metro API则不同,Metro的API没有权限,也就是仅仅是功能上的API,如完整的访问进程、访问注册表、访问内存、访问文件,没了,这些大部分都交给WinRT去Broker(代理)了,而Metro程序仅仅只能调用这些被限制的WinRT API,加之无管理员权限,Win32下熟悉的很多操作都无法完成。就像做了一辈子C的人突然不给你用指针了,那得蛋疼死;而共享API就简单了,这些API需要符合WinRT API的特性,又可分出去让Win32调用,说白了这些仅仅就是功能性的API,这个功能在Win32下可以用,在Metro下也不违抗WinRT的限制机制。

微软为什么这样做?
1、微软想建立一个仅仅是应用的Metro程序体系,让Win32程序员把他们对系统的访问和操作都扔到脑后,专心的用WinRT下公开的东西写程序的功能;
2、微软为了保证以后编译到ARM程序的兼容性。因为如果Win32程序员把x86下的开发思想也用在Metro程序内,这会让以后的Metro程序分成x86\ARM二种毫不相干的程序体系,而且这样一发展,肯定是x86下的程序更多且更好,而Metro的意义就是推广ARM版本的Windows8,即你开发了我以后就让你同时能运行在x86\ARM,没错,x86仅仅是附带的,最终目标还是ARM,这样则需要剥离掉Win32下的很多开发思想。
3、微软对Mozilla和Google说“你们2个二货爱做不做,我IE我自己可以对ARM和x86都写一种版本,而你们就老实的遵循我的游戏规则,别破坏我这盘棋”。

我们该怎么办?
1、等微软在Win8的x86正式版有所改变,至少在exploer启动程序上放宽限制。这是最好的方法,如果不改变的话,Win8正式发布后会面临如Vista一样程序不兼容的窘境;
2、开发者们现在开始适应非管理员权限下的程序开发。可对习惯了管理员权限的开发者甚至需要得到管理员权限的程序来说,这很难;
3、写个patch破解x86下的此限制;
4、程序启动时如果不是管理员权限提示用户以管理员权限启动(这招现在都用很多)。可对开机启动的程序来说,不可能一开机就弹个错误框吧?

我们可不可以破解WinRT的限制?
可以,这个肯定可以,当然只是在x86下,也就是说你在x86下破开了WinRT的限制或者说直接在Win32下调用WinRT API(国外已被玩烂),可结果就是,你按照微软的路子写,微软就可以让你以后运行在ARM,而你乱七八糟来,就一直抱着Intel的腿吧。

如果微软的目标成功,那就是无数的Win32和.NET程序员为微软贡献ARM下的Metro程序,以此壮大Windows 8 ARM,.NET程序员应该会比较可以接受,可谁又能知道那些风流惯了的Win32程序员能不能适应这重重包围呢?

【另发cnbeta】


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值