阅读:1665回复:17
不属于一个DeviceStack的独立的两个驱动之间的调用各位大佬!!帮忙看一下!!我的设想对不对?(多多给分!)
各位大虾:
我正开发一个程序,要是实现的目标如下: 我有一个网卡驱动程序---完全好用,我现在想另外开发一个驱动,此驱动向原来的网卡驱动发送 irp(IRP_MN_QUERY_INTERFACE),来获得网卡所用总线的接口(interface) , 我设想用IoGetDeviceObjectPointer()例程 取得原网卡驱动的DeviceObject,给IoCallDriver()用, 用 IoCallDriver(DeviceObject,irp)调用网卡, 各位大虾,我的设想可行否?我老板崔的急,我怕设想不对耽误时间!! 我的驱动与原来的网卡不在一个设备堆栈!! |
|
最新喜欢:![]()
|
沙发#
发布于:2003-02-18 16:56
网卡驱动程序有源代码吗?
|
|
板凳#
发布于:2003-02-18 17:40
有的
|
|
|
地板#
发布于:2003-02-18 21:38
即可以写成所谓的“紧耦合”驱动程序。
你的网卡在AddDevice用IoRegisterDeviceInterface暴露一个接口,然后调用IoSetDeviceInterface启用。 后来的(高级)驱动,通过接口来调用函数。绕过IoCallDriver了。 |
|
地下室#
发布于:2003-02-19 00:12
如果我 的驱动在上,想调用的驱动在下呢?
应该怎样操作? |
|
|
5楼#
发布于:2003-02-19 09:09
支持一下!
|
|
6楼#
发布于:2003-02-19 09:10
用IoGetDeviceObjectPointer() 取得 PFILE_OBJECT
然后调用 KsSynchronousIoControlDevice(); 走 DeviceIoControl 。 |
|
|
7楼#
发布于:2003-02-19 09:31
关注
|
|
|
8楼#
发布于:2003-02-19 11:16
用IoGetDeviceObjectPointer() 取得 PFILE_OBJECT 请教:能用ZwCreateFile,ZwWriteFile等函数吗? |
|
9楼#
发布于:2003-02-19 11:32
RE arthurtu:
我的目的是,让网卡所处的总线暴露出它的接口(interface), 所以,我想它发送IRP_MN_QUERY_INTERFACE,然后用它的interface.getdata(或setdata)去操作总线上的映射的memory; 即:我的驱动想原有的网卡驱动发送IRP_MN_QUERY_INTERFACE IRP 但,网卡的deviceObject(IoGetDeviceObjectPointer例程将用到此参数)是不能像普通的wdm驱动的设备对象一样由AddDevice()创建的, 我查到用NdisMRegisterDevice()勉强可创建一个,但我把IRP发给他后,我必须得在miniport()驱动中自己写派遣例程转发IRP给总线驱动。所以,对我来说只是IoCallDriver()中的DeviceObject参数没法获得,你的建议还是没解决网卡的设备对象的获得 re swf2003: 网卡的deviceObject无法获取,FileObject就更没法定位了,即IoGetDeviceObjectPointer()的第一个参数怎样解决? |
|
|
10楼#
发布于:2003-02-19 13:39
RE arthurtu: 用符号链接名 (SymbolicLink) !! |
|
|
11楼#
发布于:2003-02-19 13:44
[quote]用IoGetDeviceObjectPointer() 取得 PFILE_OBJECT 请教:能用ZwCreateFile,ZwWriteFile等函数吗? [/quote] 理论上也能用 ZwCreateFile,ZwWriteFile 。 在 ZwCreateFile 时文件名与 IoGetDeviceObjectPointer()的一致。但ZwWriteFile 不一定能行,因为 Driver 中 不一定支持 IRP_MJ_WRITE。 |
|
|
12楼#
发布于:2003-02-19 13:56
据资料(ddk)
我们现在讨论的驱动可以 看作是 filter driver, 如果能够让 pnp 管理器把我们的驱动放在 系统提供的驱动 在设备栈连接的话,所有的问题就都不成问题了。 好像这些操作和代码无关。 因为 pdo ,即设备栈下面的驱动是系统作为参数传进来的。 我看ddk 说的是 应该在 inf中 指定 Dependenc 和 启动的顺序。 具体的我还没弄明白。 等弄明白了在和大家讨论。 见笑见笑! |
|
|
13楼#
发布于:2003-02-19 14:00
RE swf2003:
请问在NDIS的符号链接名(SymbolicLink),如何获取? 关于这个问题我上一个帖子的附件有一些说明, 不知各位有什么建议? |
|
|
14楼#
发布于:2003-02-19 19:22
RE arthurtu: 我对NDIS的不熟。 如果可以有个DeviceObject,通过所谓“耦合”,你可以调用网卡的函数,网卡获得总线的接口应该是可以的吧? HiDriver ... Call LowFunction1----> ------>函数表(LowFuntion0,LowFunction1...)---> LoDriver ------>Lowfunction1---->返回 还需要给总线发IRP吗? |
|
15楼#
发布于:2003-02-20 09:23
re arthurtu:
实际上,我现在做的就是“紧耦合“,但我的底层驱动对象是网路驱动,我无法获得总线interface,ndis的方式与标准的wdm不同, 不知你能否有关于,wdm与ndis相互操作的例程与资料 谢谢老兄!! |
|
|
16楼#
发布于:2003-02-20 09:34
re arthurtu:
你能否告诉我,“紧耦合“英文怎么说? |
|
|
17楼#
发布于:2003-02-20 16:17
我也想知道。 :D
|
|