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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值