适用于MTP设备的UMDF过滤器驱动程序

时间:2013-01-16 13:45:37

标签: driver wpd mtp umdf filter-driver

我正在尝试在Windows 7上为MTP设备编写过滤器驱动程序,以便记录文件操作并阻止某些文件操作。我发现在Windows中处理MTP的驱动程序是一个名为WpdMtpDr.dll的UMDF驱动程序,我根据example(UMDF函数驱动程序上方的UMDF过滤器驱动程序)编写了一个UMDF过滤器驱动程序,因为我处理了{{{ 1}}作为功能驱动程序。我还使用this作为参考来确定驱动程序是作为上层还是下层过滤器安装的。我使用dpinst.exe安装了驱动程序。以下是我的INF文件。

安装没有错误,但是当插入MTP设备(Samsung Galaxy S3)时,过滤器驱动程序不在其驱动程序列表中(通过设备管理器看到),并且从未调用过DllMain。

我尝试在低位和高位滤波器之间切换,但它也没有帮助。

我做错了什么?

WpdMtpDr.dll

1 个答案:

答案 0 :(得分:1)

@ oren671:您应该能够在MTP堆栈上安装UMDF过滤器驱动程序作为上层过滤器。我尝试使用上面共享的相同inf,发现你inf中定义的WpdMtpDriver_Install部分导致了一个错误,因为它已经包含在wpdmtp.inf' WPD.MTP.Wdf'部分(请参阅DDInstall.Wdf下的包含/需要)。

%SystemDrive%\ Windows \ setupact.log中发现错误: " ...错误阅读部分[WpdMtpDriver_Install]密钥UmdfLibraryVersion - 找到重复密钥..." 请检查SystemDrive%\ Windows \ Inf \ setupapi.dev.log& %SystemDrive%\ Windows \ setupact.log表示失败。

删除' WpdMtpDriver_Install'从上面的inf部分,我能够在MTP堆栈上安装UMDF过滤器。

我修改了sample inf以使用MTP设置inf方向link。具有USB传输的MTP使用WPD(UMDF)和WINUSB,因此在过滤器inf中包含来自wpdmtp.inf的相关部分(DDInstall,DDInstall.hw,DDInstall.Services,DDInstall.CoInstallers,DDInstall.Wdf)应该消除需要复制它们。

;
; WUDFOsrUsbFilterOnMTPDriver.inf - Install a UM Filter driver on an MTP device'
;

[Version]
Signature="$Windows NT$"
Class=WPD
ClassGuid={EEC5AD98-8080-425f-922A-DABF3DE3F69A}
Provider=%MSFTUMDF%
DriverVer=02/03/2014,18.8.52.851
CatalogFile=wudf.cat

[Manufacturer]
%MSFTUMDF%=Microsoft,NTamd64

[Microsoft.NTamd64]
%OsrUsbDeviceName%=OsrUsb_Install, USB\VID_04E8&PID_6860&MI_00
%OsrUsbDeviceName%=OsrUsb_Install, USB\VID_04E8&PID_6860

[SourceDisksFiles]
WudfOsrUsbFilter.dll=1

[SourceDisksNames]
1 = %MediaDescription%

; =================== UMDF OSR Filter Driver ==================================

[OsrUsb_Install.NT]
CopyFiles=UMDriverCopy
Include = wpdmtp.inf, WINUSB.INF
Needs   = WPD.MTP, WINUSB.NT

[OsrUsb_Install.NT.hw]
Include = wpdmtp.inf
Needs   = WPD.MTP.Registration

[OsrUsb_Install.NT.Services]
Include = wpdmtp.inf
Needs   = WPD.MTP.Services

[OsrUsb_Install.NT.Wdf]
Include = wpdmtp.inf
Needs = WPD.MTP.Wdf
UmdfService=WudfOsrUsbFilter, WudfOsrUsbFilter_Install
UmdfServiceOrder=WpdMtpDriver, WUDFOsrUsbFilter

[OsrUsb_Install.NT.CoInstallers]
Include = wpdmtp.inf
Needs = WPD.MTP.CoInstallers

[WudfOsrUsbFilter_Install]
UmdfLibraryVersion=1.11.0
DriverCLSID = "{422d8dbc-520d-4d7e-8f53-920e5c867e6c}"
ServiceBinary = "%12%\UMDF\WUDFOsrUsbFilter.dll"

[DestinationDirs]
UMDriverCopy=12,UMDF        ; copy to drivers\umdf

[UMDriverCopy]
WudfOsrUsbFilter.dll

; =================== Generic ==================================

[Strings]
MSFTUMDF="Microsoft Internal (WDF:UMDF)"
MediaDescription="Microsoft UMDF OSR USB Sample Device Installation Media"
OsrUsbDeviceName="Microsoft UMDF OSR Usb Sample Device With Filter on User-mode Driver"