我可以告诉你 , 现在我将简要的介绍一下 Kernel-mode driver 编程技术(这本是第三章的内容) 。眼下 , 这已经足够说明 kernel-mode driver 让系统崩溃是非常容易的事 。当驱动程序出错时 , Windows 2000 没有提供一种错误恢复机制 , 这就导致即使无意中试图执行一个不合法的操作也会招来蓝屏 。当然 , 最简单而且危险最小的违规动作就是读取一个无效的内存地址 。由于系统显示捕获所有通过空指针进行的内存访问 , 这是 C 编程中一个常见的错误 , 读取一个空指针是让系统崩溃的理想动作 。示例代码中的 w2k_kill.sys driver 就是这么做的 。这是一个非常简单的程序 , 同时也是出现在本书中的第一个 kernel-mode driver。
列表 1-1 是 w2k_kill.c 的引用部分 , 展示了引发蓝屏的错误代码 。当编写这样无意义的代码时 , 需要注意内建于 Visual C/C的优化器可能会抵消你的努力 , 它会跟踪所有的代码并试图消除其中任何有副作用的部分 。在下面的例子中 , 优化器并未起作用 , 因为 DriverEntry() 坚持将在 0 地址发现的东西作为其返回值 。这意味着这个数值将会被存放到 CPU 的 EAX 寄存器中 , 最简单的方法就是 MOV EAX, [0] 指令 , 这个指令将会抛出我们期待的异常 。
NTSTATUS DriverEntry ( PDRIVER_OBJECT pDriverObject,
PUNICODE_STRING puRegistryPath )
{
return *((NTSTATUS*)0); // read through NULL pointer
}
列表 1-1 A NULL Pointer Read Operation in Kernel-Mode Crashes the System
w2k_load.exe 程序出现在第三章 , 用来用来载入并启动 w2k_kill.sys 驱动程序 。如果你在精神上做好了 kill 掉你的 Windows 2000 系统 , 请按照下面的步骤来做:
l 关闭所有应用程序
l 插入本书的附带光盘
l 在开始菜单中选择运行
l 输入 d:binw2k_load w2k_kill.sys , 用你 CD-ROM 的盘符替换 d: , 然后单击确定
当单击后 , w2k_load.exe 将试图加载 w2k_kill.sys 文件(位于光盘的 bin 目录下) 。随后 DriverEntry() 开始执行 , 蓝屏出现了 , 如图 1-3 所示 , 你会看到当内存数据被转储到页面文件存储器时 , 屏幕上会有一个计数器从 0 逐渐增加到 100。如果你在启动和恢复对话框中选中了自动重起 , 当崩溃转储完成后 , 系统会立即重新启动 。当系统进入等待登陆状态后 , 稍等一会直到硬盘灯不再闪烁 。这是因为将 崩溃转储数据从页面文件复制到磁盘文件需要一定的时间 , 特别是你的物理内存很大时 。在此时干扰系统 , 例如 , 将系统过早的关闭 , 可能会产生一个无效的崩溃转 储文件 。
【Windows 2000对调试技术的支持】在图 1-3 中 , 可以看出系统会显示包含出错代码的模块的名称( w2k_kill.sys ) , 以及引发异常的指令地址( 0xBECC3000 ) 。这个地址或许和你的系统的不同 , 因为它是随硬件配置而变化的 。驱动程序的加载地址通常都不确定 , 和 DLL 的加载地址类似 。请记下显示的地址 ---- 稍后在安装和配置内核调试器是你还需要它 。
一点小的提示:故意让系统崩溃不该是你每天都作的事 。尽管有问题的 w2k_kill.sys 本 身是无害的 , 但在它执行的那一刻可能并不那么走运 。如果度去空指针发生时另一个线程正在做某些重要的事情 , 系统可能会在该线程有机会做清理工作之前关闭 。比如 , 在重起之后 , 活动桌面往往会抱怨发生了一些可恶的事情 , 它需要进行恢复 。因此 , 在你使系统崩溃之前 , 应该仔细的检察系统是否影响了重要数据并且保证 所有 cache 中的数据都被写入了磁盘 。注意 , 作者和出版商不会对 w2k_kill.sys 驱动程序造成的破坏负责 。
译注: 达摩克利斯希腊传说中的叙拉古国王狄奥尼西奥斯的朝臣 , 据传说其被迫坐在上悬宝剑的餐桌旁 , 宝剑由一根头发系住 , 以此来暗示君王命运的多危
推荐阅读
- iqoo3怎么备份数据
- 永久删除 Windows 2000 默认本地 C, D 盘共享的两个批处理文件
- Windows 2000 无法直接关机解决方案
- 2 《Undocumented Windows 2000 Secrets》翻译 --- 第二章
- 2 《Undocumented Windows 2000 Secrets》翻译 --- 2
- 使用 Windows 2000 中的 IPSec IP 筛选器列表
- iqoo3压感按键怎么设置
- 体验 Windows 2000 运行如飞的感觉
- Windows 2000 运行速度优化
- Windows 2000 自动更新桌面的实现
