阅读:1647回复:7
能够在Dispatch例程中初始化PCI硬件吗?
在DriverEntry中查找PCI硬件资源,能够获得成功。但同样的代码放到Dispatch例程里,却返回失败了。
有没有人发现过同样的现象? |
|
|
沙发#
发布于:2002-04-05 16:19
我跟踪了一下,函数HalAssignSlotResources返回STATUS_OBJECT_PATH_SYNTAX_BAD.
ISA卡可以在Dispatch例程里初始化。这是不是与PCI有关?谁能在理论上分析分析? |
|
|
板凳#
发布于:2002-04-05 17:12
我估计还是你的调用参数不一致造成的。
原来我在写一个函数时就发现,两次调用,一次成功,一次失败。 我只有一个参数不一样,而且根据文档,那个参数应该无关紧要。 后来,我实在没办法,改动了所有参数,完全一致,调用成功。然后才知道了原因。你确定两次调用的所有参数完全一致吗? |
|
地板#
发布于:2002-04-05 17:16
是呀,我是copy过去的。
你在Dispatch里初始化过PCI设备吗? |
|
|
地下室#
发布于:2002-04-05 19:37
用户被禁言,该主题自动屏蔽! |
|
5楼#
发布于:2002-04-08 08:28
Re:Tom.Cat
-------------------------------- 为什么不在AddDevice中? -------------------------------- 对不起,什么意思?AddDevice是一个例程还是什么?我从未听说,请指教。 |
|
|
6楼#
发布于:2002-04-08 08:48
Tom.cat说的对,对于PNP设备,应该尽量放在AddDevice例程中初始化.关于AddDevice例程的说明如下:(摘自DDK文档)
A driver\'s AddDevice routine should be named XxxAddDevice, where Xxx is a prefix identifying the particular driver. A driver stores the address of its AddDevice routine in DriverObject->DriverExtension->AddDevice during DriverEntry. An AddDevice routine is called in the context of a system thread at IRQL PASSIVE_LEVEL. The AddDevice routine is defined by the PnP Manager as follows: NTSTATUS (*PDRIVER_ADD_DEVICE) ( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject ); 相同的例程在DriverEntry例程里可以成功调用,而在DISPATCH例程里不能很大的原因可能是因为IRQL的问题,DriverEntry例程运行于PASSIVE_LEVEL,可以访问分页资源。而大部分DISPATCH可能运行DISPATCH_LEVEL级别,不能访问分页资源。另外,对于硬件初始化的相关代码,从来都是放在PASSIVE_LEVEL代码里面,对于不支持PNP的设备来说是DriverEntry例程,而对PNP来说,则应在AddDevice例程里面。 Best regards ! |
|
|
7楼#
发布于:2002-04-08 15:50
我用的NT 4.0, DDK,NT不支持PNP设备,它没有AddDevice。
另外,Dispatch例程是运行在PASSIVE_LEVEL下的,不应该是这个原因。 |
|
|