我初步为某usb设备开发了一个上层过滤驱动, 现在想调试过滤驱动的DriverEntry函数,步骤如下: 运行SymbolLoader,导入了该过滤驱动的.nms文件并加载, 按ctrl+D激活softice, 在softice里打开包含Driverentry函数的文件,设置好断点, 然后运行测试程序,该测试程序中使用Createfile函数用来打开usb设备,而不是过滤设备(不知这是否后面发生问题的原因所在?).
下面是问题: 当我运行测试程序时, softice窗口没有弹出,更不用说停在DriverEntry函数上了. 不能进入DriverEntry函数有哪些原因啊?
除非是驱动程序没有加载,否则一定会执行DriverEntry。
先安装驱动程序,然后启动驱动程序,启动驱动程序时最先执行的就是DriverEntry。
可是我安装了驱动啊,设备管理器和注册表中也没看见异常.
用手动启动驱动程序试试,如果失败看看是什么原因。调试驱动程序如果可以的话一般都是先手动启动调试。
用windbg如何调试driverentry函数啊?我没用过
另外,手动启动驱动程序是指 在设备管理器里停用和启用设备吗?
windbg需要双机调试,一般用虚拟机(Virtual PC或VMWare),用管道虚拟串口。不如SoftICE方便,但SoftICE已经停止开发了,最终版本不能支持Vista,也不能支持X64。
手动是借助工具启动/停止驱动程序。如果没有工具就自己做个应用程序。参考MSDN中Service Functions,例如CreateService等函数。
按楼上说的,我使用DriverMonitor调入驱动的.sys文件,再启动驱动时,该软件显示不能为驱动创建服务,这是由哪些原因造成的啊
我的安装过程如下: 在原有的设备安装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 = "***"
这种驱动应该自动加载来调试,因为驱动程序加载时SoftICE还没有开始工作,所以无法调试DriverEntry,你可以在AddDevice函数入口设断点调试其它部分。
如果需要调试DriverEntry,你可以试一下,在注册表中把驱动程序的Start值改为3,然后再手动启动调试DriverEntry。这种方式驱动程序可能运行不正常。
呵呵,我上面的inf文件里就是设置的3. 不过倒是可以试试调试AddDevice函数
调试驱动程序之前,必须先设置SoftICE的启动方式为Boot