如何写一个hid的过滤驱动inf?我的inf有什么错?内详

lishu2002 2010-11-26 10:05:19
写了个win7下的hid驱动的上层过滤程序,根据范例中Toaster的filter中的inf修改了一个上层过滤的inf文件,可是在使用UpdateDriverForPlugAndPlayDevices进行安装的时候却失败,错误码是0xe000020b,因为win7下hid驱动相关的是kmdf,所以upperfilter是kmdf。我使用的安装函数依次为SetupDiGetINFClass,SetupDiCreateDeviceInfoList,SetupDiCreateDeviceInfo,SetupDiSetDeviceRegistryProperty,UpdateDriverForPlugAndPlayDevices。除了最后一个函数其他都成功,请教是inf写的有问题么?如何修改?还是调用的安装函数有问题,需要添加或者删除掉那些相关的函数??谢谢


inf文件内容如下。

[Version]
Signature = "$WINDOWS NT$"
Class=HIDClass
ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
Provider=%MSFT%
DriverVer=11/25/2010,6.1.7600.16385

[DestinationDirs]
DefaultDestDir = 12

;*****************************************
; Toaster Device Filter Install Section
;*****************************************

[Manufacturer]
%StdMfg%=Standard,NTx86

; For XP and later
[Standard.NTx86]
%ToasterFilter.DeviceDesc%=ToasterFilter, Root\MsToaster

[ToasterFilter.NT]
CopyFiles=ToasterFilter.NT.Copy

[ToasterFilter.NT.Copy]
filter.sys

[ToasterFilter.NT.HW]
AddReg = ToasterFilter.NT.HW.AddReg

[ToasterFilter.NT.HW.AddReg]
HKR,,"UpperFilters",0x00010000,hidkmdf

;*****************************************
; Toaster Device Filter Service Section
;*****************************************

[ToasterFilter.NT.Services]
;Do not specify SPSVCINST_ASSOCSERVICE on filter drivers.
AddService = ToasterFilter,, filter_Service_Inst

[filter_Service_Inst]
DisplayName = %filter.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\filter.sys

;*************************
; Source file information
;*************************

[SourceDisksNames]
1 = %DiskId1%,,,""

[SourceDisksFiles]
filter.sys = 1,,

;
;--- ToasterFilter Coinstaller installation ------
;
[DestinationDirs]
ToasterFilter_CoInstaller_CopyFiles = 11

[ToasterFilter.NT.CoInstallers]
AddReg = ToasterFilter_CoInstaller_AddReg
CopyFiles = ToasterFilter_CoInstaller_CopyFiles

[ToasterFilter_CoInstaller_AddReg]
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller"

[ToasterFilter_CoInstaller_CopyFiles]
WdfCoInstaller01009.dll

[SourceDisksFiles]
WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames

[ToasterFilter.NT.Wdf]
KmdfService = ToasterFilter, Filter_wdfsect

[Filter_wdfsect]
KmdfLibraryVersion = 1.9

[Strings]
SPSVCINST_ASSOCSERVICE = 0x00000002
MSFT = "Microsoft"
StdMfg = "(Standard system devices)"
ClassName = "Toaster"
DiskId1 = "Toaster Filter Installation Disk #1"
ToasterFilter.DeviceDesc = "Microsoft Toaster Filter"
filter.SvcDesc = "Microsoft Toaster Filter Driver Refactored"
Toaster.SVCDESC = "Microsoft WDF Toaster Featured Device Driver"
...全文
549 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nutria 2010-11-30
  • 打赏
  • 举报
回复
你的安装程序的UpdateDriverForPlugAndPlayDevices前面需要调用SetupDiCallClassInstaller或者SetupDiRegisterDeviceInfo,否则你虽然创建设备了,但是没有注册,如何进行驱动更新呢
lishu2002 2010-11-28
  • 打赏
  • 举报
回复
高手帮忙看下Inf文件吧,我用ddk带的devcon进行安装都出错,而且发现没有开始加载驱动,没有进入driverentry
lishu2002 2010-11-28
  • 打赏
  • 举报
回复
原文中的
[ToasterFilter.NT.HW.AddReg]
HKR,,"UpperFilters",0x00010000,hidkmdf
最后一个地方写错了,在xp之前的系统用hidkmdf
而在win7下是mshidkmdf,也就是如下的内容
[ToasterFilter.NT.HW.AddReg]
HKR,,"UpperFilters",0x00010000,mshidkmdf

lishu2002 2010-11-26
  • 打赏
  • 举报
回复
谢谢楼上的回复,那个ID好像是可以随便写的。即使我参考input.inf的格式写,在调用安装程序的时候仍然失败,不知道是不是我的安装方法有问题
finicswang 2010-11-26
  • 打赏
  • 举报
回复
"Root\MsToaster"用在这里应该不妥:
Class=HIDClass
ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da}

%ToasterFilter.DeviceDesc%=ToasterFilter, Root\MsToaster

尝试用Compatible device ID试试看,可参考%Windir%\inf\input.inf文件
比如:
%ToasterFilter.DeviceDesc%=ToasterFilter, HID_DEVICE

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