正在加载图片...
检查驱动程序的卸裁 当一个正被检査的驱动程序卸载后, Driver verifier执行几个检查来确信驱动程序已被清空 特别地, Driver Verifier寻找下面部分: 未删除的定时 未定的DPC 未删除的辅助列表 未删除的工作线程 未删除的队列 其他类似的资源 诸如以上的问题能潜在地引起系统错误检査在驱动程序卸载后被发布,引起这些错误检测的 原因难于判断。当 Driver verifier运行时,这种故障将导致错误检测0xC7在驱动程序卸载之后立 即发布。(参看微软的调试程序文件的使用来获得错误检测参数的列表。) 图形驱动程序 当检查一个驱动程序时,这些自动检查没有执行 2112特别内存池( Special Memory Pool) 内存讹误是一个普通的驱动程序问题,驱动程序错误能在错误出现的长时间后导致崩溃。这些 错误中最普通要数访问已被释放的内存,并分配n字节然后是n+1字节 为发现内存讹误, Driver verifier能够从一特别池分配驱动程序内存并监视该池防止不正确的 访问 两个特别池定位是可行的, Ver ify End定位更易于发现访问上溢, Verify Start分配更易发现 下溢。(注意:主要的内存讹误是由于上溢,而非下溢。) 当特别内存池运行并且选择了 Verify End时,驱动程序请求的每一个内存分配被放置到不同 的内存页码上。允许分配适合分页的最高可能地址被返回,这样内存被定位于页末。分页的前面 部分用特殊的模式写入,前面的页码和紧邻的页码被标记为不可访问的 如果驱动程序在分配结束之后试图访问内存, Driver verifier将立即发现并发布错误检测 0xCD,如果驱动程序在缓冲区的开始之前写内存,这将(大概)更改这种模式。当缓冲区被释放 Driver verifier将发现更改并报告错误检测OxCl。 如果驱动程序在缓冲区释放以后读出或写入, Driver Verifier将报告错误检测oxCC。 当选择 Verify Start时,内存缓冲区定位于分页的开始,在这种设置下,下溢立即引起错误检 测,而上溢只有当内存被释放时才引起错误检测。这个选项的其他方面与 Verify End选项是相同 由于驱动程序上溢错误比下溢错误普遍的多,所以 Verify End是默认的定位。为改变这种设 置,使用全局标记应用程序( Global Flags Utility) 个单独的内存分配推翻这种设置,并通过调用 ExAllocate With Tag Priority的 Priority参数来 设置成 Xxx SpecialPoolOverrun或 XxxS pecial Pool Underrun来选择它的定位。(这个例程不能够激 活或去活特别池,或者请求一个特别的内存分配,否则的话,这个内存分配将从普通池得到,只 有此种定位才能够被这个例程控制。) 池标记 Driver verifier将给已选择要检查的驱动程序指定特别池,另外一种使用特别池的方法是指定 它到被一个专用 pool tag标记的内存池。6 检查驱动程序的卸载 当一个正被检查的驱动程序卸载后,Driver Verifier 执行几个检查来确信驱动程序已被清空。 特别地,Driver Verifier 寻找下面部分: ◼ 未删除的定时器 ◼ 未定的 DPC ◼ 未删除的辅助列表 ◼ 未删除的工作线程 ◼ 未删除的队列 ◼ 其他类似的资源 诸如以上的问题能潜在地引起系统错误检查在驱动程序卸载后被发布,引起这些错误检测的 原因难于判断。当 Driver Verifier 运行时,这种故障将导致错误检测 0xC7 在驱动程序卸载之后立 即发布。(参看微软的调试程序文件的使用来获得错误检测参数的列表。) 图形驱动程序 当检查一个驱动程序时,这些自动检查没有执行。 2.1.1.2 特别内存池(Special Memory Pool) 内存讹误是一个普通的驱动程序问题,驱动程序错误能在错误出现的长时间后导致崩溃。这些 错误中最普通要数访问已被释放的内存,并分配 n 字节然后是 n+1 字节。 为发现内存讹误,Driver Verifier 能够从一特别池分配驱动程序内存并监视该池防止不正确的 访问。 两个特别池定位是可行的,Verify End 定位更易于发现访问上溢,Verify Start 分配更易发现 下溢。(注意:主要的内存讹误是由于上溢,而非下溢。) 当特别内存池运行并且选择了 Verify End 时,驱动程序请求的每一个内存分配被放置到不同 的内存页码上。允许分配适合分页的最高可能地址被返回,这样内存被定位于页末。分页的前面 部分用特殊的模式写入,前面的页码和紧邻的页码被标记为不可访问的。 如果驱动程序在分配结束之后试图访问内存,Driver Verifier 将立即发现并发布错误检测 0xCD,如果驱动程序在缓冲区的开始之前写内存,这将(大概)更改这种模式。当缓冲区被释放, Driver Verifier 将发现更改并报告错误检测 0xC1。 如果驱动程序在缓冲区释放以后读出或写入,Driver Verifier 将报告错误检测 0xCC。 当选择 Verify Start 时,内存缓冲区定位于分页的开始,在这种设置下,下溢立即引起错误检 测,而上溢只有当内存被释放时才引起错误检测。这个选项的其他方面与 Verify End 选项是相同 的。 由于驱动程序上溢错误比下溢错误普遍的多,所以 Verify End 是默认的定位。为改变这种设 置,使用全局标记应用程序(Global Flags Utility)。 一个单独的内存分配推翻这种设置,并通过调用 ExAllocateWithTagPriority 的 Priority 参数来 设置成 XxxSpecialPoolOverrun 或 XxxSpecialPoolUnderrun 来选择它的定位。(这个例程不能够激 活或去活特别池,或者请求一个特别的内存分配,否则的话,这个内存分配将从普通池得到,只 有此种定位才能够被这个例程控制。) 池标记 Driver Verifier 将给已选择要检查的驱动程序指定特别池,另外一种使用特别池的方法是指定 它到被一个专用 pool tag 标记的内存池
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有