netbeecc
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:2179回复:5

请教:如何让passthru绑定指定的网卡?

楼主#
更多 发布于:2003-06-25 11:55
各位老大,我现在被这个问题搞的头都大了。passthru自带的inf文件中可以用:
HKR, Ndi\\Interfaces, FilterMediaTypes,    , \"ethernet\"
这一句来指定将passthru绑定到以太网卡上,可是如果有多块网卡,就会绑定到所有网卡。假如写\"ethernet, wan\"则既绑定到所有网卡和拨号上。那么怎么才能指定要绑的网卡呢?
我的思路有二:
1. 不修改inf文件,绑定所有网卡,而是在PtBindAdapter中判断DeviceName是否是要绑定的,如果不是则让*Status = NDIS_STATUS_RESOURCES返回。
这个我试了,那些不是我要绑定的网卡不能正常工作了。而且,我觉得这个思路不是很完美。

2. 比较完美的办法是在安装的时候就指定了绑定的网卡,这样让其余的网卡根本就不会触发DriverEntry、PtBindAdapter之类的函数。这个思路不知道是否正确,我现在正在看Snetcfg和filter.dll的源码,看了一堆COM、INetCfg之类的东东,还是不知如何下手,如何在安装时将passthru只安装在要绑定的网卡上面?

我们大家讨论讨论吧,也请高手能出手相助,多谢!!!

最新喜欢:

wfinewfine
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-25 12:06
passthru要绑定到哪块网卡是在安装的时候就决定的。
第一种方法是不行的。因为绑定关系已经建立了,你不让prbindadapter成功的唯一后果就是让系统认为这块网卡坏掉了,不能工作了。

第二种方法是可行的。去看ddk里面的notify object的那个例子,用那个dll来做这个工作
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
baoyibao99
禁止发言
禁止发言
  • 注册日期2003-05-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分894分
  • 威望8415点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-25 13:48
用户被禁言,该主题自动屏蔽!
rxtfun
禁止发言
禁止发言
  • 注册日期2001-04-10
  • 最后登录2016-01-16
  • 粉丝0
  • 关注0
  • 积分4242分
  • 威望21210点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-26 15:12
用户被禁言,该主题自动屏蔽!
fanxf
驱动牛犊
驱动牛犊
  • 注册日期2002-12-20
  • 最后登录2006-03-14
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-27 01:26
另一简单法:在openadapter时取到设备名,再在注表中找到网卡名,在应用层让用户选取,后通知你的驱动.
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-27 08:29
这是以前的一个帖子:

>> 欢迎您: antspower |安全退出|我的收藏|修改资料 |收 件 箱|会员列表|文章搜索|统计一览|常见问题| 驱动开发网
 
 



 
 驱动开发论坛--(开发者的大社区:程序、人生、娱乐)
 NDIS网络接口开发
   如何得到 Passthru 绑定的网卡? [50 分]  

 打印此页 加入收藏夹 <<  1    2    3  >>  上一主题   下一主题    
作者  文章标题 如何得到 Passthru 绑定的网卡? [50 分]  
edust




资深会员



问题分数 : 50
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
    发表于: 2002/12/6 - 16:38
现在我发现 NDIS 传给 PtBindAdapter() 的 DeviceName 是形如 \\Device\\{1E3457E5-2B26-44EA-9C72-B886E1337A46} 这样的东西,可是这个 GUID 并不是网卡的,而是 Passthru 导出的虚拟适配器的。

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

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


  
      
  
 
mikeluo




论坛大佬



回答得分 : 0
贴子数量 : 1090
注册日期 : 2001/9/4
在线情况 : 离线
   发表于: 2002/12/6 - 16:40
根据inf系统还要做很多工作的,98不支持passthru的一个原因就是98系统不知道到该怎么安装一个IMD


 

____________________

学而不思则罔,思而不学则殆
学而思之,思而学之,岂非圣人乎?
  
      
  
 
mikeluo




论坛大佬



回答得分 : 0
贴子数量 : 1090
注册日期 : 2001/9/4
在线情况 : 离线
   发表于: 2002/12/6 - 16:45
你看一下pcausa的那个例子,里面就有得到网卡的名字的那些信息,他的上层的应用程序在启动的时候会向VXD取网卡的信息,你看一看应该就明白了,
55555555
把分给俺吧,呵呵


 

