阅读:2115回复:12
请问,中间层设备读写例程的参数中怎么得到设备扩展?
我说的设备扩展就是Passthru中的Adapt结构,我在其中加入了自己的参数。我想在IRP_MJ_READ 和IRP_MJ_WRITE处理例程中得到这个Adapt结构,请问它能得到吗?如果能,那么它是在Irp的那个地方?谢谢各位了
|
|
|
沙发#
发布于:2005-08-04 15:32
保存注册时一个全局变量不久可以了吗
|
|
|
板凳#
发布于:2005-08-04 15:58
全局变量?可行吗?我所遇见的都是从IRP中获得的,大家讨论一下吧
|
|
|
地板#
发布于:2005-08-04 16:07
我在读例程中什么也不干,直接将status设为失败,然后返回,结果就重启了,是不是中间层不支持这个IRP_MJ_READ啊?
|
|
|
地下室#
发布于:2005-08-04 16:28
响应IRP_MJ_READ时的设备扩展,和Adapt不是一回事,系统创建的这个设备的设备不能响应IRP_MJ_READ的。可参考NIDSUIO的例子。
|
|
5楼#
发布于:2005-08-04 17:30
谢谢老大的热心回复,NdisUio里面用的是IoCreateDevice方法,而且它没用设备扩展。我们是不是可以认为设备扩展并没有作用在这里?或许真可以用一个全局变量来代替它。
NdisUio那一套东西是protocol层次上的,用在中间层可以吗? |
|
|
6楼#
发布于:2005-08-04 18:32
我认为得不到,欢迎大家讨论,晚上我会验证一下。
|
|
7楼#
发布于:2005-08-04 19:17
希统创建的设备的设备不能响应IRP_MJ_READ的 确实是这样的。但是XpDDK中的passthru中给出了IRP_MJ_DEVICE_CONTROL的处理例程,这个可以,为什么IRP_MJ_READ就不行呢? |
|
|
8楼#
发布于:2005-08-05 11:52
难道我只能用IRP_MJ_DEVICE_CONTROL?谁知道IRP_MJ_DEVICE_CONTROL能不能返回参数啊?我想通过它把一个包带回应用程序,就像IRP_MJ_READ做的那样,可行吗?
|
|
|
9楼#
发布于:2005-08-05 18:19
我试了很多方法,没有办法得到PAdAPTER,但是我证实了,NDISUIO的那一套在PASSTHRU中完全可行。其实NDISUIO的方法本质就是使用的全局变量,所以他不用设备扩展。
另外,IRP_MJ_READ可以带参数返回。 |
|
10楼#
发布于:2005-08-06 08:15
老大就是老大,佩服啊!可惜这个新版不能给分了...
还有两个问题: 1、NdisUio中的接收包部分也可以适用于passthru吗?因为它里面涉及到PtReceive和PtReceivePacket。而现有的描述或源码好像都只处理了PtReceive。 2、另外NdisUio是协议层,如果它和Passthru同时安装的话,它是不是要位于Passthru的上层呢? |
|
|
11楼#
发布于:2005-08-08 12:34
1、接收部分我没有试,你自己试一下。PtReceive和PtReceivePacket都要处理。不同的网卡响应的函数不同,一般8139都响应PtReceivePacket,8029在2K下调用的是PtReceive,别的就没有测试过了,总之,都处理了就没有问题了。
2、是的。 |
|
12楼#
发布于:2005-08-10 12:41
老大,NdisUio是不是只能在局域网里收包和发包?我看它的接收和发送都是只有协议类型和地址字段
|
|
|