SlideShare a Scribd company logo
1 of 11
Download to read offline
设备驱动深度测试 – 下
Windows 10 Upgrade Ready Part-9
苏繁 | 2017.11
内容
• 什么是驱动程序验证器(Driver Verifier)
• 驱动程序验证器功能
• 在哪里下载驱动程序验证器
• 何时使用驱动程序验证器
• 如何启动和控制驱动程序验证器
• 如何调试驱动程序验证器冲突
什么是驱动程序验证器(Driver Verifier)
• 驱动程序验证器可监视Windows内核模式驱动程序和图形驱动程序,
以检测可能损坏系统的非法函数调用或操作。
• 驱动程序验证器可以将Windows驱动程序置于各种压力和测试中,以
找到不正确的行为。
• 可以同时在多个驱动程序上运行驱动程序验证器,或者一次在一个驱
动程序上。
• 可以配置要运行的测试,允许通过强压力负载或精简的试验来测试驱
动程序。
驱动程序验证器功能
• 池分配
– 尝试从特殊池中分配一个驱动程序的所有池配额。此驱动程序的配额是由“拒绝访问”权限分离和限定,而不是与系统的其他部分共享池配额。此
功能可以确定驱动程序的池配额是否超出了其应得的份额,进而导致系统损坏和不稳定。当您启用此功能并且目标计算机拥有足够的物理和虚拟
内存时,该驱动程序的所有配额将自动重定向到特殊池。
• 提供极限内存压力
– 可以为特定驱动程序提供极限内存压力,而不影响其他驱动程序(不管系统内存有多大)。使用下面的方法可以做到这一点:通知内存管理,将
该驱动程序的所有可分页代码和数据以及系统页面缓冲池、代码和数据设为无效。这样,您就可以检测到错误地持有旋转锁或引发 IRQL 的驱动
程序,并随后获得对分页代码或数据的访问权限。可以使用“极限内存压力”来检测一些间歇性的问题并找出原因。
• 参数验证
– 驱动程序调用的所有旋转锁、IRQL 和池分配都接受自动参数验证。
• 池分配注入失败
– 如果驱动程序没有将池分配标记为 MUST_SUCCEED,池分配可能会被随机取消,以确保该驱动程序可以正确地处理出现的内存不足情况。
• 要释放的池
– 检查所有要释放的池,确保在此池分配中没有挂起的计时器,因为这会导致系统崩溃的原因更加难于查找。
• 池泄漏检测
– 系统自动跟踪驱动程序的所有池分配。在卸载驱动程序时,如果没有释放任何分配,就会执行错误检查。随后,您可以使用 !verifier 3 内核调试
程序命令来显示未释放的所有配额。也可以在卸载前使用此命令,查看驱动程序在任一时刻的未定分配。
• 驱动程序卸载检查
– 执行驱动程序卸载检查的目的是为了找出那些已卸载但没有清除所用资源(这样就增加了在驱动程序卸载后不久即开始检查系统错误的可能性)
的驱动程序。驱动程序无法删除的资源包括搁置资源的列表、挂起的延迟过程调用 (DPC)、工作线程、队列、计时器和其他资源。
• I/O验证程序
– 如果使用验证程序工具或 VerifyDriverLevel 注册表项打开“I/O 验证程序”标志(有关更多信息,请参考本文“启用驱动程序验证”一节),就会打开
某些 I/O 管理器验证。
在哪里下载驱动程序验证器
• 驱动程序验证器无需额外下载
• 自Windows 2000开始内置于系统之中
• 驱动程序验证器位于 %windir%system32目录中
• 支持图形界面和命令行
• Verifier.exe
• 注意:
– 驱动程序验证器可能导致计算机崩溃
– 应只在用于测试和调试的计算机上运行
– 必须为管理员权限
– Windows 10 S 不包含该程序
何时使用驱动程序验证器
• 驱动程序开发阶段
• 驱动程序测试阶段
• 使用驱动程序验证器来诊断和调试计算机崩溃
如何启动和控制驱动程序验证器
• 以管理员身份运行命令verifier.exe
• 选择一个任务
– 创建标准设置
– 创建自定义设置
– 删除现有设置
– 显示现有设置
– 显示当前经过验证的驱动程序信
息
如何启动和控制驱动程序验证器
• 选择要验证的驱动程序
– 自动选择未经签名的驱动程序
– 自动选择为旧版Windows建立的
驱动程序
– 自动选择这台计算机上安装的
所有驱动程序
– 从一个列表选择驱动程序
• Verifier /standard /driver myDriver.sys
• Verifier /reset
• Verifier /querysettings
• Verifier /query
如何启动和控制驱动程序验证器
• 自定义设置
– 特殊池
• 当此选项处于活动状态时, 驱动程序验证器将从一个特殊的池中分配大多数驱动程序的内存请求。对于内存溢出、内存不足和释放后访
问的内存, 将监视此特殊池。
– 强制IRQL检查
• 当此选项处于活动状态时, 驱动程序验证器会通过使页代码无效而对驱动程序施加极大的内存压力。如果驱动程序尝试以错误的 IRQL 访
问分页内存, 或者在持有自旋锁定时, 驱动程序验证器将检测到此行为。
– 随机低资源模拟
– 池跟踪
• 当此选项处于活动状态时, 驱动程序验证器将检查该驱动程序在卸载时是否释放了其所有内存分配。这将显示内存泄漏。
– I/O验证
• 当此选项处于活动状态时, 驱动程序验证器从一个特殊的池中分配驱动程序的 irp, 并监视驱动程序的 i/o 处理。这会检测到 i/o 例程的非
法使用或不一致。
– 死锁检测
• 当此选项处于活动状态时, 驱动程序验证器将监视驱动程序使用的自旋锁定、互斥锁和快速互斥锁。这将检测驱动程序的代码是否有可
能在某一时刻导致死锁。
– DMA检查
• 当此选项处于活动状态时, 驱动程序验证器将监视该驱动程序对 DMA 例程的使用。这将检测到 DMA 缓冲区、适配器和映射寄存器的不
当使用。
– 安全性检查
– 强制挂起I/O请求
– IRP日志
– 杂项检查
• 当此选项处于活动状态时, 驱动程序验证器将查找驱动程序崩溃的常见原因, 如释放内存的处理不当。
– 堆栈的固定MDL检查
– 驱动程序的固定MDL检查
– Power框架延迟模糊处理
– 端口/微型端口接口检查
– DDI兼容性检查
– 系统低资源模拟
– DDI兼容性检查(额外)
– NDIS/WLAN验证
– 内核同步延迟模糊处理
• 此选项随机线程调度, 以帮助检测驱动程序中的并发 bug。
– VM开关验证
– 代码完整性检查
常见的驱动程序验证器冲突
• IRQL_NOT_LESS_OR_EQUAL 0xA
• PAGE_FAULT_IN_NONPAGED_AREA 0x50
• PAGE_FAULT_IN_NONPAGED_AREA 0x50
• ATTEMPTED_WRITE_TO_READONLY_MEMORY 0xBE
• SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION 0xC1
• DRIVER_VERIFIER_DETECTED_VIOLATION 0xC4
• DRIVER_CAUGHT_MODIFYING_FREED_POOL 0xC6
• TIMER_OR_DPC_INVALID 0xC7
• DRIVER_VERIFIER_IOMANAGER_VIOLATION 0xC9
调试驱动程序验证器冲突