____________________

学而不思则罔,思而不学则殆
学而思之,思而学之,岂非圣人乎?
  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/6 - 16:54
引用:
--------------------------------------------------------------------------------
 你看一下pcausa的那个例子,里面就有得到网卡的名字的那些信息,他的上层的应用程序在启动的时候会向VXD取网卡的信息,你看一看应该就明白了
--------------------------------------------------------------------------------



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

mikeluo 帮忙,分不成问题!


  
      
  
 
skylgl




中级会员



回答得分 : 5
贴子数量 : 127
注册日期 : 2002/5/13
在线情况 : 离线
   发表于: 2002/12/6 - 17:06
这个问题我也在关注中,通过ProtocolBindAdapter中的参数看到的Devicename就是上面说的虚拟Adapter,如何能够知道,我得到的包是来自于我指定的那块网卡呢?我看DDK里面,似乎在Miniport里面可以对这个区分开,不过还是不太清楚,上面两位,我现在也是在研究这些细节问题,希望多多讨论


  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/6 - 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




论坛大佬



回答得分 : 0
贴子数量 : 1090
注册日期 : 2001/9/4
在线情况 : 离线
   发表于: 2002/12/6 - 17:07
你用过sniffer,他在启动的时候会给你列出所有他绑定的网卡,让你选一块,pim的那个应用程序也会这样做,原理应该是一样的


 

____________________

学而不思则罔,思而不学则殆
学而思之,思而学之,岂非圣人乎?
  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/6 - 17:12
那个 {4D36E972-E325-11CE-BFC1-08002BE10318} 就是 NetworkClass 中 Net 的 GUID,后面的“xxxx”是形如“0001”这样的网卡标识,我想这样应该可以吧?


  
      
  
 
bingjie




中级会员



回答得分 : 5
贴子数量 : 131
注册日期 : 2001/8/15
在线情况 : 离线
   发表于: 2002/12/6 - 17:14
可以给下层的网卡发送ndisrequest来查询相关信息,比如查询MAC地址用OID_802_3_CURRENT_ADDRESS,查询网卡描述可以使用OID_GEN_VENDOR_DESCRIPTION等


 

____________________

我思故我得

  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/6 - 17:27
引用:
--------------------------------------------------------------------------------
 你用过sniffer,他在启动的时候会给你列出所有他绑定的网卡,让你选一块
--------------------------------------------------------------------------------



我发现一个奇怪的现象,安装过 Passthru 之后 Sniffer Pro 好象就工作不太正常了,在“Select Setting”里面经常会列出重复的适配器,而且都是 Passthru 导出的虚拟适配器,并且经常会抓不到包,我只知道安装过 Sniffer Pro 之后“本地连接”里面会多出一个东西,但不知道它的工作机理。


  
      
  
 
fracker




版主



回答得分 : 5
贴子数量 : 8022
注册日期 : 2001/6/28
在线情况 : 离线
   发表于: 2002/12/6 - 17:37
不是吧?应该是多出来一个协议啊。


 

____________________

没什么好说的啦
  
        
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/7 - 09:52
我们还是回到原来的问题吧:


我怎么能得到 Passthru 到底绑定了哪块网卡?


  
      
  
 
mikeluo




论坛大佬



回答得分 : 0
贴子数量 : 1090
注册日期 : 2001/9/4
在线情况 : 离线
   发表于: 2002/12/7 - 11:05
在你的passthru binding到网卡的时候你要记录下来那些adapter的信息,然后上层要用的时候发个irp查一下就行了


 

____________________

学而不思则罔,思而不学则殆
学而思之,思而学之,岂非圣人乎?
  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/7 - 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




论坛大佬



回答得分 : 0
贴子数量 : 1090
注册日期 : 2001/9/4
在线情况 : 离线
   发表于: 2002/12/7 - 11:50
引用:
--------------------------------------------------------------------------------
 IM(虚拟 Adapter)又绑定到了物理网卡
--------------------------------------------------------------------------------


他是怎么把IMbinding到网卡上去的??看一下ddk里面的protocolbindingadapter的文档


 

____________________

学而不思则罔,思而不学则殆
学而思之,思而学之,岂非圣人乎?
  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/7 - 12:04
