当前位置:早雪网网络学院编程文档其他语言 → 《Undocumented Windows 2000 Secrets》翻译 --- 第三章(1)

《Undocumented Windows 2000 Secrets》翻译 --- 第三章(1)

减小字体 增大字体 作者:未知  来源:从互联网收集整理并转载  发布时间:2005-6-3 0:56:07

第三章  编写内核模式驱动程序

翻译:Kendiv

更新:Monday, February 07, 2005

 

在下一章中,我们会经常访问那些仅在内核模式下才有效的系统资源。大量的示例代码都被设计为内核驱动例程(Kernel-mode driver routine)。因此,需要有关开发此种软件的基本知识。因为我不能假定所有读者都有这方面的经验,我会在此简要地介绍一下内核模式驱动程序编程,不过这仅集中在如何使用驱动开发向导(在本书光盘上)。

 

本章还将讨论Windows 2000服务控制管理器(Service Control ManagerSCM)的基本知识,这包括SCM如何允许在运行时加载、控制和卸载驱动程序,resulting in wonderfully short change-build-test turnaround cycles。本章的题目或许会让人有些误解,驱动一词通常与控制硬件的底层软件相关。事实上,很多内核程序员每天都在做这些事情。不过,Windows 2000驱动程序分层模式允许做比这更多的事情。内核驱动程序可以完成任意复杂的任务,若不考虑它们运行于更高的CPU特权级别上而且使用不同的开发接口,那它们很像用户模式下的DLL。在此,我们将使用这种强大的开发技术来侦测Windows 2000的内部秘密,使用内核驱动程序就像驾驶从狭小的用户模式飞往Windows 2000内核的太空飞船。

 

创建一个驱动程序的骨架

即使长时间开发Win32应用程序和库的开发人员,在首次编写内核驱动程序时,也会感觉像是一个绝对的初学者。这是因为,内核模式下的代码运行在一个完全不同的操作系统环境中。Win32开发人员的工作仅局限在属于Windows 2000 Win32子系统的几个系统组件上。其他开发人员可能编写POSIOS/2应用程序,Windows 2000的附加子系统为它们提供支持。感谢子系统这个概念,Windows 2000就像一个变色龙---它可通过这些子系统(前面提及的)导出不同的应用程序开发接口来模拟不同的操作系统。与此相反,内核模式的代码可以看到“真实”的Windows 2000操作系统。它们使用的接口可以称之为“最终边界”。当然,这并不是说,内核模式完全摆脱了子系统。在第二章中,我们看到win32k.sys就是Win32 GUI和窗口管理器在内核模式下的分支,将它们放在内核是出于性能考虑。然而,win32k.sys导出的API函数集合中只有一小部分出现在了gdi32.dlluser32.dll中,这也意味着只有这一小部分函数可以作为Win32 API函数来使用,因此,Win32K决不只是Win32踏入内核世界的一脚,实际上,应把它看作是一个高性能的内核模式的图形引擎。

 

Windows 2000 DDKDevice Driver Kit

由于内核模式下的编程使用了不同的系统接口,在Win32编程中经常使用的

[数据载入中...] [返回上一页] [打 印]