发新话题
打印

Undocumented Windows 2000 Secrets

Undocumented Windows 2000 Secrets

翻译:Kendiv

更新:Saturday, January 29, 2005

本章对于Windows 2000 Native API的讨论,主要集中在这些API和系统模块之间的关系,将重点介绍Windows 2000采用的中断机制。Windows 2000利用此机制将对内核服务的请求从用户模式向内核模式传递。另外,Win32K接口和一些与Native API相关的主要运行时库也会被提及,同时还将介绍一些经常使用的数据类型。

    有关Windows 2000架构的详细讨论已经很多。许多有关Windows NT的讨论同样适用于Windows 2000。《Inside Windows NT》(Custer 1993, Solomon 1998)的第一、二版都是有关此方面的好书,同样的还有《Inside Windows 2000》(Solomon and Russinovich 2000)。

NT*()和Zw*()函数集

    有关Windows 2000架构的一个有趣的事实是:它模拟了多个操作系统。Windows 2000内置三个子系统来支持Win32、POSIX和OS/2应用程序。Win32子系统是最流行的一个,因此它更多的被开发人员和操作系统所关照。在Windows 9x中,Win32接口实际上是作为整个系统的基础结构来实现的。但是,Windows 2000的设计却有很大不同。尽管Win32子系统包含一个名为kernel32.dll的系统模块,但这并不是实际的操作系统内核。它仅仅是Win32子系统的一个基本组件。在很多编程书籍中,Windows NT/2000的软件开发被简化为与Win32 API打交道的工作,NT平台暴露出的一个隐藏的事实是存在另一个更为基础的调用接口:Native API。相信编写kernel-mode driver或file system driver的开发人员已经对Native API非常熟悉了,因为kernel-mode模块位于更低的系统层,在那里子系统是不可见的。然而,你并不需要到驱动程序一层才能访问此接口----即使一个普通的Win32应用程序也可在任何时候调用Native API。这没什么技术上的限制----仅仅是微软不支持此种应用程序开发模式而已。因此,有关此话题的信息并不是很多,neither SDK nor the DDK make the Native API available to Win32 Application.

未文档化的级别

    本书中的多数东西都来自被称为未文档化的信息。这通常意味着微软没有公开发布这些信息。然而,未文档化也存在几个级别,这是因为可能被公布的有关庞大的操作系统(如Windows 2000)的信息非常的多。我个人的系统分类如下:

      正式文档:这些信息来自微软出版的书、文件或者开发工具。大多数重要信息来自SDK、DDK和MSDN。

      半文档化的(Semidocumented):尽管不是正式文档,但这些信息还是可以从微软正式发布的文件中挖掘出来的。例如,Windows 2000的很多函数和结构体并没有在SDK或DDK文档中提到,但出现在一些头文件或示列程序中。以Windows 2000为例,很多重要的半文档化信息都源自头文件ntddk.h和ntdef.h,这两个文件都是DDK的一部分。

      未文档化,但并没有隐藏:这些信息不能在任何官方文档和开发文档中找到,但其中的一部分对调试工具是可用的。可执行文件或符号文件中的所有符号化信息都属于这一部分。最好的例子是内核调试器的!processfields和!threadfields命令,这两个命令会给出两个未文档化的结构:EPROCESS和ETHREAD的成员名称及其偏移量。

        完全未文档化的:微软很好的隐藏了某些信息,要获得它们只能通过逆向工程和推理。此类信息包含很多实现细节的信息,没有人认为Windows 2000开发人员需要关注它们,但是这些信息对于系统开发人员和开发调试软件的人来说却非常宝贵。挖掘系统内部的信息是非常困难的,但同样是非常有趣的。

本书讨论的Windows 2000的内部细节覆盖了上述系统分类的后三个。

TOP

发新话题