我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的,我们的 Passthru(IM) 最后只得到了这样一个信息:绑定到一个虚拟 Adapter 上去,并且为它初始化一个 Miniport 接口让它可以工作。


  
      
  
 
magicx




论坛大佬



回答得分 : 15
贴子数量 : 1911
注册日期 : 2002/2/22
在线情况 : 离线
   发表于: 2002/12/7 - 12:04
没这么复杂的!

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

当讨论“绑定” 本身时没有im与协议的区别。


 

____________________

嘿嘿~~
给分先!

偶是大头鬼!  
  
      
  
 
magicx




论坛大佬



回答得分 : 0
贴子数量 : 1911
注册日期 : 2002/2/22
在线情况 : 离线
   发表于: 2002/12/7 - 12:12
引用:
--------------------------------------------------------------------------------
我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的,我们的 Passthru(IM) 最后只得到了这样一个信息:绑定到一个虚拟 Adapter 上去,并且为它初始化一个 Miniport 接口让它可以工作。
--------------------------------------------------------------------------------



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

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

“我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的”---2k后是系统的做的,9x的要你去处理。


 

____________________

嘿嘿~~
给分先!

偶是大头鬼!  
  
      
  
 
mikeluo




论坛大佬



回答得分 : 0
贴子数量 : 1090
注册日期 : 2001/9/4
在线情况 : 离线
   发表于: 2002/12/7 - 12:14
passthru binding到网卡的时候是实际的网卡,不是虚拟的,那个虚拟的是给协议层的


 

____________________

学而不思则罔,思而不学则殆
学而思之,思而学之,岂非圣人乎?
  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/7 - 12:16
可关键就在于从前我一直都认为当 NDIS 调用我们的 PtBindAdapter() 时,它的语义是说“嗨,你要作为一个 Protocol 来绑定我给你的这个下层 Adapter,然后你再暴露给你上层一个虚拟 Adaoter 让它们绑定”。

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

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


  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/7 - 12:18
引用:
--------------------------------------------------------------------------------
 “我觉得这种打断原来绑定关系,然后又把自己插进去的动作是系统在幕后进行的”---2k后是系统的做的
--------------------------------------------------------------------------------



对啊 magicx,我也认为这是系统做的,而且做完之后它给我们 PtBindAdapter() 的不是物理网卡,是个虚拟的。


  
      
  
 
mikeluo




论坛大佬



回答得分 : 0
贴子数量 : 1090
注册日期 : 2001/9/4
在线情况 : 离线
   发表于: 2002/12/7 - 12:19
不是的,那个虚拟网卡是在miniort的函数里面通过注册设备实现的,不是在binding adapter里面实现的


 

____________________

学而不思则罔,思而不学则殆
学而思之,思而学之,岂非圣人乎?
  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/7 - 12:28
MPInitialize() 里面没有注册设备啊,它只注册了一个 ioctl 接口。

而且我觉得那个虚拟 Adapter 是系统帮我们实现的,我们只是做了一些设置工作让它能够工作。

只是因为昨天和今天做了很多实验看到一些有趣的现象让我有了这种感觉。mikeluo,你可以在 PtBindAdapter() 里面 BGPRINT 一下 DeviceName,那确实是个虚拟 Adapter。


  
      
  
 
mikeluo




论坛大佬



回答得分 : 0
贴子数量 : 1090
注册日期 : 2001/9/4
在线情况 : 离线
   发表于: 2002/12/7 - 12:31
你的打印了几次?


 

____________________

学而不思则罔,思而不学则殆
学而思之,思而学之,岂非圣人乎?
  
      
  
 
edust




资深会员



回答得分 : 0
贴子数量 : 488
注册日期 : 2002/4/2
在线情况 : 离线
   发表于: 2002/12/7 - 12:37
刚安装时一共有 4 次,而且我看注册表里的东西也验证了这个结果。

我有两块网卡,每个一次,然后还有两个绑定到“WAN Miniport(IP)”和“WAN Miniport(Network Monitor)”的虚拟 Adapter,一共 4 次。


  
      
  
 
 
<<  1    2    3  >>
     删除主题 - 关闭主题 - 移动主题 - 主题置顶 - 提升主题  
  
放弃瘟草,现吃李草
游客

返回顶部