1 OneCore
主流Windows跑在PC上,Xbox跑的是从Windows 2000分支出来的版本,Windows Phone跑的是基于Windows CE(实时操作系统)的版本。
为了维护和扩展这些code方便,微软将kernels和base platform集成在一起叫OneCore,这个共享平台给所有的Windows版本使用。
这些平台互不相同,比如P在HoloLens上支持键鼠就不合理,所以这些部分不在OneCore里,但是kernel、driver和base platform binary之类的是相同的(有些feature可以通过registry-based或者policy-based settings使得在不同的平台上都make sense)。
2 Windows API
指和Windows相关OS的user-mode的系统编程接口,也叫Win32 API,但是指代的包含32-bit和64-bit的版本。在MSDN(Microsoft Developer Network)上可以在线浏览各种Windows API。
2.1 COM (Component Object Model)
由于Windows API最早都设计成C-style的function,好处是足够low level,并且能方便被其它语言access,但是坏处是naming consistency和logical groupings不好,所以就做了COM。
COM最早是给Office做文档之间的数据交换的(比如把Excel表嵌入在Word或者PPT里),这个功能最早是用基于DDE(Dynamic Data Exchange)的OLE(Object Linking and Embedding)做的,所以COM就是第二代的OLE,最早也叫OLE 2。
COM用的是类似C++实现virtual function的方式,COM client会用在virtual table机制下的一组method去调 COM server object,这样就解决了编译器的name mangling问题,所以它可以被很多不同的语言或者编译器调用,比如C/C++/VB/.Net/Delphi等。COM server一般就是以DLL或者EXE的形式。COM还有一些security、跨进程marshalling、线程模型之类的feature。
像DirectShow、Windows Media Foundation、DirectX等用的就是COM形式的API。
2.2 WinRT (Windows Runtime)
从Windows 8开始引入的,基于COM添加了各种扩展而构建的一种新的调用方式。
C++、JS以及.Net平台上的语言可以方便地用WinRT的API,比如对C++而言,是提供了一种标准之外的extension叫C++/CX来让它用简便的方式消费WinRT types。
2.3 .Net Framework
.Net Framework是Windows的一部分,下图是Windows版本默认安装的.Net Framework版本(可以装更新的.Net Framework版本,但是不能装更久的版本)。
.Net Framework主要由两个组件组成:
- CLR(Common Language Runtime):.Net的runtime engine,包含将CIL(Common Intermediate Language)转换成底层的机器语言的JIT(Just In Time)编译器、GC、类型验证、code access security组件等等。
- FCL(.Net Framework Class Library):一组实现好的类型集合,可以用于网络服务编程、数据库访问等等。