来源:自学PHP网 时间:2015-04-17 18:33 作者: 阅读:次
[导读] 摘要Windows 2000中的驱动程序校验器包可以提升稳定性和可靠性,并且你能够使用这个工具来调试驱动程序问题。在Windows 2000中,内核模式部件能够导致系统崩溃或者系统故障,结果错误...
摘要 Windows 2000中的驱动程序校验器包可以提升稳定性和可靠性,并且你能够使用这个工具来调试驱动程序问题。在Windows 2000中,内核模式部件能够导致系统崩溃或者系统故障,结果错误的写入驱动程序,例如一个Windows 驱动程序模型(WDM)驱动程序的早期版本。这篇文章阐述了如何使用驱动程序校验器来隔离并调试系统中的一个驱动程序。 你可以通过添加一个注册表项,然后重新启动你的计算机来使用驱动程序校验器。你不需要为了开始分析你的系统的驱动程序而做任何其他的改变。注意:你可以在Windows 2000的零售和已检查两个版本来激活驱动程序校验器。驱动程序校验器提供下面的性能(你可以在注册表中激活或者禁用这些性能)。缓冲池分配尝试从特殊的缓冲池去分配一个驱动程序的全部缓冲池。这个驱动程序的分配被隔离并且受No Access权限的约束,而且不和其它系统共享缓冲池分配。此性能决定一个驱动程序是否能够分配比共享缓冲池更多的资源,从而导致崩溃和系统的不稳定。当你激活这个性能并且目标计算机有足够的物理和虚拟内存的时候,所有驱动程序的分配是自动地重新定向到特殊的缓冲池。 提供Extreme Memory Pressure Extreme Memory Pressure在一个特定的驱动器上设置,而不会影响其它驱动器(不管系统内存的大小)。你能够通过指示内存管理的方法使所有驱动程序的可调页代码和数据以及系统的可调页缓冲池、代码和数据无效。这让你发现一个驱动器,它错误地保持自旋锁或者提高IRQL然后可以访问可调页的代码或者数据。你能够使用Extreme Memory Pressure来探测间歇性问题并且隔离问题。参数验证所有的自旋锁、IRQL和驱动器所作的缓冲池分配调用自动地接收到参数确认。这就意味着做校验可以确保下面情况的安全: 一个提高的IRQL实际上是一个提高的IRQL(当前的IRQL低于目的IRQL)。 被释放的缓冲池 检查所有被释放的缓冲池可以保证清除缓冲池内部所有未到时的计时器,这些情况将引起非常难跟踪的系统崩溃。 缓冲池泄漏检测 所有的驱动器缓冲池分配被自动跟踪。在驱动器卸载的时候,如果有分配没有被释放,那么将开始一个bug检查。然后你可以使用!verifier 3内核调试器命令来显示所有未被释放的分配。你也可以在卸载之前使用这个命令来及时地查看驱动器所拥有的明显地址分配。 驱动器的卸载检测 执行驱动程序的卸载检测来捕捉卸载的驱动程序,并且清除所用的资源(在驱动程序卸载不久以后,它增加了一个系统bug检测的可能性)。驱动程序没有删除的资源包括后备列表、延迟的过程调用 (DPC)、工作线程、队列、时钟和其它资源。输入输出校验器如果你用校验器工具或者VerifyDriverLevel 注册表键打开输入输出校验器标志,那么一些输入输出管理器验证被打开。这包括以下几项: 所有通过IoAllocateIrp分配的IRPS自特殊的缓冲池分配。 你可以使用Verifier.exe或者通过编辑注册表来激活驱动程序校验器。使用Verifier.exe这是激活驱动程序校验器的首选方法(Verifier.exe存在于Windows2000的每一个拷贝中,并且可以安装到System32文件夹中)。Verifier.exe有命令行和图形用户界面(GUI)界面,因此你可以指定驱动程序并且适当地认证等级。你也可以注意驱动程序校验器的即时统计表。为了获得其它的信息,请参考本文章的"驱动程序校验管理器"部分。 编辑注册表 警告:错误的使用注册表编辑器能够导致严重的问题,这些问题可能需要你重新安装你的操作系统。微软不能保证来自错误使用注册表编辑器的所有问题都被解决。使用注册表编辑器有一定的冒险性。关于如何编辑注册表的信息,可以查看注册表(Regedit.exe)中的"Changing Keys and Values"帮助主题或者Regedt32.exe 中的"Add and Delete Information in the Registry" 和 "Edit Registry Data"帮助主题。注意你应该在你编辑注册表之前,备份你的注册表。如果你正在运行Windows NT或者 Windows 2000,你也应该升级你的应急修复磁盘 (ERD)。通过编辑注册表来激活驱动程序校验器可以参照以下步骤: 打开注册表编辑器(Regedt32) Ntfs.sys 你可以在下面的注册表键中指定驱动程序验证的等级。HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerMemory ManagementVerifyDriverLevel下面列表显示这个键的位类型的域值(这些标志可以相或使用): 0x01:试图满足特殊缓冲池的所有分配。 IRQL_NOT_LESS_OR_EQUAL 0xA 驱动程序校验器和图形驱动程序 Windows 2000 内核模式图形驱动程序(例如打印机和显示器驱动程序DLLs)不能直接的调用缓冲池入口点,相反,缓冲池分配通过使用图形设备驱动程序接口(DDI)回调Win32k.sys间接的进行。例如,EngAllocMem是一个图形驱动程序显式地调用来分配缓冲池内存的回调函数。同样,其它特定的回调函数,如EngCreatePalette 和 EngCreateBitmap,返回缓冲池内存。为了给图象驱动程序提供相同种类的自动测试,对于一些驱动程序校验器功能的支持是和Win32k.sys合成一体的。可是因为图形驱动程序与其他kernel模式的驱动程序相比受限制程度更强,所以它们需要一个驱动程序校验器功能性的子集。很显然,IRQL检查和输入输出确认是不需要的。其它的功能性,即运用特殊的缓冲池,缓冲池分配的随机失败和缓冲池跟踪,被支持来改变在不同图形DDI回调信息的位置。提供对随机失效地支持,以用于下列图形DDI回调函数: EngAllocMem 此外,特殊缓冲池使用和缓冲池跟踪被支持来适合于EngAllocMem。为图形驱动程序激活驱动程序校验器是和其它的驱动程序一样的(为得到其它的信息,请参考本文章的"激活驱动程序校验器"部分)。例如IRQL检查的不支持的标志被忽略。此外,你可以使用gdikdx.verifier kernel调试器命令来检测图形驱动程序的当前驱动程序校验器状态和缓冲踪迹。 注意:你应该为全面测试而使用随机分配失败设置。这个设置的使用导致错误信息,因此你不应该通过确认测试来使用这个设置去检查图形驱动程序的执行的正确性(例如,通过把图形驱动程序输出比作一个参考图象)。 驱动程序校验管理器(Verifier.exe) 驱动程序状态 驱动程序状态属性页为你提供一幅当前驱动程序校验器状态的图象。你能够看到什么驱动程序被探测。状态可能是下面所述之一: Loaded:驱动程序现在被载入和检验。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com