
Windows Driver
文章平均质量分 62
cyx1231st
这个作者很懒,什么都没留下…
展开
-
chapter 9.1: I/O targets
WDF对象,表示了目标设备:UMDF/KMDF driver, 和其他KM driver支持的操作: 1.格式化请求 2.target的PnP/Power state 3.请求及控制target和request完成:支持同步及非同步完成操作。默认I/O target默认是下一层的驱动。I/O target对象是设备对象的子对象。原创 2013-04-01 23:22:23 · 617 阅读 · 0 评论 -
chapter 8.10:self-managed I/O
不和queued I/O请求power management,或必须和设备站同步操作的请求:如Pcidrv例子的timer,或驱动在启动或关闭设备的特定时间点需要与驱动联系。例子:Timer原创 2013-04-01 23:18:43 · 824 阅读 · 0 评论 -
chapter 4.4: WDF架构介绍
WDF架构协调了driver和windows之间,以及driver和它的device之间的交互。WDF架构有两个实现:KMDF和UMDF应用程序应用程序使用WDFdriver方式和WDM一致:获得device handle,通过windows api想device发送请求。UMDF driver不一致的地方:虽然允许所有3种I/O模式,但是无法提供对clie原创 2013-03-03 01:10:44 · 1033 阅读 · 0 评论 -
chapter 4.1: Framework介绍
core WDF features:提供objects:driver,device,I/O request objectsdriver通过良好的接口访问objectsframework管理object的生命周期、跟踪并可删除objectframework实现了状态机来管理PnP,powermanager,同步,I/O quest,注册表访问,取消请求framework管理来自windo原创 2013-03-03 00:32:16 · 331 阅读 · 0 评论 -
chapter 4.3: KMDF介绍
KMDF:kernel mode编程模型,支持filter, function, bus driver的开发。framework本身提供了可重入的库函数driver在运行时动态绑定这些库函数,所以可以提供framework版本支持。可开发的驱动:PnP device的function driverPnP device的filter driverPnP device stack的原创 2013-03-02 20:01:02 · 630 阅读 · 0 评论 -
chapter 4.7: WDF的device和driver支持
UMDF支持的设备UMDF支持protocal-based or serial bus-based devices(USB device),32或64皆可: 1.Portable devices 2.USB devices,除了isochronous deivice 3.Auxiliary display,video devices*主要是一些可以直接连接、网原创 2013-03-03 22:11:59 · 535 阅读 · 0 评论 -
chapter 4.6: KMDF子架构
KMDF 子结构的组件包括framework, KMDF drivers,其他driversThe FrameworkKMDF是一个runtime component而UMDF有多个runtime components若系统中有多个major version,则每个version一个实例。每个KMDF driver告知framework创建它们的framework原创 2013-03-03 21:46:13 · 488 阅读 · 0 评论 -
chapter 4.2: UMDF介绍
UMDF是基于COM的编程模型,用于实现function,filter driver,例如USB设备驱动framework是DLL,由一些基于COM的callback object组成选择COM原因: 1.程序员熟悉 2.COM接口支持对函数的分组,让DDI容易理解 3.支持ATI等一系列基于COM的工具UMDF基于两种object 1.fram原创 2013-03-02 19:54:03 · 657 阅读 · 0 评论 -
chapter 3.7-8: WDF验证、跟踪及调试支持&WDF版本支持
---------WDF验证、跟踪及调试支持-------------------------1.内置的framework验证2.内置跟踪日志3.Debugger扩展WDF对UMDF和KMDF都有各自的验证器生成跟踪日志两个devugger扩展:一个UMDF,一个KMDF---------可服务,版本支持-----------------------------原创 2013-03-01 23:40:15 · 507 阅读 · 0 评论 -
chapter 3.6: 安全
不安全的驱动:暴露敏感信息和安全漏洞安全的驱动:防止未经允许的访问设备、文件及数据WDF:提供默认安全和参数验证安全编码书[Writing Secure Code, Second Edition]默认安全WDF提供安全名称:只有内核模式组件及管理员用户能访问对象framework为driver不处理的事件都有默认的处理 默认处理防止对WDF driver非原创 2013-03-01 23:39:07 · 265 阅读 · 0 评论 -
chapter 3.4 I/O model
Windows发送I/O request到WDF driver时,framework代表driver接收request来进行分派、组队、完成、取消操作。当接收到I/O request时,Framework决定 1.自行处理请求 2.发起一个回调函数让WDF driver处理请求:framework把数据包装成a framework request objectframe原创 2013-03-01 23:35:27 · 528 阅读 · 0 评论 -
chapter 3.5: PnP和电源管理
WDF简化了PnP和电源管理: WDF driver不用实现复杂逻辑来跟踪PnP和电源状态。 framework支持了状态机管理PnP和电源状态,通过一系列事件通知驱动对设备采取行动。WDF对PnP和电源管理的设计: 1.驱动不应该处理及相应所有事件,而是"opt in"处理设备相关事件,其余事件由framework处理。 2.WDF行为要良好定义及可预原创 2013-03-01 23:36:30 · 522 阅读 · 0 评论 -
chapter 3.3: WDF对象模型
WDF object模型表示了通用的驱动结构:设备,内存,队列,I/O请求,驱动。WDF object具有良好的生命周期和约定,以及与WDF driver交互的接口WDF object实现: UMDF object由COM object实现 KMDF object由“透明”的句柄和对句柄操作的函数组成 *在概念级,两者是相似的WDF object产生:fr原创 2013-03-01 01:35:23 · 448 阅读 · 0 评论 -
chapter 9.3: 创建I/O request
种类:read, write, or device I/O control request创建request时,不包括memory object和其他任何信息KMDF驱动可以定义内部IOCTL,参数自定义,支持3种memory object和offset structuresKMDF例子:创建WDF I/O RequestWdfRequestCreate:创建WDF I/O原创 2013-04-01 23:29:21 · 776 阅读 · 0 评论 -
chapter 9.4: Driver创建I/O请求的Memory Object和buffer
三个对象的关系图:图9.2Memory objects的重要性:具有reference count 1.mem obj无法被释放,直到request不用了为止(保证pending时,memory没有free) 2.cleanup方法被简化,会延迟至请求完成再删除对象。buffer没有counter buffer的生命周期如下:原创 2013-04-01 23:30:57 · 689 阅读 · 0 评论 -
chapter 8.9:Adaptive Time-outs in UMDF
待整理。。原创 2013-04-01 23:17:43 · 554 阅读 · 0 评论 -
chapter 8.8: canceled and suspended requests
驱动可以在任何时间停止处理I/O请求: 1.发起request的线程或进程取消或离开 2.PnP和Power事件,例如睡眠 3.设备移除驱动在收到请求时对请求取消(STATUS_CANCELLED)或完成error。驱动应该为需要很长时间或不定时间的请求提供回调,比如非同步的input请求。Request cancellationWDF取消请求原创 2013-04-01 23:16:45 · 695 阅读 · 0 评论 -
chapter 8.7: 完成I/O请求
当驱动完成了I/O请求,设置status,传输的number of bytes,发起请求线程的priority boost下表是WDF驱动可以调用的完成方法(UMDF的接口为IWDFIoRequest)Action UMDF methodKMDF methodCompletes an I/O request wit原创 2013-04-01 23:15:14 · 799 阅读 · 0 评论 -
chapter 8.4: I/O 请求对象
driver处理的请求对象,由I/O handler创建。请求对象通过callback函数的参数或者调用queue方法创建。UMDF:请求对象导出IWDFIoRequest接口KMDF:WDFREQUEST导出WdfRequestXxx方法驱动可以获得类型、参数、数据和关联的file object请求对象具有reference count,但IRP没有驱动可以创建请求对象,原创 2013-04-01 19:25:08 · 1404 阅读 · 0 评论 -
chapter 8.3: I/O request Flow
I/O request路径:图8.11.应用程序调用Windows API建立请求2.WinAPI调用kernel-mode subsystems,kernel-mode subsystems调用I/O manager3.I/O manager构建IRP,发送至KM的设备栈的top driver。4.向下传递直到设备栈中的driver完成IRP5.I/O manager调用原创 2013-04-01 19:17:25 · 1010 阅读 · 0 评论 -
chapter 8.2: I/O transfer types
3类:1.buffered I/O,复制用户的数据2.Direct I/O,通过MDLs和KM pointer访问用户数据3.Neither I/O,使用UM pointer访问用户数据应避免使用Neither I/O**IOCTLs可以使用任何类型,所有I/O request必须使用同样的类型(驱动相关)KMDF驱动在EvtDriverDeviceAdd回原创 2013-04-01 19:13:45 · 584 阅读 · 0 评论 -
chapter 9.6:格式化I/O请求
在发送I/O请求前经常必须格式化请求,设置I/O栈位置及其他信息(如完成回调)情形: 1.接受从framework来的请求,并发送到I/O target,此时需要设置buffer offset或者更改数据长度或内容。 2.驱动把自己创建的I/O请求发送给I/O target 3.驱动为请求设置完成回调函数驱动必须格式化所有请求,除了一种情况:从framewor原创 2013-04-01 23:36:24 · 1292 阅读 · 0 评论 -
chapter 9.5: memory object和buffer allocation
创建mem obj和buffer的方法 1.一个函数同时分配buffer和memory obj 2.创建一个memory obj,然后把它和一个已存在的buffer关联创建请求时,驱动可以同时创建mem obj,也可以关联一个已存的mem objmem obj默认的父亲是创建它的驱动,若需要,则手动设置父亲为I/O request/device obj原创 2013-04-01 23:33:43 · 1128 阅读 · 0 评论 -
chapter 9.2: I/O Target创建及管理
driver可以直接调用framework方法访问默认I/O target:WdfDeviceGetIoTarget KMDF:Remote I/O target 创建驱动需要创建并打开I/O target。WdfIoTargetCreate:创建,并不关联特定I/O target(WDF_OBJECT_ATTRIBUTES)WdfIoTargetOpen:关联目标设备/设原创 2013-04-01 23:25:48 · 1489 阅读 · 0 评论 -
chapter 8.6: I/O事件回调函数
接收带I/O请求时framework可以做的事: 1.把request放入queue 2.调用callback而不是放入queue 3.代driver处理请求 4.转发到默认I/O target 5.标记请求为失败为了I/O的文件对象从应用程序角度,所有I/O都是通过文件句柄执行的。从驱动角度看,文件不重要,除非需要执行多客户端的会原创 2013-04-01 19:32:48 · 1586 阅读 · 0 评论 -
chapter 8.5: I/O Queues
为driver控制I/O请求流,跟踪活动的请求状态,支持取消请求、管理请求的并发、能选择性同步关于设备PnP和Power状态的操作。创建queue: 1.UMDF,调用IWDFDevice::CreateIoQueue 2.KMDF,调用WdfIoQueueCreate驱动可以创建一至多个queue,对于每个queue的配置: 1.接收quests的types原创 2013-04-01 19:28:39 · 1219 阅读 · 0 评论 -
chapter 8.1 I/O flow and dispatching
常用I/O请求类型: 决定哪种请求类型必须处理,哪些请求可以由framework代为处理最常用的请求: 创建/关闭/读/写/ device I/O control创建请求CreateFile返回的是进程句柄而不是线程句柄。应用程序调用CreateFile时,I/O manager创建file object,并向设备栈发送一个create request。原创 2013-04-01 19:11:40 · 617 阅读 · 0 评论 -
chapter 3.1-2: WDF简介
WDF driver model: 一个为UMDF,KMDF创造的面向对象,事件驱动的环境。WDF和WDMWDF只是WDM的抽象,其目的是一致的。WDF处理了WDM的核心任务:接受处理IRPs,管理PnP和电源状态变化等。WDF简介WDF提供了一个统一的驱动模型,功能包括: 1.同时支持用户和内核模式的驱动 2.进行了良好设计:WD原创 2013-03-01 01:06:33 · 537 阅读 · 0 评论 -
chapter 1: windows驱动入门
1.定义及区别UMDF:面向客户的设备,手机及移动娱乐设备。可以使用WindowsAPI,基于COMKMDF:支持DMA,句柄中断,作为其他内核驱动的client,使用内核资源。可以使用WDM对象。2.编译工具使用Build.exe来编译驱动及windows。3.其他工具:PREfast:一个静态代码分析工具SDV:一个静态的内核驱动验证工具:符号化执行原代码原创 2013-02-27 19:31:44 · 619 阅读 · 0 评论 -
6.5 Device Interface
想device发送I/O请求的用户模式的应用程序和系统组件为了打开设备,必须能识别设备Device Interface是一个设备支持的逻辑上的I/O操作集,每个device interface class有一个GUID,可以定义自己的GUIDdriver通过创建一个device interface把设备注册为a member of a device interface class,填写上合原创 2013-03-05 21:00:47 · 756 阅读 · 0 评论 -
chapter 6.4: Queue和其他支持对象
用来控制设备,处理I/O请求,它们组成了驱动的工作结构如下是经常创建的object(通常是device的子孙):Object DescriptionSupporting frameworkI/O queue objectManages the flow of I/O requests to the原创 2013-03-05 20:41:24 · 497 阅读 · 0 评论 -
chapter 6.2: 驱动对象
驱动对象支持add-device事件,存储全局数据,并支持一个在卸载时清除数据的回调函数UMDF Driver Callback Object创建==========KMDF Driver Object创建DriverEntry只被调用一次: 1.创建WDFDRIVER,表示内存中的驱动,并在framework注册 2.注册驱动的EvtDrive原创 2013-03-05 20:34:09 · 753 阅读 · 0 评论 -
chapter 6.1: driver 需要的组件
任何driver必须包含如下: 1.driver载入时的entry point 2.driver object 3.一至多个device 4.其他用来管理device和管理流向device的I/O request的object 5.event callbacksUMDF driver 结构和需求======KMDF dr原创 2013-03-05 20:32:59 · 688 阅读 · 0 评论 -
chapter 5.6: Object context area
是driver定义的由object使用的存储区域,UMDF和KMDF有不同的使用方式: UMDF:存储在callback object中,也能按需要在object中创建 KMDF:driver通常在object中使用context areaUMDF object context Data=====UMDF context info in callba原创 2013-03-05 13:24:03 · 568 阅读 · 0 评论 -
chapter 6.7: KMDF设备对象的创建和初始化
所有支持PnP的KMDF驱动不许有EvtDriverDeviceAdd回调函数。用于创建和初始化device对象和相关资源。系统在发现驱动控制的一个设备时会调用它的EvtDriverDeviceAdd。EvtDriverDeviceAdd创建了一个WDFDEVICE对象,用来表示设备和通过大量初始化任务让framework提供信息来创建它自己的内部结构。EvtDriverDevic原创 2013-03-05 22:27:35 · 1208 阅读 · 0 评论 -
chapter 6.3: Device Objects
设备对象:当PnP manager发现一个驱动控制的设备,它会通知framework。framework反过来调用driver来初始化设备数据结构。device object是驱动对象管理设备的角色,包含状态,是I/O请求的target。而windows不把请求发送给driver。device包含驱动要使用的device相关信息,支持设备相关事件的回调函数。DO的类型1原创 2013-03-05 20:37:44 · 1281 阅读 · 0 评论 -
chapter 5.5: 对象层次及生命周期
KMDF和UMDF都使用引用计数,所有的对象都有引用计数: UMDF使用AddRef和Release来管理引用计数; KMDF使用WdfObjectReferenceXxx和WdfObjectDereferenceXxx维护引用计数对象层次: 如图,驱动对象是根,其它都是它的后代。设备总是驱动的儿子,queue通常是设备的儿子,也可能是a late原创 2013-03-05 02:31:33 · 574 阅读 · 0 评论 -
chapter 5.4: 创建对象
UMDF:先按需要创建callback object,再调用create方法KMDF:先初始化object attributes structure和object configuration structure,再调用create方法创建UMDF对象UMDF对每种object提供了不同的创建方法:device, file, I/O request, memory, queue ob原创 2013-03-04 20:43:28 · 307 阅读 · 0 评论 -
chapter 5.2: UMDF对象模型的实现
UMDF基于COM,只用COM的query-interface和reference-counting机制,而不依赖COM的所有机制类型:Driver-created fileI/O completion parametersBase objectI/O targetDriverMemory原创 2013-03-04 20:36:53 · 811 阅读 · 0 评论 -
chapter 5.1: object model介绍
目标:对象用来表示内核中的数据结构和模式主要是管理一系列属性和生命周期管理,内容管理,回调模式,对象层次1.object是一个编译块,对驱动透明(通过接口管理)2.object具有方法,属性和时间;回调机制3.object层次化组织,生命周期管理关于方法,属性和时间方法:函数属性:数据(get/set,Assin/Retrieve)事件:默认/覆盖及注册原创 2013-03-04 20:32:35 · 339 阅读 · 0 评论