通过-Windows-驱动程序框架编写驱动程序课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《通过-Windows-驱动程序框架编写驱动程序课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通过 Windows 驱动程序 框架 编写 课件
- 资源描述:
-
1、议程IO 处理硬件交互即插即用和电源交互WDF 究竟是什么? 概括了底层操作系统内部的复杂情况实现了代码少于 20 行的驱动程序在不同的设备类上保持一致如 GPIO、UART、I2C、NFC、传感器驱动程序内置框架活动日志记录驱动程序分析专用工具支持用户模式和内核模式跨大多数设备类的 1000 个驱动程序原始 UMDF v1 基于 C+ COM崩溃的驱动程序仅影响托管进程,而不影响整个系统重启策略可以恢复已崩溃的 UMDF 驱动程序WDF 可在整个通用平台上使用驱动程序工作流驱动程序初始化硬件准备I/O 请求处理硬件交互驱动程序清理即插即用/电源交互驱动程序工作流驱动程序初始化硬件准备I/O
2、请求处理硬件交互驱动程序清理即插即用/电源交互对象是 WDF 的基础框架中的一切都由对象表示(驱动程序、设备、队列等)对象具有方法、事件和属性对象通过 WdfDeviceGetDriver 等方法中的句柄访问WDFOBJECT方法属性事件在对象上运行的 WDF 函数可以从中注册回调可通过 get/set 方法访问的单个值自动对象生命期管理WDF 管理对象的分配和释放维持父/子层次结构如,当客户端完成 WDF 请求时,它会自动删除 WdfRequestCompleteWithInformation( Request, STATUS_INVALID_DEVICE_REQUEST, (ULONG_P
3、TR) 0 );驱动程序(WDFDRIVER)设备(WDFDEVICE)设备(WDFDEVICE)队列(WDFQUEUE)队列(WDFQUEUE)对象上下文驱动程序工作流驱动程序初始化硬件准备I/O 请求处理硬件交互驱动程序清理即插即用/电源交互硬件准备事件获取硬件资源、进行一些静态配置(PrepareHardware)实现中断(InterruptEnable)进入通电状态(D0Entry)准备硬件NTSTATUS OnPrepareHardware( WDFDEVICE Device, WDFCMRESLIST ResourcesRaw, WDFCMRESLIST ResourcesTran
4、slated ) int ResourceCount = WdfCmResourceListGetCount( ResourcesTranslated ); for (i=0; i Type) case CmResourceTypePort: case CmResourceTypeMemory: case CmResourceTypeInterrupt: default: break; return STATUS_SUCCESS;获取硬件资源、进行一些静态配置(PrepareHardware)实现中断(InterruptEnable)进入通电状态(D0Entry)设备通电NTSTATUSOnD
5、0Entry( IN WDFDEVICE Device, IN WDF_POWER_DEVICE_STATE RecentPowerState ) PADXL345AccDevice pAccDevice = nullptr pAccDevice = GetContext(Device); WdfWaitLockAcquire(pAccDevice-m_WaitLock); I2CSensorWriteRegister(pAccDevice-m_I2CIoTarget, MY_REGISTER, MY_VALUE, sizeof(MY_VALUE) ); WdfWaitLockRelease(
6、pAccDevice-m_WaitLock); pAccDevice-m_PoweredOn = true; return STATUS_SUCCESS;获取硬件资源、进行一些静态配置(PrepareHardware)实现中断(InterruptEnable)进入通电状态(D0Entry)实现中断NTSTATUS OnInterruptEnable( IN WDFINTERRUPT Interrupt, IN WDFDEVICE Device) PDEVICE_EXTENSION devExt; ULONG regUlong; PULONG intCsr; devExt = GetDevice
7、Context(WdfInterruptGetDevice(Interrupt) ); intCsr = &devExt-Regs-Int_Csr regUlong = READ_REGISTER_ULONG( intCsr ); WRITE_REGISTER_ULONG( intCsr, regUlong ); return STATUS_SUCCESS;获取硬件资源、进行一些静态配置(PrepareHardware)实现中断(InterruptEnable)进入通电状态(D0Entry)按需扩展EvtIoResumeEvtDMAEnablerFillEvtDeviceSelfManaged
展开阅读全文