UMDF filter驱动开发学习

这段时间需要用UMDF开发一个webCam的Filter驱动, 原来只开放过WDM的webCam的Filter驱动,对UMDF没有研究,现学现卖,在此记录学习过程,或许不能学成,也是点经验,供后来人参考少走点弯路.

 

首先google UMDF相关资料下一堆文档做个大致浏览,我没工夫啃厚厚几本书,最后找到UMDF filter在DDK里的例子:/src/usb/osrusbfx2/umdf/filter里,大致看来下说明, 说必须要与osrusbfx2绑定才能用,看它的INF,发现是和osrusbfx2的UMDF FUNC驱动一起装的,不确定UMDF的FILTER驱动是否只能加在UMDF Func驱动上,继续GOOGLE发现是可以加在KERNEL驱动上的.

 

看了MS 的关于UMDF的架构图,APP其实是把I/O请求发送到KERNEL层的,UMDF在KERNEL层加了个FILTER驱动,接受到I/O请求后,先将I/O请求反射到应用层的UMDF框架,UMDF将I/O请求分派到UMD驱动,而UMDF框架将访问硬件的方法封装成一些接口供UMD驱动调用,将UMD驱动和KERNEL层隔开,这就是UMDF驱动的原理.

 

UMD驱动要成为一个Filter驱动,只需要在初始化时调用一下IWDFDeviceInitialize::SetFilter(), 这样就能让框架为我们作一些事情,包括:

1.Send I/O for which the Filter has not registered a callback for to the next logical driver in the stack.  Example: Your filter driver registers a DeviceIoctl callback method, but not read or write.  As a result your filter driver will only see IOCTLs.
2.Automatically forward file create cleanup and close so there is no need to invoke the AutoForwardCreateCleanupClose method.

 

相对FUNC驱动,FILTER UMDF驱动需要在INF增加如下一节:

[<mydriver>.NT.Wdf]
UmdfService = "<mydriver>", <mydriver>_Install
UmdfServiceOrder = <mydriver>

[<mydriver>_Device_AddReg]
; Load the redirector as an upperfilter on this specific device.
; 0x00010008 - FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND
HKR,,"UpperFilters",0x00010008,"WUDFRd" 

 

这里要说明的是 AddReg节, WUDFRd是UMDF的内核模式转换服务程序,WUDFRd是内核模式驱动的Upper filter驱动,驱动被加载后要做的事和FUNC驱动一样,注册要处理的I/O请求并处理就可以,唯一不同的是FILTER驱动要讲请求传递到下一层驱动.

    IWDFIoTarget * kmdfIoTarget = NULL;
   
    this->GetFxDevice()->GetDefaultIoTarget (&kmdfIoTarget);

    Request->FormatUsingCurrentType();

    hr = Request->Send (
        kmdfIoTarget,
        0,  // 0 Submits Asynchronous else use WDF_REQUEST_SEND_OPTION_SYNCHRONOUS
        0);

 

 

第二步,开始修改例子代码,将其对FUNC驱动的关联去除,并将其加到WebCam的驱动栈上.

 

 悲哀的发现有人说webCam是无法加UMDF upperfilter驱动的.

http://www.eggheadcafe.com/software/aspnet/36120604/how-to-install-umdfbased-class-filter-driver.aspx

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows设备驱动程序WDF(Windows Driver Foundation)开发是针对Windows操作系统的设备驱动程序开发的一种方法。WDF是由微软推出的一套驱动程序框架,可以简化驱动程序的编写和维护过程,提高驱动程序的稳定性和性能。 WDF开发框架包括两个主要的组件:Kernel-Mode Driver Framework(KMDF)和User-Mode Driver Framework(UMDF)。KMDF用于编写运行在内核模式下的设备驱动程序,而UMDF则用于编写运行在用户模式下的驱动程序。 KMDF提供了一套面向对象的编程接口,使驱动程序开发者可以使用C++语言进行开发。它简化了驱动程序的资源管理、设备访问和事件处理等操作,并提供了许多内置的功能和工具,如管理I/O队列、中断处理和电源管理等。通过使用KMDF,开发者可以减少代码量、提高驱动程序的稳定性,并且可以更加方便地适应不同版本的操作系统。 UMDF则提供了一种轻量级的驱动程序开发模式,使驱动程序可以在用户模式下运行,而不需要进入内核模式。UMDF主要针对一些简单的设备和驱动程序,如打印机、摄像头和USB外设等。相比于KMDF,UMDF开发驱动程序更加易于编写和调试,但也有一定的性能损耗。 通过掌握Windows设备驱动程序WDF开发开发者可以更加便捷地为Windows系统开发设备驱动程序,提供了更好的稳定性和兼容性。同时,WDF开发框架也遵循微软的最佳编程实践,使得驱动程序开发者能够以更高的效率开发出更加可靠的驱动程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值