终于可以回家了,有一段时间没有回家了,挺想念家人的。好好的放松心情,好好的利用这段时间自己来休整一下。再出发。很多事情都可以再想一想。博客终于100了,呵呵。
Framework Objects
UMDF中一般会使用到如下的框架对象。
Driver Object IWDFDriver 驱动对象
Device Object IWDFDeivce 设备对象
File Object IWDFFile 文件对象
Interrupt Object IWDFInterrupt 中断对象
Queue Object IWDFIoQueue 队列对象
Request Object IWDFIoRequest 请求对象
Target Ojbect IWDFIoTarget 目标对象
USB device object IWDFUsbTargetDevice USB设备对象
USB pipe object IWDFUsbTargetPipe USB设备管道
USB interface object IWDFUsbInterface USB设备接口
Base object IWDFObject 代表通用的基本对象
Memory Object IWDFMemory 内存对象
在UMDF驱动对设备进行初始化之前,驱动管理器和反射器被操作系统装载,驱动主持进程被创建。为了保证设备启动成功,驱动管理器被装载并被完全初始化跟反射器初始化一起。
当设备被安装,PNP子系统装载反射器,如果装载还为完成,反射器联系驱动管理器创建驱动主持进程。在新创建的驱动主持进程内框架调用IDriverEntry::OnInitialize历程初始化UMDF驱动。
框架为每一个被驱动主持进程装载的设备创建一个设备对象。
Adding a Device Overview
Adding a Device
框架会为每一个驱动主持进程中的设备增加一个设备对象,框架调用驱动IDriverEntry::OnDeviceAdd例程,并传递IWDFDrvier和IWDFDevcieInitialize接口做为其参数。驱动必须在调用IWDFDriver::CreateDevice之前使用IWDFDeviceInitialize接口,下面是IWDFDeviceInitialize接口暴露的方法。
驱动调用IWDFDeviceInitialize::RetrieveDevicePropertyStore 得到IWDFNamedPropertyStore,得到或者设置设备相关的属性。
驱动调用IWDFDeviceInitialize::SetLockingConstraint方法指定框架如何调用其的回调函数。
驱动可以调用 IWDFDeviceInitialize::SetFilter 使能其设备为过滤设备。
当驱动初始化IWDFDeviceInitialize,对设备相关属性进行初始化后,可以调用IWDFDriver::CreateDevice创建UMDF的设备对象,当设备对象创建以后,驱动可以调用IWDFDevice::CreateIoQueue方法创建读写的IO队列。
PnP and Power Management Interfaces
当驱动创建框架设备对象,它可以注册一些PNP和电源的回调函数,当这些事件发生的时候,系统会调用这些回掉函数。
IPnpCallback
IPnpCallbackSelfManagedIo
IPnpCallbackHardware
IPowerPolicyCallbackWa