对Win8的WinRT环境的一些个人探索
扫描二维码
随时随地手机看文章
开发者预览版没装,就装了消费者预览版,折腾了很久,关于那个WinRT,有很多疑问:
1、Win32 API是R3和R0沟通的一层纸,所有用户层下调用的函数最终都会通过int3进入内核(Win32——sysenter——Kernel),那WinRT是否也是这样的呢?内核驱动内,如ntoskrnl等会不会有WinRT函数的最终R0入口?还是说WinRT函数原始就是基于Win32写的,接口是WinRT——Win32——Kernel这样的呢?
2、我研究了一下WinRT的运行环境,Win8中有3个WinRT相关服务,把其中那个WinRT后台作业服务在Win32下停止掉后,Metro程序就无法正常工作了。还有更奇怪的一个现象,如果我们使用管理员权限运行explorer,进入Metro界面点击任何一个Metro程序,都会提示无法运行,需要以非管理员权限运行explorer。
从中可以看到:A、Metro是完全嵌入在explorer内的。(结束explorer后,Metro界面怎样都调不出来);B、WinRT宣称的权限管理限制,其实就是以非Win32下管理员权限运行后,防止程序使用WinRT API时的操作对Win32构成破坏,也就是说Win32依然是主要的!
3、从微软公开的Windows 8 New API List中,可以发现,以API形式添加到系统的大多数都是desktop only,仅有那么部分可以desktop + metro共用,Metro能用的接口基本上全是COM的。而我仔细观察了一下,发现一个很有意思的事情,添加给desktop only的API权限依然还是那样(恩,就如你熟悉的OpenProcess那样),而添加给metro可以用的API,没权限,仅是功能上的API罢了(如压缩API)。也还是证实了微软对WinRT的权限控制是在用户层API上做手脚。(并且Metro安装的时候,显示如android那样这个Metro应用程序会使用到那些功能,其实也就是微软扫描这个程序使用了哪些WinRT API,所以才把WinRT全做成COM的,而不是那个不可控制的Win32 API。)
4、在Win32下我们完全可以对WinRT进行破坏甚至删除WinRT,而Metro程序和Metro程序的配置文件也仅是在Program Files和AppData下的一个目录罢了(AppData下有一个完整的Metro程序环境变量,就如同你在Win32下的Roaming、LocalLow、Local这些目录一样),Win32下完全可以任意操作那些文件。所以所谓的WinRT安全性,在Win32下毫无任何意义可言。