Windows 驱动程序模型: Windows 7 新特性 11/21/2018 8:25 PM Windows 驱动程序模型: Windows 7 新特性 Eliyas Yakub 首席开发经理 US-Device & Storage Technologies@Dev © 2006 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.
议程 WDF 1.9支持的平台 用户模式驱动架构 内核模式驱动架构 WDF在哪里? 附加资源和立即行动 UMDF 1.9 新特性 新的示例 KMDF 1.9新特性 WDF在哪里? 附加资源和立即行动
之前的WDF 版本 KMDF UMDF v 1.9 v 1.7 v 1.5 V 1.1 v 1.0 v 1.9 v 1.7 v 1.5 In-box Windows 7 Down-level support for Windows 2000, XP, Server 2003, Vista, Server 2008 v 1.7 In-box Windows Vista SP1/Server 2008 Down-level support for Windows 2000, XP, Server 2003 & Vista Client RTM v 1.5 In-box Windows Vista Down-level support for Windows 2000, XP, Server 2003 V 1.1 Supported on Windows 2000, XP, Server 2003 v 1.0 Supported on Windows XP, Server 2003 UMDF v 1.9 In-box Win7 Down-level support for Windows XP, Server 2003, Vista, Server 2008 v 1.7 In-box Windows Vista SP1/Server 2008 Down-level support for Windows XP, Server 2003, and Vista Client RTM v 1.5 In-box Windows Vista Down-level support for Windows XP v 1.0 Release for Windows Media Player 11
KMDF 应用 应用效果很好 微软提供的驱 动: ~50 第三方提供的 驱动: ~300 v1.9 (Win7) v1.5 and v1.7 Bus Drivers: HD Audio, UMBUS, VMBUS Function Drivers: Processor, SD storage, WinUSB, Media Center IR Remote, Tablet PC Digitizer, Xbox controller Filter Drivers: Monitor, UMPass, MS Keyboard Non PnP Drivers: PEAuth v1.9 (Win7) CDROM Bluetooth 1394 UltraWide USB NDIS-WDF miniports Virtual storage bus drivers 应用效果很好 微软提供的驱 动: ~50 第三方提供的 驱动: ~300
UMDF 应用 应用正在增长 方向是正确的 更多的复杂堆栈 更多的核心使用 场景 1.0 WMP 11 Media Players 1.5 and 1.7 Vista/Server 2008 Smart-phones (WinCE & Nokia) Sideshow devices TS (device redirection) 1.9 Win7 Smartcard Readers Personal Storage Sensor Platform Biometrics Multi-Touch Input 应用正在增长 方向是正确的 更多的复杂堆栈 更多的核心使用 场景
UMDF 1.9的变化
电源管理改进 问题: UMDF 驱动在空闲状态下不能自动掉电,被使用唤醒,或者 唤醒系统 使用场景: 非USB总线驱动,USB驱动有着比WinUSB更加复杂的空闲 和唤醒逻辑 解决方案: UMDF 1.9 支持空闲检测,支持Sx 到S0状态苏醒 IWDFDevice2::AssignS0IdleSettings() IWDFDevice2::AssignSxWakeSettings() IWDFDevice2::StopIdle() and ResumeIdle() 同WinUSB协同工作支持选择性挂起
USB 连续读取器 问题: 从USB 管道手动读取多个信息包是困难的 使用场景: USB驱动从整块或者不连续的管道读取流信息 解决方案: 增加USB连续读取器以支持UMDF IWDFUsbTargetPipe2::ConfigureContinuousReader() to configure Callback interfaces are IUsbTargetPipeContinuousReaderCallbackReadComplete and IUsbTargetPipeContinuousReaderCallbackReadersFailed 错误处理行为稍有不同 UMDF 在错误发生时只做通道重置,而不是设备重置(WinUSB 的限制) 请查看Fx2 驱动示例
虚拟串口支持 问题: 不能建立类似串口的UMDF驱动 使用场景: 映射一个新的设备给需要串口的客户端 使用场景: 映射一个新的设备给需要串口的客户端 解决方案: 添加一个虚拟串口示例,解决我们遇到的问题 新的UMDF支持 IWDFDevice2::CreateSymbolicLinkWithReferenceString() 允许一个驱动列举多个端口以消除 \\.\COM1 和\\.\COM2 之间的链接 支持IRP_MJ_QUERY_INFORMATION, SET_INFORMATION 和 FLUSH_BUFFERS 新的 WDF_REQUEST_TYPEs 通过配置可以支持查询反馈和通过默认I/O接收 扩展了为遗留设备配置的注册表入口
扩展的注册表入口和写入权限 问题: UMDF 驱动以本地服务的方式运行所以对系统储存档的很多部分不能写入 使用场景 属性存储接口只允许设备的硬件标识写入 使用场景 驱动需要在他们的软件或者设备接口标识中读写数据 像串口驱动需要在遗留设备硬件表中写入数据 (HKLM\HARDWARE\DEVICEMAP) 解决方案: IWDFPropertyStoreFactory 允许驱动建立属性存储接口 硬件,软件或者设备接口标识 遗留硬件表子键
直接I/O 问题: UMDF驱动的吞吐量由于缓冲复制,所以是被CPU的性能所限制的 使用场景: 驱动执行大数据量传输 通过IWDFDeviceInitialize2::SetIoTypePreference() 可以允许读写和IOCTLs的独立性 在一个堆栈的驱动必须一致否则要回到老的模式 (因为直接传输增加了一个安全隐患) 缓冲请求一直都是缓冲模式 Driver 指定一个偏好, 而不是绝对切换 UMDF 将会决定每一个请求是复制还是直接映射缓冲区 DirectTransferThreshold 注册表项可以被修改 (每个设备) 只有整个页面被映射—在缓冲区开始和结束的部分页面还是被复制
支持内核模式终端 问题: UMDF 不能被放置在内核模式驱动之下或者从内核终端接收 解决方案: 驱动包可使用UmdfKernelModeClientPolicy INF 指令允许一个内核模式终端 支持 用户模式以上的驱动(在WUDFRd以上加载的驱动) 内核模块打开设备发送I/O 处理格式化的读/写/IOCTL IRPs 缓冲区必须模拟I/O manager 的存放地址—一个带有MDL的缓冲模式IOCTL不能正常工 作 不支持内部IOCTLs 每个请求需要一个file-object 这种模式需要一个UM驱动在内核模式驱动之下 或者有经验的驱动开发者了解驱动的行为而且充分的测试过组合的效果
新 UMDF 示例 Virtual serial sample %winddk%\src\general\ VirtualSerial WpdBasicHardwareDriver %winddk%\src\wpd WpdServiceSampleDriver WpdMultiTransportDriver USBFx2 IdleWake as PPO %winddk%\src\usb\umdfusbfx2\ fx2_driver\IdleWake USBFx2 IdleWake through WinUSB LocationAndSensors %winddk%\src
KMDF 1.9的改变
有保证的转送进程 问题: 因为WDFREQUEST对每个I/O的运行时分配在关键I/O路径 中不能使用KMDF 使用场景: 存储设备驱动 使用场景: 存储设备驱动 解决方案: 对每个I/O资源提供预配置和初始化WDFREQUESTs和其他 的能力 WdfIoQueueAssignForwardProgressPolicy(Queue, Policy) 只针对最高优先级查询– 从系统架构直接发出的I/O查询
计数查询 问题: 没办法限制从并行查询发送出来的请求数量 使用场景: 只能同时处理N个请求的设备 问题: 没办法限制从并行查询发送出来的请求数量 使用场景: 只能同时处理N个请求的设备 解决方案: 在并行查询内提供新的选择可设置请求的数量 typedef struct _WDF_IO_QUEUE_CONFIG { ULONG NumberOfPresentedRequests; } WDF_IO_QUEUE_CONFIG
队列同步 问题: 查询从设备对象继承同步范围和执行层次, 这意味 着不管他们是否需要所有的查询有着相同的限制 问题: 查询从设备对象继承同步范围和执行层次, 这意味 着不管他们是否需要所有的查询有着相同的限制 解决方案: 允许每个查询有自己的限制而且关联他们到各有的 timer, DPC, 或者work item 文件对象可以成为查询的父类
请求取消 问题: 如果IRP已经被取消WdfRequestMarkCancelable 直接调用取消流程 如果这个调用使用了锁而且取消流程也试图访问同一个锁 就会引起死锁 解决方案: 新DDI 返回STATUS_CANCELED 如果 IRP已经被取消 (Irp->Cancel 标志位被设置) 而不 是调用取消流程 WdfRequestMarkCancelableEx
转送I/O到子设备 问题: 不能从PDO查询转送请求到父FDO查询 使用场景: 基于协议设备的总线驱动从子堆栈发送I/O到父堆 栈而得到设备 USB, 1394, Bluetooth 解决方案: 新DDI允许从子设备队列转送I/O到父设备队列 WdfRequestForwardToParentDeviceIoQueue 当建立PDO时子设备必须通知系统架构 WdfPdoInitAllowForwardingRequestToParent
计时器功能 问题: 计时器回调永远在DISPATCH_LEVEL. 驱动需要加入一个work item到队 列中达到PASSIVE_LEVEL. 使用场景: 使用计时器的驱动需要存取页面代码和数据 解决方案: 在调用WdfTimerCreate时设置WdfExecutionLevelPassive 使回调 达到PASSIVE_LEVEL 限制: 只允许一个短时间计时器。不能用在周期性计时器 可合并计时器 – 新功能 通过设置Ability to specify TolerableDelay以延迟计时器的计时时间操作系统 可以合并多个过期的计时器 支持动态深度掉电和增加空闲状态电力使用效率 在Windows 7上被支持
PnP ContainerID 问题: 多功能设备对于每个功能只有一个或多个devnodes,当前没有一个机制 把这些功能绑定在一起 使用场景: 多功能设备 解决方案: 使用ContainerID为每个设备的devnodes分组 IContainerID 是唯一的用来建立单一物理设备而且对于同一个物理设备的 devnodes是一致的 总线驱动是支持多功能的而且可以分配ContainerIDs给被枚举时的子 devnodes WdfPdoInitAssignContainerID ContainerIDs 通常使用总线机制从硬件读取例如Microsoft OS descriptor
支持64+ 处理器 64位版本的Windows 7支持超过64个逻辑处理器 允许驱动全面使用超过64个处理器, 一个新的DDI 指定中断优先级, 处理器亲和, 亲和策略, 和指定中 断的处理器组 WdfInterruptSetExtendedPolicy( WDFINTERRUPT Interrupt, PWDF_INTERRUPT_EXTENDED_POLICY PolicyAndGroup); typedef struct _WDF_INTERRUPT_EXTENDED_POLICY { WDF_INTERRUPT_POLICY Policy; WDF_INTERRUPT_PRIORITY Priority; GROUP_AFFINITY TargetProcessorSetAndGroup; }
其他改进 安全性 性能 WDF 检验器 队列的I/O 分发流程在关键区域调用以避免线程悬挂引起 的拒绝服务 I/O 路径被优化以减少CPU负载 WDF 检验器 驱动校验器& 系统架构校验器 新的校验器功能捕获 IRQL 泄露 增加的校验器校验只针对1.9 终端
其他改进 修改大量bug解决边界情况 Co-installer 改进 Pnp/Power, Queue, I/O target, UsbTarget (continuous reader) Co-installer 改进 增强诊断和错误恢复 减小文件大小
其他改进 调试和诊断 PREfast 和Static Driver Verifier的改进 更好的跟踪增强了诊断 新的和更新的调试器扩展 在minidumps中的 Logdumps PREfast 和Static Driver Verifier的改进 DDIs的可扩展SAL和PFD注解 新 SDV 规则
KMDF 示例 Bluetooth sample (Windows Server 2008) CDROM Consumer IR receiver sample driver (smscir) WDM samples 移植到 KMDF PortIo MouFiltr RTM之前 已有的示例将被更新以支持新功能 一些示例将被增加
WDK中WDF在哪里? 示例 可再发行的 co-installers: %wdkroot%\redist\ TMF 文件 调试器扩展 工具 示例被移动到相关技术的文件夹 可再发行的 co-installers: %wdkroot%\redist\ TMF 文件 %wdkroot%\tools\tracing\<arch>\wdf01009.tmf %wdkroot%\tools\tracing\<arch>\Wudf01009.tmf 调试器扩展 %wdkroot%\bin\<arch>\Wdfkd.dll %wdkroot%\bin\<arch>\WudfExt.dll 工具 %wdkroot%\ tools\WDF\<arch>\Wdfverifier.exe %wdkroot%\ WDFTester\<arch>\Wdftester.exe
停止Windows 2000 支持 KMDF 1.9 将会是最后一个支持Windows 2000的版本
立即行动 阅读WDF 书籍 立即在1.9下测试你的UMDF 和KMDF 驱动 使用新的示例和调试工具 在新版本发布前不要发行 立即报告任何兼容性问题 使用新的示例和调试工具 使用UMDF 或 KMDF 制作你的下一个驱动 告诉我们是什么阻止你这么做 您的反馈会影响我们对未来的计划 发送您的反馈 wdfinfo@microsoft.com
附加资源 网络资源Web resources WDF 书籍 查看最新关于如何制作总线驱动的文章: http://www.microsoft.com/whdc/driver/wdf/KMDFBusDrv.mspx 博客 http://blogs.msdn.com/doronh/default.aspx (A Hole In My Head) http://blogs.msdn.com/peterwie/default.aspx (Pointless Blathering) http://blogs.msdn.com/iliast/default.aspx (driver writing != bus driving) 新闻组和列表 Microsoft.public.device.development.drivers OSR NTDev Mailing List WDF 书籍 Developing Drivers with the Windows Driver Foundation http://www.microsoft.com/MSPress/books/10512.aspx
本地化参考资源 网络资源 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.