《Windows Internals 4th Edition》是著名Windows内核专家Mark E. Russionovich与David Solomon Expert Seminars的主席David A. Solomon合作的一本介绍Windows架构和工作细节的著作。中文版由微软亚洲研究院研究员潘爱民老师翻译,这本书倍受各权威人员和机构所推荐,堪称经典。我第一次遇见本书就对它钟爱得不得了,于是决心不仅要自己认真学完本书,更想分享下自己每一章的学习成果,给各位既想学好Windows内部原理,但又对厚厚一本书望而生畏或者没有时间去仔细的朋友,我尽量把自己认为理解可能有难度的部分详细分享一下,并尽可能讲得精简、有趣些,希望大家喜欢!这一系列文章,是视我阅读本书的进度而定的,有时看时间久些,有时快些。本系列文章针对的阅读对象是有一定(不用很多,我自己也是菜鸟一个)Windows知识与开发经验以及一定硬件常识的读者。最后还是忠告一点,如果有时间还是请大家亲自读一读本书,有许多东西还是要靠自己去领悟以及体会。如果文章中对书中的内容有所曲解的话,请大牛们指出!那么前言就讲到这里,开始第一章啦!
(一)基础概念和术语
本章前面一小半部分介绍Windows NT发展历史和版本号的就不写出了,如果你很感兴趣,请自己去查阅,反正不知道也不碍什么事。
首先讲到的一个基本概念是Windows API,完整写法是Windows Application Programming Interface,即Windows应用编程接口。对于开发人员,如果您想要去学习WinAPI,既可以去查阅SDK文档,也可以去看MSDN,MSDN那个好啊!微软Technet讲师们都讲,MSDN和Knowledge Base,有你需要的任何知识,走遍天下都不怕,哼哼!Windows API有许多的类别,而我们这本书要涉及的仅仅是关键基本服务的部分(比如进程线程、内存管理、IO、安全等),其他的么就忽略了。
此时,书上还提到了.NET,我觉得也是很有必要了解一下的,毕竟这是未来的趋势。简单的讲,.NET的应用程序是建立在.NET框架那些程序集上的(System.dll,System.Windows.dll等等,对.net我是白痴,只能举出这两个比较傻的例子),这两部分的程序代码都是运行在用户模式下,并且是托管代码(支持动态编译、对象周期管理等等特性)。而这两部分又是建立在非托管代码的CLR(Common Language Runtime,通用语言运行时,所谓通用,就是不管对C#,VB,J#都适用)上,CLR么自然就运行在经典的WinAPI上,所以呢CLR也是运行在用户模式下。故而我们可以得到这个结论:.NET是完全运行在用户模式的框架。
回到API来,API只是一个概念,通常大家都会和API函数混在一起,而API函数真正严格的定义是指Windows API中已经被文档化的可调用子例程,就是说,一定是要M$(小注:微软比较有钱,所以我不写MS,而是写M$,也省得打完M,还要放掉Shift键。。。咔咔)一定要M$正式向世界公布的,如CreateProcess、CreateWindow等,而像ntdll.dll里面的一些系统内部调用的函数ntreadfile就不能算,因为他们没名份,是小白脸。