阅读:8393回复:58
如何得到 Passthru 绑定的网卡? [50 分]
现在我发现 NDIS 传给 PtBindAdapter() 的 DeviceName 是形如 \\Device\\{1E3457E5-2B26-44EA-9C72-B886E1337A46} 这样的东西,可是这个 GUID 并不是网卡的,而是 Passthru 导出的虚拟适配器的。
那我怎么能得到 Passthru 到底绑定了哪块网卡?从注册表里读吗? 我发现安装了 Passthru 之后,注册表的 N 个地方都多了很多东西,而这些东西中的大部分都不是 INF 搞出来的,是不是系统安装程序会在背后做很多不被我们了解的工作? |
|
沙发#
发布于:2002-12-06 16:40
根据inf系统还要做很多工作的,98不支持passthru的一个原因就是98系统不知道到该怎么安装一个IMD
|
|
|
板凳#
发布于:2002-12-06 16:45
你看一下pcausa的那个例子,里面就有得到网卡的名字的那些信息,他的上层的应用程序在启动的时候会向VXD取网卡的信息,你看一看应该就明白了,
55555555 把分给俺吧,呵呵 |
|
|
地板#
发布于:2002-12-06 16:54
你看一下pcausa的那个例子,里面就有得到网卡的名字的那些信息,他的上层的应用程序在启动的时候会向VXD取网卡的信息,你看一看应该就明白了 不一样啊 mikeluo,那个 PIM 站在 Protocol 跟网卡中间,它在 Protocol 绑定下层网卡时“窃取”了绑定信息,绑定信息中的网卡名是“0001,0002”这种形式的,那就是真正网卡的 ID 啊,可是 Passthru 并不能得到这些啊。 mikeluo 帮忙,分不成问题! |
|
地下室#
发布于:2002-12-06 17:06
这个问题我也在关注中,通过ProtocolBindAdapter中的参数看到的Devicename就是上面说的虚拟Adapter,如何能够知道,我得到的包是来自于我指定的那块网卡呢?我看DDK里面,似乎在Miniport里面可以对这个区分开,不过还是不太清楚,上面两位,我现在也是在研究这些细节问题,希望多多讨论
|
|
5楼#
发布于:2002-12-06 17:07
我现在找到一个方法,不过不知道是否可行:
比如说 Passthru 导出的 \\Device\\{F893D9C6-95BB-4030-8443-ADD346EE111D} 这个虚拟网卡,我在 HKEY_LOCAL_MACHINE\\System\\CurrentColtrolSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\xxxx\\Linkage 里面找到了: Export - \\Device\\{F893D9C6-95BB-4030-8443-ADD346EE111D} RootDevice - {F893D9C6-95BB-4030-8443-ADD346EE111D} {8878A099-A9ED-44FD-AAD9-2CDF66C2AB2C} UpperBind - Sniffer NM Tcpip 而“RootDevice”中后面那个 GUID “恰好”就是一个物理网卡的 ID。 不过我不知道这样操作是否总能成功,高手指点! |
|
6楼#
发布于:2002-12-06 17:07
你用过sniffer,他在启动的时候会给你列出所有他绑定的网卡,让你选一块,pim的那个应用程序也会这样做,原理应该是一样的
|
|
|
7楼#
发布于:2002-12-06 17:12
那个 {4D36E972-E325-11CE-BFC1-08002BE10318} 就是 NetworkClass 中 Net 的 GUID,后面的“xxxx”是形如“0001”这样的网卡标识,我想这样应该可以吧?
|
|
8楼#
发布于:2002-12-06 17:14
可以给下层的网卡发送ndisrequest来查询相关信息,比如查询MAC地址用OID_802_3_CURRENT_ADDRESS,查询网卡描述可以使用OID_GEN_VENDOR_DESCRIPTION等
|
|
9楼#
发布于:2002-12-06 17:27
你用过sniffer,他在启动的时候会给你列出所有他绑定的网卡,让你选一块 我发现一个奇怪的现象,安装过 Passthru 之后 Sniffer Pro 好象就工作不太正常了,在“Select Setting”里面经常会列出重复的适配器,而且都是 Passthru 导出的虚拟适配器,并且经常会抓不到包,我只知道安装过 Sniffer Pro 之后“本地连接”里面会多出一个东西,但不知道它的工作机理。 |
|
10楼#
发布于:2002-12-06 17:37
不是吧?应该是多出来一个协议啊。
|
|
11楼#
发布于:2002-12-07 09:52
我们还是回到原来的问题吧:
我怎么能得到 Passthru 到底绑定了哪块网卡? |
|
12楼#
发布于:2002-12-07 11:05
在你的passthru binding到网卡的时候你要记录下来那些adapter的信息,然后上层要用的时候发个irp查一下就行了
|
|
|
13楼#
发布于:2002-12-07 11:20
在你的passthru binding到网卡的时候你要记录下来那些adapter的信息 以前我也以为当 NDIS 调用我们的 PtBindAdapter() 时是让我们的程序绑定到底层的物理网卡,可是昨天我实验了一下才知道是这样: 系统在 Protocol 和网卡之间插入了我们的 IM,同时暴露出一个虚拟 Adapter。这之后原来与网卡绑定的 Protocol 都绑定到了我们的虚拟 Adapter,而我们的 IM(虚拟 Adapter)又绑定到了物理网卡,这个过程对 Passthru 是透明的,所以 Passthru 根本不知道它下层是谁,它只知道 NDIS 仍给它一个虚拟 Adapter(Miniport)让它初始化,所以当 NDIS 调用我们的 PtBindAdapter() 让我们绑定时给我们的是那个虚拟 Adapter。 所以我想得到 Passthru 到底绑定了哪块网卡,从 Passthru 里就得不到什么信息了。 |
|
14楼#
发布于:2002-12-07 11:50
IM(虚拟 Adapter)又绑定到了物理网卡 他是怎么把IMbinding到网卡上去的??看一下ddk里面的protocolbindingadapter的文档 |
|
|
15楼#
发布于:2002-12-07 12:04
我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的,我们的 Passthru(IM) 最后只得到了这样一个信息:绑定到一个虚拟 Adapter 上去,并且为它初始化一个 Miniport 接口让它可以工作。
|
|
16楼#
发布于:2002-12-07 12:04
没这么复杂的!
Passthru在 “绑定” 时他就是一个协议! 当讨论“绑定” 本身时没有im与协议的区别。 |
|
|
17楼#
发布于:2002-12-07 12:12
我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的,我们的 Passthru(IM) 最后只得到了这样一个信息:绑定到一个虚拟 Adapter 上去,并且为它初始化一个 Miniport 接口让它可以工作。 偶觉得问题被复杂化。(还是偶理解错误?) 是向下“绑定”Adapter,向上输出虚拟 Adapter,并且为它初始化一个Miniport接口让它可以工作。 “我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的”---2k后是系统的做的,9x的要你去处理。 |
|
|
18楼#
发布于:2002-12-07 12:14
passthru binding到网卡的时候是实际的网卡,不是虚拟的,那个虚拟的是给协议层的
|
|
|
19楼#
发布于:2002-12-07 12:16
可关键就在于从前我一直都认为当 NDIS 调用我们的 PtBindAdapter() 时,它的语义是说“嗨,你要作为一个 Protocol 来绑定我给你的这个下层 Adapter,然后你再暴露给你上层一个虚拟 Adaoter 让它们绑定”。
但我经过实验以后却发现 NDIS 应该是这么说的“嗨,我已经把你这个 IM 插到合适的位置了,现在我又给你准备了一个虚拟 Adapter,你要跟它绑定,然后用你的 MPInitialize() 初始化这个虚拟 Adapter 然后形成一个可用的 Miniport 接口”。 我觉得理解这个语义对理解 IMD 很重要,还有就是这个帖子的本意:我想得到 Passthru 到底绑定了哪个地层网卡? |
|
上一页
下一页