xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1677回复:11

请教千古难题――IRP的迷途

楼主#
更多 发布于:2003-11-11 18:05
系统无法发送IRP到指定的函数。它导致了进不了CReate()。
诸位强者能否将其干掉?一等奖 30MIN 二等奖 10MIN

最新喜欢:

dregsdregs
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-11-11 22:55
你得问题能否具体点。好像也是个千古难题
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-12 09:31
这种说法不确切,应该是把 IRP 发到某个对象中去,比如设备对象。

不成功的原因,你仔细检查一下,
IO_STACK_LOCATION.DeviceObject ;
有时还需要填写 IO_STACK_LOCATION.FileObject 的值。


你的认可是对我最大的鼓励!
xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-12 10:10
多谢指教。我编写的是一个NT下的串口遗留驱动,非即插即用的。在NT下运行OK,但到了2000下就不行了,用SOFTICE调试,只能进入到DRIVERENTRY,往下就什么也干不了了,进入不到ADDdevice以及Create等,这是因为IOmanager未发送IRP还是我得设计使得驱动程序接受不到IRP呢?
看CHRISCANT的windowsWDM设备驱动程序开发指南,说只要将NT下的驱动拷到winnts\'y\'s\'te\'mdrivers下,并启动他,就OK了,可是我这样做了后,注册表改了,有我得驱动名字,设备管理器里的非即插即用设备里也有驱动名字,可是在和应用程序交流时,一直说无法找到设备。
我还是一个菜鸟。希望大家帮帮我啊。
我编写的是一个读卡器驱动。
laudraup
驱动牛犊
驱动牛犊
  • 注册日期2003-05-01
  • 最后登录2008-04-30
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-11-12 14:46
你的问题可以归结为:
有一个nt4下的读卡器驱动,并且nt下可以正常工作。
现在的问题是,如何把它移植到2000下,使它能够在2k下操纵你的读卡器? am i right??

可以理解成为一个驱动移植的问题吗??
 :D :D :D
hldaap os noh ss!w I
icube
驱动牛犊
驱动牛犊
  • 注册日期2002-04-11
  • 最后登录2004-12-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-11-13 12:44
第一,请确认你是否在DriverEntry里初始化了AddDevice的入口,如果初始化了,那么你需要做以下的事情:nt加载driver是通过调用DriverEntry来完成的,2k采用了PNP架构,因此驱动真正的加载是通过调用AddDevice来完成的(调用DriverEntry只是说明你的driver的映象被载入),PNP的加载过程离不开扫描注册表中的Enum树,因此要让系统调用你的AddDevice接口你必须在Enum树中添加相应的键,由于你的设备非即插即用,因此你要把键放在HKLM\\SYSTEM\\CurrentControlSet\\Enum\\Root下面,里面要添加设备id键和实例id子键,具体你可以参考Root下面的其它键,其实这个过程不应该手工添加,你应该为你的driver写一个inf,然后通过添加设备面板来安装,这里的内容就不说了.
icube
驱动牛犊
驱动牛犊
  • 注册日期2002-04-11
  • 最后登录2004-12-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-11-13 13:06
犯了个错误,Enum键下的东西你不好直接改,他对LocalSystem有所有权限,一般的用户没有,只有写inf文件或者使用SetupDiSetDeviceRegistryProperty(setup api,见msdn)
xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-11-13 14:05
谢谢高手,我实施先。
xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-11-13 14:23
注册表的修改。我是通过光盘上提供的一个工具进行的,对照您所说的,都已经改好了,不是手动改的。不过你说的设备ID和实例ID,我不太清楚,不知道写了没有.
您知道怎样将NT下的驱动移植到2000上吗???
给分30。
帮帮菜鸡把
 :(

[编辑 -  11/13/03 by  xiaorain]
icube
驱动牛犊
驱动牛犊
  • 注册日期2002-04-11
  • 最后登录2004-12-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-11-13 19:08
你问的问题有些有些宽泛,将nt的driver如何移植2k要具体问题具体分析,一般来说需要你的driver处理pnp请求,ddk中有一些例子,你可以参考参考
xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-11-13 20:16
不好意思,我编的一个读卡器驱动,此读卡器是串口的,非即插即用设备,在nt下没问题。将nt下的驱动移植到2000后(没有任何修改源代码),安装后,找不到读卡器。你说要编写即插即用部分,可此设备根本就不支持PNP,不太明白为什么也要编写PNP?这是2000的要求把。
在2000下和nt下,同样的设备,为何驱动的要求和安装都不一样??
这就是微软的控制力体现吗?
觉着您超强,真想多赐教。
我的MSN是xiaorain1◎hotmail.com
谢谢您的帮助。给分了。
 ;)
dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-03-25 18:25
第一,请确认你是否在DriverEntry里初始化了AddDevice的入口,如果初始化了,那么你需要做以下的事情:nt加载driver是通过调用DriverEntry来完成的,2k采用了PNP架构,因此驱动真正的加载是通过调用AddDevice来完成的(调用DriverEntry只是说明你的driver的映象被载入),PNP的加载过程离不开扫描注册表中的Enum树,因此要让系统调用你的AddDevice接口你必须在Enum树中添加相应的键,由于你的设备非即插即用,因此你要把键放在HKLM\SYSTEM\CurrentControlSet\Enum\Root下面,里面要添加设备id键和实例id子键,具体你可以参考Root下面的其它键,其实这个过程不应该手工添加,你应该为你的driver写一个inf,然后通过添加设备面板来安装,这里的内容就不说了.


你好:-)
我的情况和你所说的很类似。
按你所说,通过inf文件安装驱动。
我的设备属于读卡器
在我的注册表里,可以看到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\SMARTCARDREADER

请问这种形式是对的吗?
还是应该legacy_***的?

现在我可以收到irp_mj_pnp,对于我的这种root 枚举的设备,应该怎样处理此irp?
还是我
游客

返回顶部