ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1647回复:7

能够在Dispatch例程中初始化PCI硬件吗?

楼主#
更多 发布于:2002-04-05 16:12
在DriverEntry中查找PCI硬件资源,能够获得成功。但同样的代码放到Dispatch例程里,却返回失败了。

有没有人发现过同样的现象?
没有你,我不知道怎么办...
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-05 16:19
我跟踪了一下,函数HalAssignSlotResources返回STATUS_OBJECT_PATH_SYNTAX_BAD.

ISA卡可以在Dispatch例程里初始化。这是不是与PCI有关?谁能在理论上分析分析?
没有你,我不知道怎么办...
wilton
驱动牛犊
驱动牛犊
  • 注册日期2001-04-23
  • 最后登录2005-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-05 17:12
我估计还是你的调用参数不一致造成的。
原来我在写一个函数时就发现,两次调用,一次成功,一次失败。
我只有一个参数不一样,而且根据文档,那个参数应该无关紧要。
后来,我实在没办法,改动了所有参数,完全一致,调用成功。然后才知道了原因。你确定两次调用的所有参数完全一致吗?
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-05 17:16
是呀,我是copy过去的。

你在Dispatch里初始化过PCI设备吗?
没有你,我不知道怎么办...
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-04-05 19:37
用户被禁言,该主题自动屏蔽!
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-08 08:28
Re:Tom.Cat
--------------------------------
为什么不在AddDevice中?
--------------------------------
对不起,什么意思?AddDevice是一个例程还是什么?我从未听说,请指教。
没有你,我不知道怎么办...
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
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 !
Tom_lyd
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-08 15:50
我用的NT 4.0, DDK,NT不支持PNP设备,它没有AddDevice。

另外,Dispatch例程是运行在PASSIVE_LEVEL下的,不应该是这个原因。
没有你,我不知道怎么办...
游客

返回顶部