edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:8393回复:58

如何得到 Passthru 绑定的网卡? [50 分]

楼主#
更多 发布于:2002-12-06 16:38
现在我发现 NDIS 传给 PtBindAdapter() 的 DeviceName 是形如 \\Device\\{1E3457E5-2B26-44EA-9C72-B886E1337A46} 这样的东西,可是这个 GUID 并不是网卡的,而是 Passthru 导出的虚拟适配器的。

那我怎么能得到 Passthru 到底绑定了哪块网卡?从注册表里读吗?

我发现安装了 Passthru 之后,注册表的 N 个地方都多了很多东西,而这些东西中的大部分都不是 INF 搞出来的,是不是系统安装程序会在背后做很多不被我们了解的工作?

最新喜欢:

suerdj2ksuerdj... hysnffhysnff riririririri txysptxysp
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-06 16:40
根据inf系统还要做很多工作的,98不支持passthru的一个原因就是98系统不知道到该怎么安装一个IMD
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-06 16:45
你看一下pcausa的那个例子,里面就有得到网卡的名字的那些信息,他的上层的应用程序在启动的时候会向VXD取网卡的信息,你看一看应该就明白了,
55555555
把分给俺吧,呵呵
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-06 16:54
 
你看一下pcausa的那个例子,里面就有得到网卡的名字的那些信息,他的上层的应用程序在启动的时候会向VXD取网卡的信息,你看一看应该就明白了


不一样啊 mikeluo,那个 PIM 站在 Protocol 跟网卡中间,它在 Protocol 绑定下层网卡时“窃取”了绑定信息,绑定信息中的网卡名是“0001,0002”这种形式的,那就是真正网卡的 ID 啊,可是 Passthru 并不能得到这些啊。

mikeluo 帮忙,分不成问题!
skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-06 17:06
这个问题我也在关注中,通过ProtocolBindAdapter中的参数看到的Devicename就是上面说的虚拟Adapter,如何能够知道,我得到的包是来自于我指定的那块网卡呢?我看DDK里面,似乎在Miniport里面可以对这个区分开,不过还是不太清楚,上面两位,我现在也是在研究这些细节问题,希望多多讨论
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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。

不过我不知道这样操作是否总能成功,高手指点!
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-06 17:07
你用过sniffer,他在启动的时候会给你列出所有他绑定的网卡,让你选一块,pim的那个应用程序也会这样做,原理应该是一样的
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-06 17:12
那个 {4D36E972-E325-11CE-BFC1-08002BE10318} 就是 NetworkClass 中 Net 的 GUID,后面的“xxxx”是形如“0001”这样的网卡标识,我想这样应该可以吧?
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-06 17:14
可以给下层的网卡发送ndisrequest来查询相关信息,比如查询MAC地址用OID_802_3_CURRENT_ADDRESS,查询网卡描述可以使用OID_GEN_VENDOR_DESCRIPTION等
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-06 17:27
 
你用过sniffer,他在启动的时候会给你列出所有他绑定的网卡,让你选一块


我发现一个奇怪的现象,安装过 Passthru 之后 Sniffer Pro 好象就工作不太正常了,在“Select Setting”里面经常会列出重复的适配器,而且都是 Passthru 导出的虚拟适配器,并且经常会抓不到包,我只知道安装过 Sniffer Pro 之后“本地连接”里面会多出一个东西,但不知道它的工作机理。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
10楼#
发布于:2002-12-06 17:37
不是吧?应该是多出来一个协议啊。
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-12-07 09:52
我们还是回到原来的问题吧:


我怎么能得到 Passthru 到底绑定了哪块网卡?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-12-07 11:05
在你的passthru binding到网卡的时候你要记录下来那些adapter的信息,然后上层要用的时候发个irp查一下就行了
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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 里就得不到什么信息了。
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-12-07 11:50
 
IM(虚拟 Adapter)又绑定到了物理网卡

他是怎么把IMbinding到网卡上去的??看一下ddk里面的protocolbindingadapter的文档
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-12-07 12:04
我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的,我们的 Passthru(IM) 最后只得到了这样一个信息:绑定到一个虚拟 Adapter 上去,并且为它初始化一个 Miniport 接口让它可以工作。
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-12-07 12:04
没这么复杂的!

Passthru在 “绑定” 时他就是一个协议!

当讨论“绑定” 本身时没有im与协议的区别。
[color=red]大头鬼! :P[/color]
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-12-07 12:12
我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的,我们的 Passthru(IM) 最后只得到了这样一个信息:绑定到一个虚拟 Adapter 上去,并且为它初始化一个 Miniport 接口让它可以工作。


偶觉得问题被复杂化。(还是偶理解错误?)

是向下“绑定”Adapter,向上输出虚拟 Adapter,并且为它初始化一个Miniport接口让它可以工作。

“我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的”---2k后是系统的做的,9x的要你去处理。
[color=red]大头鬼! :P[/color]
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-12-07 12:14
passthru binding到网卡的时候是实际的网卡,不是虚拟的,那个虚拟的是给协议层的
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-12-07 12:16
可关键就在于从前我一直都认为当 NDIS 调用我们的 PtBindAdapter() 时,它的语义是说“嗨,你要作为一个 Protocol 来绑定我给你的这个下层 Adapter,然后你再暴露给你上层一个虚拟 Adaoter 让它们绑定”。

但我经过实验以后却发现 NDIS 应该是这么说的“嗨,我已经把你这个 IM 插到合适的位置了,现在我又给你准备了一个虚拟 Adapter,你要跟它绑定,然后用你的 MPInitialize() 初始化这个虚拟 Adapter 然后形成一个可用的 Miniport 接口”。

我觉得理解这个语义对理解 IMD 很重要,还有就是这个帖子的本意:我想得到 Passthru 到底绑定了哪个地层网卡?
上一页
游客

返回顶部