More Related Content

Similar to 设备驱动深度测试 下

Test driven-frontend-develop
Test driven-frontend-developTest driven-frontend-develop
Test driven-frontend-developfangdeng
 
Log experience
Log experienceLog experience
Log experience宗志 陈
 
Qa engineer training
Qa engineer trainingQa engineer training
Qa engineer trainingychw365
 
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)jalamar
 
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)LetAgileFly
 
06.wls ts
06.wls ts06.wls ts
06.wls tsMeng He
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdfbj_qa
 
国内主流WAF测评报告
国内主流WAF测评报告国内主流WAF测评报告
国内主流WAF测评报告WASecurity
 
Appserv setup
Appserv setupAppserv setup
Appserv setupHt Wang
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版Kirk Chen
 
试玩前端测试的前因后果
试玩前端测试的前因后果试玩前端测试的前因后果
试玩前端测试的前因后果hahaxiaolaohu
 
试玩前端测试的前因后果
试玩前端测试的前因后果试玩前端测试的前因后果
试玩前端测试的前因后果Zhicheng Wang
 
使用 Release management 2013 進行自動化部署
使用 Release management 2013 進行自動化部署使用 Release management 2013 進行自動化部署
使用 Release management 2013 進行自動化部署Gelis Wu
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文Shuyong Lin
 
Duannian agile
Duannian agileDuannian agile
Duannian agiled0nn9n
 
敏捷测试中的工具实现
敏捷测试中的工具实现敏捷测试中的工具实现
敏捷测试中的工具实现drewz lin
 
Leverage virtualization in software test
Leverage virtualization in software testLeverage virtualization in software test
Leverage virtualization in software testdrewz lin
 
Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践drewz lin
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 

Similar to 设备驱动深度测试 下 (20)

Test driven-frontend-develop
Test driven-frontend-developTest driven-frontend-develop
Test driven-frontend-develop
 
Log experience
Log experienceLog experience
Log experience
 
Qa engineer training
Qa engineer trainingQa engineer training
Qa engineer training
 
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
 
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
 
06.wls ts
06.wls ts06.wls ts
06.wls ts
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
 
国内主流WAF测评报告
国内主流WAF测评报告国内主流WAF测评报告
国内主流WAF测评报告
 
Appserv setup
Appserv setupAppserv setup
Appserv setup
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版
 
Xpp
XppXpp
Xpp
 
试玩前端测试的前因后果
试玩前端测试的前因后果试玩前端测试的前因后果
试玩前端测试的前因后果
 
试玩前端测试的前因后果
试玩前端测试的前因后果试玩前端测试的前因后果
试玩前端测试的前因后果
 
使用 Release management 2013 進行自動化部署
使用 Release management 2013 進行自動化部署使用 Release management 2013 進行自動化部署
使用 Release management 2013 進行自動化部署
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文
 
Duannian agile
Duannian agileDuannian agile
Duannian agile
 
敏捷测试中的工具实现
敏捷测试中的工具实现敏捷测试中的工具实现
敏捷测试中的工具实现
 
Leverage virtualization in software test
Leverage virtualization in software testLeverage virtualization in software test
Leverage virtualization in software test
 
Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 

设备驱动深度测试 下