请教关于调试过滤驱动DriverEntry的问题

neaman   2008-2-1 08:53 楼主
我初步为某usb设备开发了一个上层过滤驱动, 现在想调试过滤驱动的DriverEntry函数,步骤如下: 运行SymbolLoader,导入了该过滤驱动的.nms文件并加载, 按ctrl+D激活softice, 在softice里打开包含Driverentry函数的文件,设置好断点, 然后运行测试程序,该测试程序中使用Createfile函数用来打开usb设备,而不是过滤设备(不知这是否后面发生问题的原因所在?).
下面是问题: 当我运行测试程序时, softice窗口没有弹出,更不用说停在DriverEntry函数上了. 不能进入DriverEntry函数有哪些原因啊?

回复评论 (13)

除非是驱动程序没有加载,否则一定会执行DriverEntry。
先安装驱动程序,然后启动驱动程序,启动驱动程序时最先执行的就是DriverEntry。
点赞  2008-2-1 10:22
可是我安装了驱动啊,设备管理器和注册表中也没看见异常.
点赞  2008-2-1 11:05
用手动启动驱动程序试试,如果失败看看是什么原因。调试驱动程序如果可以的话一般都是先手动启动调试。
点赞  2008-2-1 12:09
用windbg如何调试driverentry函数啊?我没用过
另外,手动启动驱动程序是指 在设备管理器里停用和启用设备吗?
点赞  2008-2-1 15:52
windbg需要双机调试,一般用虚拟机(Virtual PC或VMWare),用管道虚拟串口。不如SoftICE方便,但SoftICE已经停止开发了,最终版本不能支持Vista,也不能支持X64。
手动是借助工具启动/停止驱动程序。如果没有工具就自己做个应用程序。参考MSDN中Service Functions,例如CreateService等函数。
点赞  2008-2-1 16:04
按楼上说的,我使用DriverMonitor调入驱动的.sys文件,再启动驱动时,该软件显示不能为驱动创建服务,这是由哪些原因造成的啊
点赞  2008-2-2 10:31
你的驱动是怎么安装的?
点赞  2008-2-2 11:09
我的安装过程如下: 在原有的设备安装inf文件中加入一个service,该servie包含过滤驱动的.sys, 然后添加一个注册项,声明新的驱动为原有设备驱动的upperfilter,详细如下:

[Version]
Signature = "$Chicago$"
Class     = SmartCardReader
ClassGuid = {77989ADF-06DB-4025-92E8-40D902C03B0A}
Provider  = %WinChipHead%
DriverVer = 04/20/2006, 1.0.2006.4

[ControlFlags]
ExcludeFromSelect = USB\VID_4348&PID_5537,USB\VID_4348&PID_55E0

[ClassInstall32]
Addreg = WCHReg

[SmartCardReaderClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-25

[ClassInstall]
Addreg = WCHReg

[WCHReg]
HKR, , , 0, %ClassName%
HKR, , Icon, , -5
HKR, , NoInstallClass, , 1

[Manufacturer]
%WinChipHead% = WinChipHead

[WinChipHead]
%CH375.DeviceDesc% = CH375.Install, USB\VID_4348&PID_5537
%CH375HM.DeviceDesc% = CH375.Install, USB\VID_4348&PID_55E0

[CH375.Install]
CopyFiles = CH375.CopyFiles.SYS, FRI_PCSC_Driver.CopyFiles.SYS,CH375.CopyFiles.DLL
AddReg    = CH375.9X.AddReg, CH375.AddReg

[CH375.Install.NT]
CopyFiles = CH375.CopyFiles.SYS, FRI_PCSC_Driver.CopyFiles.SYS,CH375.CopyFiles.DLL
AddReg    = CH375.9X.AddReg, CH375.AddReg

[CH375.CopyFiles.SYS]
CH375WDM.SYS, , , 2

[CH375.CopyFiles.DLL]
CH375DLL.DLL, , , 2

[FRI_PCSC_Driver.CopyFiles.SYS]
Fri_Pcsc_Reader.sys, , , 2

[CH375.9X.AddReg]
HKR, , DevLoader, , *NTKERN
HKR, , NTMPDriver, , CH375WDM.SYS

[CH375.AddReg]
HKLM, SOFTWARE\WinChipHead\IC\CH375, WDM, 0x00010001, 0x00000012
HKLM, SOFTWARE\WinChipHead\IC\CH375, DLL, 0x00010001, 0x00000012
HKLM, SOFTWARE\WinChipHead\IC\CH375, Function, , "USB slave"

[CH375.Install.NT.Services]
AddService = CH375,2,CH375Service
AddService = MyDriver,,PCSCService                 ; 过滤驱动

[CH375Service]
DisplayName   = "CH375WDM"
ServiceType   = 1
StartType     = 3
ErrorControl  = 1
ServiceBinary = %10%\System32\Drivers\CH375WDM.SYS
AddReg=MyHWAddRegistrySectionNT

[PCSCService]
DisplayName = "Filter for FRI_USB_Reader"
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %10%\System32\Drivers\Fri_Pcsc_Reader.sys



[CH375_DDI.NT.HW]
AddReg=MyHWAddRegistrySectionNT

[MyHWAddRegistrySectionNT]
HKR,,"UpperFilters",0x00010000,"MyDriver"        ;声明过滤驱动为上层驱动

[DestinationDirs]
DefaultDestDir      = 10, System32\Drivers
CH375.CopyFiles.SYS = 10, System32\Drivers
CH375.CopyFiles.DLL = 11

[SourceDisksFiles]
CH375WDM.SYS  = 1
CH375DLL.DLL  = 1

[SourceDisksNames]
1 = "CH372/CH375 Installation Disk", CH375WDM.SYS, ,

[FRI_PCSC_RegService]
HKR,, ProtocolType, 0x00010001, 1
HKR,, DbgLevel, 0x00010001, 0
HKR,, VendorName, 0x00000000, %ASEC%
HKR,, IfdType, 0x00000000, %CH375.DeviceDesc%

[Strings]
ClassName        = "Smart Card Readers"
WinChipHead      = "*****"
CH375.DeviceDesc = "智能卡阅读机具"
CH375HM.DeviceDesc = "USB接口测试机具"
ASEC                        = "***"
点赞  2008-2-3 09:43
这种驱动应该自动加载来调试,因为驱动程序加载时SoftICE还没有开始工作,所以无法调试DriverEntry,你可以在AddDevice函数入口设断点调试其它部分。
如果需要调试DriverEntry,你可以试一下,在注册表中把驱动程序的Start值改为3,然后再手动启动调试DriverEntry。这种方式驱动程序可能运行不正常。
点赞  2008-2-3 10:26
呵呵,我上面的inf文件里就是设置的3. 不过倒是可以试试调试AddDevice函数
点赞  2008-2-3 11:01
尽量用 Windbg 吧, softice 不支持 Vista
点赞  2008-3-18 16:50
调试驱动程序之前,必须先设置SoftICE的启动方式为Boot
点赞  2008-3-19 23:16
气氛很好啊,学习中....
点赞  2008-3-21 17:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复