Adam Shapiro Senior Program Manager US-Networking Core PM

Slides:



Advertisements
Similar presentations
Web Role 的每台虚机运行有 IIS ,用于处理 Web 请求 Worker Role 用于运行后台进程 Cloud Service 是什么? 支持多层架构的应用容器 由多个 Windows 虚拟机集群构成 集群有两种类型: Web 和 Worker Cloud Service 做什么 进行应用的自动化部署.
Advertisements

应用技术 陕西华辉科技有限公司.
泛舆情管理平台 ——助力媒体业务创新 新模式 新格局 创新盈利增长点 2/26/2017 1:59 AM 屈伟: 创始人,总裁
中国银行业前置端操作系统移植研究.
3/3/ :01 PM © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered.
请点击以下链接下载WinHEC的演讲材料
借助公有云实现游戏的弹性运营 Shaun Fang (方兴) Azure开发技术顾问
Windows Hyper-V与集群共享卷
请点击以下链接下载WinHEC的演讲材料
Eliyas Yakub 首席开发经理 US-Device & Storage
1. 设定愿景,确定业务场景 Microsoft Corporation
广东省广州市花都区教育局教研室 汤少冰 优化评估方式, 促进中学英语的教与学 广东省广州市花都区教育局教研室 汤少冰
張書源 Microsoft MVP MCT 趨勢科技 技術經理 網酷科技 資深顧問 集英信誠 資深顧問
Office 2013 全新功能介紹 台灣微軟 Office 大使 楊承恩 Marcus Microsoft Office
講師姓名:黃信嘉、黃振宇 職稱:微軟技術支援副理 公司名稱:台灣微軟 課程代碼:WCL305
四川省集体林权流转平台 中国西部林权交易网
全国信息技术标准化技术委员会 (SAC/TC28)工作交流
Windows 10 混合现实 Mingfei Yan 高级项目经理
Benjamin Armstrong 高级项目经理 微软
W371 如何使网络设备更好的和Windows Vista工作
MBL 340 Tablet PC SDK:在您的应用程序中使用数字墨水
今天很高兴能够利用Web Cast和大家讲解嵌入式XP的新增功能。
什麼是電子軟體下載 Electronic Software Download (ESD).
OFC 302 InfoPath2007新特性及解决方案.
最新 Windows Server 徽标 要求和计划
Windows Mobile 轻松接轨GPS
Microsoft Office SharePoint Server 2007 事件追蹤與專案管理
Windows 驱动程序模型: Windows 7 新特性
SOLUTIONACCELERATORS Windows Vista Hardware Assessment 1
MSG 321 统一消息架构和PBX集成.
朝雲端專業DBA邁進: 深入剖析 Windows Azure SQL Database 完整資料庫管理、雲端報表建立、建置分散式雲端資料庫
利用最新Hyper-V Replica 功能達成Hyper-V 災難備援機制
Windows Server 2008 NAP整合802.1x網路安全控管
互聯網安全資訊 助您達至更安全的網上體驗.
服務啟用、導入流程、 郵件移轉步驟簡介 Microsoft Office 12/2/2018
MBL 325 开发跨平台的 Windows Mobile应用程序
MBL 327 Windows Mobile开发中的异构系统集成
Cameron Brodeur Program Manager US-Device & Storage PM
David Edfeldt Senior Program Manager Windows Logo Program
构建 Windows TV Tuner 产业 生态环境的重要观点
1/2/ :39 PM 讀經 以弗所書 4:31-32 © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may.
1/2/ :38 PM 耶利米書 33:1-3 約翰福音 14:12-14 © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names.
使徒行傳 21:17-23章「保羅的見證(一)」 引言 預言保羅為主的名受許多的苦難的實現
2/24/2019 5:40 AM © 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered.
Exchange 2007 系統部署 -- 儲存預測與測試
教师课堂教学能力提升培训 ---“互联网+教育”考勤小测验 Plickers 洛阳理工学院
利用 ASP.NET MVC 提升您的 Web 應用程式


