原文链接:http://www.cnblogs.com/XjChenny/archive/2011/11/20/2256467.html

第一章

概念与工具

在这个章节,我们将介绍有关微软windows操作系统的概念和词汇,比如Windows API、进程、线程、虚拟内存、内核模式和用户模式、对象、句柄、安全以及注册表,它们将贯穿于整本书。我们同样将介绍一些能够帮助我们“遨游”Windows内核世界的工具,如内核调试器、可靠性与性能监视器以及从Windows Sysinternals(www.microsoft.com/technet/sysinternals)上得到的关键工具。另外,我们将告诉你如何使用Windows Driver Kit(WDK)和Windows Software Development Kit(SDK),让它们成为帮助我们寻找更多内核信息的资源。

请保证你能够明白这一章所讲的内容——在写下这本书剩余部分的时候我们假定你已经做到了。

Windows操作系统版本

这本书覆盖了基于Windows NT内核的最新的两个Windows操作系统版本:Windows Vista(32位和64位版本)和Windows Server 2008(32位和64位版本)。如果没有特殊说明,本书所阐述的内容适用于所有Windows版本。作为一些背景知识,表1-1列出了基于Windows NT内核的操作系统发行版、它们的内部版本号以及实际产品名称。


【翻译】深入解析Windows操作系统(第五版)-第一章教程

基本概念和词汇

在这本书中,我们将引用许多对于某些读者来讲不太熟悉的数据结构和概念。在这一节中,我们将阐述一些贯穿全书的词汇。在阅读随后的章节之前你应该熟悉它们。

Windows API

Windows应用编程接口(API)是Windows操作系统家族的系统编程接口。在介绍64位版本的Windows XP和Windows Server 2003,我们将介绍32位版本的Windows操作系统的编程接口。为了区别于传统的16位版本的Windows操作系统的编程接口,它被称为Win32 API。在这本书中,Windows API这个词既包含了32位和64位的Windows Vista和Windows Server 2008操作系统编程接口。

注意:Windows API在Windows软件开发包(SDK)文档中有详细的描述。(看本章稍后的“Windows Software Development Kit”一节。)这个文档可以免费地在www.msdn.microsoft.com 上在线观看。它也可以通过订阅MSDN得到。MSDN是微软面向开发人员的支持平台,可以从www.msdn.microsoft.com上得到更多的信息。一个非常棒的关于如何利用Windows基本APi编程的书籍是Jeffrey Richter和Christophe Nasarre的《Windows Via C/C++》第五版(微软出版社,2007)。

Windows API包含了数千个可供调用的函数,它们可以被分为如下几类:

    • 基本服务
    • 组件服务
    • 用户接口服务
    • 图形和多媒体服务
    • 消息和通信
    • 网络
    • 站点服务

这本书将重点介绍关键的基本服务,如进程和线程,内存管理,I/O和安全。

关于.NET

.NET框架包含了一个框架类库(FCL)和一个通用语言运行时(CLR)。CLR是一个代码运行环境,具有实时编译、类型检查、废弃空间回收和代码访问权限等特性。通过提供这些特性,CLR提供了一个能够提高编程人员开发效率、减少普遍的编程错误的开发环境。可以通过阅读Jeffrey Richter的《CLR via C#》第二版(微软出版社,2006)来获得关于.NET Framework的详细描述和核心架构。

CLR的实现如同传统的COM服务,它的代码存放在标准的用户层的DLL(动态链接库)中。实际上,.NET Framework的所有组件都在标准用户层DLL中实现,在用户层的Windows API之上。(没有任何的.NET Framework运行在内核态)。表1-1阐明了这些组件之间的关系:

【翻译】深入解析Windows操作系统(第五版)-第一章教程

Win32 API的历史

有趣的是,Win32 并不是微软Windows NT最早的编程接口。Windows NT项目是为了替代OS/2 v2操作系统而开始的,因此主要的编程接口是32位的OS/2表示管理API(Presentation Manager API)。然而,项目进展一年之后,微软的Windows 3.0冲击了市场并且大热,因此微软改变了方向,将Windows NT作为Windows家族产品的替代品而不是OS/2的替代品。这是对于Windows API崛起值得纪念的一个关键时刻——在这之前,WIndows API只是作为16位编程接口而存在的。Windows API在之后引入了许多不曾在WIndows 3.1中出现的函数,并且微软决定使新的函数在名字、语法、使用的数据类型兼容16位的Windows API函数,这样在任何时候都能够很轻松地将已经存在的16位Windows应用程序移植到Windows NT上。因此,当第一次接触Windows API的人可能会诧异于为什么许多函数的名字和接口不匹配,其中的一个原因就是这种不一致性是为了保证Windows API与旧的16位Windows API兼容。

服务,函数与例程

服务这个词在Windows用户和编程文档中有着不同的意义,在不同的上下文中也有着差异。例如,服务这个词可以指一个在操作系统中可供调用的例程、一个设备驱动或者一个服务进程。接下来的一个列表描述了本书中的一些词语的含义:

  • Windows API函数

Windows API中被文档化的、可供调用的子例程,如CreateProcess、CreateFile、GetMessage等。

  • 本地系统服务(或执行体(executive)系统服务)

可供用户层调用的,没有被文档化的操作系统低层服务。例如,NtCreateProcessEx是CreateProcess函数调用的用来创建一个新进程(如何将WIndowsAPI函数对应于本地函数,请阅读第三章“操作系统服务分发”一节)的操作系统内部服务。

  • 内核支持函数

只能够从内核态被调用的Windows操作系统的子例程(在这一节稍后介绍)。例如,ExAllocatePoolWithTag是可供设备驱动程序调用的从Windows操作系统堆(被称为内存池)中分配内存的例程。

  • Windows服务

Windows服务控制管理器所启动的进程(虽然注册表定义了Windows设备驱动程序为服务,但我们在本书中并不这么认为)。例如,任务调用服务运行于用户层进程,用来支持at命令(类似于UNIX的at或者cron命令)。

  • DLLs(动态链接库)

一组由可调用的子例程所连接在一起的二进制文件,可被使用这些代码的应用程序动态加载。例如Msvcrt.dll(C运行时库)和Kernel32.dll(Windows API子系统库之一)。Windows用户态的组件和应用程序大量地使用DLL,并且Windows保证即使一个DLL被多个应用程序所引用,该DLL的代码在内存中也只有一个副本。

转载于:https://www.cnblogs.com/XjChenny/archive/2011/11/20/2256467.html

标签: Windows, 服务, 内核, 编程, API, 操作系统

相关文章推荐

添加新评论,含*的栏目为必填