阅读:1579回复:8
SCSI Miniport驱动求助
最近根据DDK的例子Initio,编了一个自制PCI接口SCSI卡(不带BIOS)的驱动。由于是第一次写这类的驱动,很多地方都是照抄Initio的。现在有如下问题请教:
1、插卡安装完驱动后,总是提示要重新启动才能生效。如何才能不用重启就能使用?? 2、安装驱动的时候,我想用SoftIce跟进DriverEntry和FindAdpter,可怎么也跟不进去,为什么??这两个函数到底是在什么时候才运行呢?? |
|
沙发#
发布于:2005-02-24 17:47
si启动太晚了。
|
|
|
板凳#
发布于:2005-02-24 17:52
不会的,我设的SoftIce的启动方式为Boot
|
|
地板#
发布于:2005-02-27 14:17
现在我的程序是这样的:只在DriveEntry中设置了HW_INITIALIZATION_DATA的结构体,然后调用了ScsiPortInitialize。其他例程HwScsiFindAdapter是空的,仅返回SP_RETURN_FOUND;HwScsiInitialize、HwScsiStartIo、HwScsiResetBus也都是空的,仅返回TRUE。编译通过,安装后,报要重新启动才能生效。重启过后,报代码31错误,不能正确加载。
为什么???请高手指教。 |
|
驱动老牛
|
地下室#
发布于:2005-02-28 10:12
最近根据DDK的例子Initio,编了一个自制PCI接口SCSI卡(不带BIOS)的驱动。由于是第一次写这类的驱动,很多地方都是照抄Initio的。现在有如下问题请教: 1。INF是怎么写的 2。因为还没启动系统,所以 安装的时候跟不了,驱动还没有起来呢,DriverEntry是在驱动加载时 也就时操作系统启动时, |
|
5楼#
发布于:2005-03-06 00:10
这儿有一个inf的例子,是我为USB写的miniport的inf。或许有帮助。
|
|
|
6楼#
发布于:2005-03-08 11:46
也是抄Initio例子的,就是把VID和DID改了 |
|
7楼#
发布于:2005-03-09 10:48
inf是这样一个结构:
一般来说,读一个inf文件总是从[Manufacturer]开始的。 [Manufacturer]下会有一些本inf文件支持的硬件列表,每一行代表一个支持的硬件种类。比如,如果[Manufacturer]是 [Manufacturer] %Manufacturer1%=sbp2_device %Manufacturer2%=usb_device 就代表支持sbp2_device的硬件种类,这个种类的名字是Manufacturer1字符串定义的。%Manufacturer1%代表一个字符串变量。 这个硬件种类可以包括很多硬件型号,它们都列在[sbp2_device]中。 [sbp2_device] %DeviceDesc1%=sbp2_install1, 1394\\609E&10111 %DeviceDesc2%=sbp2_install2, 1394\\609E&10483 %DeviceDesc1%=sbp2_install1, 1394\\609E&10111 代表支持硬件ID为1394\\609E&10111的设备。一旦发现这个设备,Windows会去根据[sbp2_install1]定义的行为来安装驱动程序。%DeviceDesc1%是给设备的名称。 假如[sbp2_install1]为: [sbp2_install1] CopyFiles=sbp2_CopyFiles AddReg=sbp2_AddReg CopyFiles=sbp2_CopyFiles 表示要执行复制文件操作。要复制的文件列在sbp2_CopyFiles中。 [sbp2_CopyFiles] sbp2.pdr helper.sys 表示要复制sbp2.sys和helper.sys的文件。 要复制的目的位置在[DestinationDirs]中定义,在本例中为: [DestinationDirs] sbp2_CopyFiles=12 sbp2_CopyFiles=12 表示把[sbp2_CopyFiles]中的文件复制到%windows目录的system32\\drivers中。12代表system32\\drivers目录。 在[sbp2_install1]中的AddReg=sbp2_AddReg代表执行一个注册表操作。[sbp2_AddReg]如下: [sbp2_AddReg] HKR,,DevLoader,0,*IOS HKR,,PortDriver,0,sbp2.sys HKR,,DriverDesc,0,SBP2 Port Driver 表示在设备相关注册表项上加入DevLoader、PortDriver、DriverDesc键值。键值的值是*IOS等等。 注册表项的位置在LOCAL_MACHINE下由[Version]中的Class项指定的设备类型决定。比如, [Version] Signature=$CHICAGO$ Class=hdc provider=%Numega% Class=hdc表示在hdc设备类型中。这个类型的定义由[ClassInstall]决定的。 [ClassInstall] AddReg=HDC_Class [HDC_Class]指明了这个类型需要添加的注册表项 [HDC_Class] HKR,,,0,%HDCClassName% HKR,,Icon,0,-9 以上inf文件格式是Windows 98上的。NT/2000上的略有不同。NT/2000的inf文件会有一个[sbp2_install1.Services]指明要执行的驱动安装动作。 [sbp2_install1.Services] AddService = sbp2_install1, 0x00000002, sbp2_Service_Inst [sbp2_Service_Inst] DisplayName=%sbp2_ServiceDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 1 ; SERVICE_SYSTEM_START ErrorControl = 0 ; SERVICE_ERROR_IGNORE ServiceBinary = %12%\\sbp2.sys ServiceBinary指定了要为本设备装入的驱动程序。 可以看这个帖子:http://www.driverdevelop.com/forum/viewthread.php?tid=69281#pid529009 |
|
8楼#
发布于:2005-03-11 17:50
问题找到了,果然是INF文件出的问题。谢谢各位的帮忙!!
|
|