橫跨電腦、手機與軟體的全方位端點管控解決方案
请点击以下链接下载WinHEC的演讲材料
CON223 UDDI:服务的发现和搜索.
呂政周 精誠恆逸教育訓練處 資深講師 Windows PowerShell 呂政周 精誠恆逸教育訓練處 資深講師
使用WPF创建Windows应用和Web应用
水深之處 Launch Out into the Deep
4/30/2019 7:40 AM 約翰福音 15:9;17:20-23 加拉太書 6:1-2 © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product.
DEV 343 VS2005超快速开发方案/EEP2006控件包.
5/4/2019 4:42 PM © 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered.
使徒行傳 24-26章 [ 保羅的見證(二)] 徒9:15 “  主 對 亞 拿 尼 亞 說 、 你 只 管 去 . 他 是 我 所 揀 選 的 器 皿 、 要 在 外 邦 人 和 君 王 並 以 色 列 人 面 前 、 宣 揚 我 的 名 。 ”]
TechEd /6/ :36 PM © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks.
Windows 徽标计划工具:综述与发展趋势
5/5/2019 7:06 PM 两跨框架梁截面配筋图的绘制 © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may.
百万亿次超级计算机诞生记 姓名 Xiangyu Ye 职务 微软中国技术中心资深HPC顾问 公司 微软中国
5/15/2019 姓名: 公司名称: 云赛空间BP模板 Now let’s take a look at who we are, what we’re doing and why we’re doing it in China... This is an image of a technology.
DEV 343 VS2005超快速开发方案/EEP2006控件包.
MGT 213 System Management Server的昨天,今天和明天
如何让驱动程序在 Windows 平台上可用
Bob Combs Lead Program Manager Microsoft Corporation
Ron Jacobs 高级技术专员 Microsoft
Windows Workflow Foundation CON 230
Presentation transcript:

Adam Shapiro Senior Program Manager US-Networking Core PM 在驱动程序开发中 使用静态分析工具 Adam Shapiro Senior Program Manager US-Networking Core PM

议程 静态分析工具 Static Driver Verifier (SDV) 总结 什么是静态分析? 静态分析工具的优点 3/19/2017 8:00 AM 议程 静态分析工具 什么是静态分析? 静态分析工具的优点 下一版Windows将有哪些更新? PREfast for Drivers (PFD) 核心的PREfast代码注解(annotations) Static Driver Verifier (SDV) RoleTypes 总结

什么是静态分析? 源代码的编译期间分析 检查对定义完善的限制条件的违反 类似于代码走查, 但由工具来完成 一个简单的例子就是编译期间的类型检查 检查对定义完善的限制条件的违反 过程调用约定和API约定

由静态检查工具发现的代码错误示例 f()要求p不为NULL: 重复结束同一个IRP: p = NULL; … f(p); IoCompleteRequest (Irp); ...

为什么使用静态分析? 低级代码错误! 经验法则 “如果有一个缺陷在程序员的桌面上修正要花1美元, 那么一旦这个缺陷已经被集成到完成的程序中,将 需要100美元来修正,如果在软件被应用部署之后 才发现这一缺陷,代价将达到数万美元。” “Building a Better Bug Trap” — The Economist June 2003

工具可以提高你的效率 按钮技术 100%的路径覆盖率 尽早发现缺陷 缺陷报告容易使用 成本低(让计算机帮你做) 快速 (计算机在几分钟或几小时内完成几个星期的人力工作) 尽早发现缺陷 甚至在拿到硬件设备之前 在设计测试用例之前 在平常写代码的时候 缺陷报告容易使用 在源代码中直接给出缺陷路径(或者是关键点),降低调试代码的成 本

静态分析 如何工作? 建立一个驱动的抽象模型,沿着所有路径完整检查执行代码 跟驱动程序近似 抽象模型更简单:被简化了… 简化到能够完整检查(模拟)的程度 跟驱动程序近似 控制部分保持一致 保留所有路径并同等对待 数据状态是近似的 如果参数x无约束条件, 假定一切值都是可能的。 如果(x>0)在测试点是成立的, 维护布尔值(x>0), 而不是x的整数值:布尔值比整数值更简单 If (x > 0) { IoCompleteRequest (Irp); }

静态检查工具 不是银弹 不是替代功能测试 针对违反定义良好的约束条件 局限性 是个好用的工具 不可能知道所有会发生错误 算法是基于源代码的抽象和启发 结果可能是错误的肯定和错误否定 是个好用的工具

静态分析工具比较 PREfast for Drivers Static Driver Verifier 驱动模型 语言 发现的问题 范围 任意 WDM KMDF NDIS 语言 C和C++ 只支持C 发现的问题 本地的缺陷 易于修正 大规模 全局的缺陷 难以修正 小规模 范围 进程级 本地的违例 进程间 发现深层错误 开发周期 早期使用: “编译驱动的时候” 运行仅需几分钟,所以请经常运行 后期使用: “驱动基本结构成形的时候” 定期运行, 修正错误后运行 KMDF验证平均需时 = 20 min WDM验证平均需时= 40 min

两种静态分析工具并用 WDK中提供的两种互补技术 PREfast for Drivers: 在每个进程中深度分析可能的违例 Static Driver Verifier: 延执行路径,跨进程间的边界

两种静态分析工具并用 示例 X X ReadFoo ( PIRP Irp ) { ... status = Bar (Irp); if (status) { IoCompleteRequest(Irp); } ReadFoo ( PIRP Irp ) { PIRP p = NULL; ... if (status) { IoCompleteRequest(p); } X X Bar ( PIRP Irp ) { ... IoCompleteRequest(Irp); return STATUS_SUCCESS; }

PFD有什么更新? 微软内部推动 “PFD Clean” 内部引擎的改进 表达式的范围更广 更好的注解错误检查 Windows 7 – Microsoft拥有的内置驱动和WDK范例完全通过PFD 微软的驱动和WDK的公共头文件都有注解 内部引擎的改进 表达式的范围更广 支持常量, 成员名字, 无副作用的C表达式 更好的注解错误检查 WDK中包含部分微软自动代码检查(OACR)

SDV有什么更新 内置驱动和 WDK KMDF, WDM范例通过SDV 针对NDIS的SDV – 和NDIS组无缝的合作 针对WDM和KMDF的扩展规则集 可靠性, 安全性, IRQL, 同步, 正确的对象创建规则 WDM, KMDF, 和NDIS驱动的角色类型 先决条件规则 进入前验证 引擎改进 改进性能,伸缩性和准确性 特别地,所有规则都减少NUR (无用结果)

驱动的PREfast 快速(典型情况是2–5倍的编译耗时) 发现大量的“疏忽” 错误和“硬” 错误 应用于可编译的代码; 无需运行

PREfast for Drivers PREfast无法发现的一些错误 Null指针, 未初始化的变量 (延非常规路径) 本地的泄漏 (内存, 资源) 不匹配的参数 未检查返回值 格式/列表不匹配 一些IRQL的误用 容易忽略的各种特殊情况 例如,取消IRQL 回调/函数指针的恰当使用

问题: 驱动特有的资源泄露 void LeakSample(BOOLEAN Option1) { 问题: 驱动特有的资源泄露 void LeakSample(BOOLEAN Option1) { NTSTATUS Status; KIRQL OldIrql; BufInfo *pBufInfo; KeAcquireSpinLock(MyLock,&OldIrql); //... if (Option1) { pBufInfo = ExAllocatePoolWithTag(NonPagedPool, sizeof(BufInfo), 'fuB_'); if (NULL==pBufInfo) { return STATUS_NO_MEMORY; } KeReleaseSpinLock(MyLock, OldIrql); return STATUS_SUCCESS; //… #include <wdm.h> PKSPIN_LOCK MyLock; typedef struct { char buff[100]; } BufInfo;

应用PFD: 驱动特有的资源泄露 void LeakSample(BOOLEAN Option1) { NTSTATUS Status; KIRQL OldIrql; BufInfo *pBufInfo; KeAcquireSpinLock(MyLock,&OldIrql); //... if (Option1) { pBufInfo = ExAllocatePoolWithTag(NonPagedPool, sizeof(BufInfo), 'fuB_'); if (NULL==pBufInfo) { return STATUS_NO_MEMORY; } KeReleaseSpinLock(MyLock, OldIrql); return STATUS_SUCCESS; //… #include <wdm.h> PKSPIN_LOCK MyLock; typedef struct { char buff[100]; } BufInfo; warning 8103: Leaking the resource stored in 'SpinLock:MyLock‘.

解决: 驱动特有的资源泄露 void LeakSample(BOOLEAN Option1) { 解决: 驱动特有的资源泄露 void LeakSample(BOOLEAN Option1) { NTSTATUS Status; KIRQL OldIrql; BufInfo *pBufInfo; KeAcquireSpinLock(MyLock,&OldIrql); //... if (Option1) { pBufInfo = ExAllocatePoolWithTag(NonPagedPool, sizeof(BufInfo), 'fuB_'); if (NULL==pBufInfo) { KeReleaseSpinLock(MyLock, OldIrql); return STATUS_NO_MEMORY; } return STATUS_SUCCESS; //… #include <wdm.h> PKSPIN_LOCK MyLock; typedef struct { char buff[100]; } BufInfo;

为什么要注解? 好的工程操作 精确描述你建造的“部件” 和它代表的约定 使能自动检查 告诉工具其无法推论的东西 有效的(检查过) 文档 使能自动检查 告诉工具其无法推论的东西 有效的(检查过) 文档 程序员无需猜测/试验 代码和文档不会渐行渐远 注释虽好, 但…

注解的好处 记录和表达约定 自动检查: “低级的” 代码错误 开发人员知道其约定 此约定好不好? 代码错误越早发现, 代价越小 注解代码和无注解代码相比,发现更多代码错误(及更少的 干扰) 代码进入测试阶段时携带更少 “简单”错误 大大提高测试效率—在发现/修正简单错误上浪费的时间 少了

例 注解 wchar_t * wmemset( __out_ecount(s) wchar_t *p, __in wchar_t v, 例 注解 wchar_t * wmemset( __out_ecount(s) wchar_t *p, __in wchar_t v, __in size_t s); __in: 此参数为函数输入 __out: 此参数为函数输出 __out_ecount(s): 此参数为共s项的缓冲区 如果参数p的元素少于s个, PFD给出警告

注解 __in_opt, __out_opt… NTKERNELAPI BOOLEAN IoIs32bitProcess(     __in_opt PIRP Irp     );

SDV规则 SDV携有 每一个规则应对一个接口规则的一个方面 规则用类C语言写成并定义 86个WDM规则 75个KMDF规则 39个NDIS规则 每一个规则应对一个接口规则的一个方面 规则用类C语言写成并定义 状态声明—以C风格的变量的形式 事件—与DDI函数关联

例 I/O System Driver Irp Device Driver Interface Callback IoCompleteRequest Driver I/O System Callback

例 X I/O System Driver Irp Device Driver Interface Callback IoCompleteRequest Driver I/O System X Callback

验证“三明治” 测试框架 用回调驱动 c1 c2 c3 c4 c5 c6 c7 c8 c9 无角色类型 c1 c2 c3 c4 c5 c6 有角色类型 KMDF驱动 KMDF 和WDM桩

角色类型声明 函数类型定义 使能对驱动中特定回调的识别 SDV是一个回调驱动验证工具 关于角色类型的列表,请参考MSDN的WDK文档 纯C声明, 非代码注解语言 (SAL) 注解 客户驱动可以用它来帮助静态分析工具识别函数和驱动模型相关的特 别的角色 使能对驱动中特定回调的识别 SDV是一个回调驱动验证工具 关于角色类型的列表,请参考MSDN的WDK文档 KMDF有160 个 WDM 有60 个 NDIS有40 个

KMDF UsbSamp驱动中的 角色类型 DRIVER_INITIALIZE DriverEntry; EVT_WDF_DRIVER_DEVICE_ADD UsbSamp_EvtDeviceAdd; EVT_WDF_DEVICE_PREPARE_HARDWARE UsbSamp_EvtDevicePrepareHardware; EVT_WDF_DEVICE_RELEASE_HARDWARE UsbSamp_EvtDeviceReleaseHardware; EVT_WDF_DEVICE_FILE_CREATE UsbSamp_EvtDeviceFileCreate; EVT_WDF_IO_QUEUE_IO_READ UsbSamp_EvtIoRead; EVT_WDF_IO_QUEUE_IO_WRITE UsbSamp_EvtIoWrite; EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL UsbSamp_EvtIoDeviceControl; EVT_WDF_REQUEST_CANCEL UsbSamp_EvtRequestCancel; EVT_WDF_REQUEST_COMPLETION_ROUTINE SubRequestCompletionRoutine; EVT_WDF_REQUEST_COMPLETION_ROUTINE ReadWriteCompletion;

静态分析能… 商业的情况 开发工作的情况 减少昂贵的部署后代码错误的风险 减少上市所需时间 减少代码检查和测试的代价 提高代码质量 达到更广的测试覆盖面 开发工作的情况 更早的发现和防治代码错误 更直接更明显 发现和防治“难测”的代码错误 使你的工作更高效

立即行动 尽早,经常运行静态分析工具 作为补充用调试器找出运行时问题的补充,请使用 静态分析工具 明智使用静态分析工具! 特别是在改动驱动之后 作为补充用调试器找出运行时问题的补充,请使用 静态分析工具 明智使用静态分析工具! 它不知道所有可能的错误 它不使测试可有可无 错误的肯定和错误的否定有可能误导 静态分析工具使测试完整

附加资源 WHDC网站的白皮书 PREfast 一步一步 http://www.microsoft.com/whdc/DevTools/tools/PREfast_steps.mspx PREfast 注解 http://www.microsoft.com/whdc/DevTools/tools/annotations.mspx C++驱动代码中如何使用函数的typedef来改进PREƒast结果 http://go.microsoft.com/fwlink/?LinkId=87238 博客: http://blogs.msdn.com/staticdrivertools/default.aspx MSDN上的PREfast for Drivers in WDK文档 http://msdn.microsoft.com/en-us/library/aa468782.aspx 用Windows Driver Foundation开发驱动,第23章 http://www.microsoft.com/MSPress/books/10512.aspx E-mail sdvpfdex @ microsoft.com

本地化参考资源 网络资源 Windows 硬件开发者网站 http://www.microsoft.com/China/WHDC https://winqual.microsoft.com Windows 媒体中心中文网站: http://www.microsoft.com/china/windows/products /winfamily/mediacenter/default.mspx Windows徽标计划中文技术论坛 http://forums.microsoft.com/china/ShowForum.aspx ?ForumID=2150&SiteID=15 Windows徽标流程问题联系 HICWHQL@microsoft.com

© 2008 Microsoft Corporation. All rights reserved © 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.