square
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2004-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2224回复:10

请教一个关于ProtocolBindAdapter问题

楼主#
更多 发布于:2001-10-16 20:41
我看一个中间层驱动程序时,在绑定underlying NIC有一个函数看明白
  ProtocolBindAdapter(
    OUT PNDIS_STATUS Status,
    IN NDIS_HANDLE  BindContext,
    IN PNDIS_STRING  DeviceName,
    IN PVOID  SystemSpecific1,
    IN PVOID  SystemSpecific2
    );
其中参数DevieceName这个参数到底是从哪里来的?
没理解错的ProtocolBindAdapter应该时由ndis自动调用,由于可以绑定的网卡有多个,就不知道该怎么变化这个参数。

最新喜欢:

moqingsongmoqing...
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-16 21:17
看说明了没啊??英文不行我翻译了一不份了啊!!

3) In the  context of  BindAdapterHandler and  after opening of the  underlying physical adapter succeeds, the Passthru driver  queries the  reserved keyword "UpperBindings" to  get a list of  device names for the  virtual adapters that this  particular binding is to  expose.

4) For each  device name, the  Passthru driver calls  NdisIMInitializeDeviceInstance.

5) In  response, Ndis will call back Passthru miniport  InitializeHandler entry point.

看这段就知道了啊!!
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
square
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2004-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-17 22:24
after opening of the underlying physical adapter succeeds

问题是under lying physical adapter有多个 我怎么知道到底去打开哪一个?这个函数不是由程序调用的
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-17 23:47
你为什么要知道打开的是哪一个呢?你只知道他是虚拟的适配器不就可以了?如果还要知道是哪一个,那还要中间层干什么?要知道哪个的是nic miniport才需要的!调用的也不是ndis函数获得的!pci的接口函数!
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
square
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2004-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-18 21:08
我在问一下 DeviceName这个参数 到底是由自己控制的还是由ndis库帮忙的

如果存在多个中间层,是不是绑定的并不一定就是underlying nic了


liuhb
驱动牛犊
驱动牛犊
  • 注册日期2001-09-25
  • 最后登录2002-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-10-19 12:19
DevieceName是由ndis传入的,在函数内无法控制。与查询UpperBindings无关,查询UpperBindings只是得到传入NdisIMInitializeDeviceInstanceEx的第二个参数。如果有多个
IM Driver叠加,你的PtBindAdapter传入的DevieceName总是你下一层的DevieceName,当然它有可能是另一个IM Driver的虚拟adapter.

混在深圳
xjtugyh
驱动牛犊
驱动牛犊
  • 注册日期2001-08-27
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-10-20 13:20
我觉得有两种情况:
1。驱动程序是静态加载,在初始化时调用函数NdisOpenProtocolConfiguration NdisOpenConfigurationKey or NdisOpenConfigurationKeyName获得网卡信息(在注册表里都以键值
0000、0001等记录),然后调用NdisOpenAdapter。
2。动态加载:驱动程序初始化时BindAdapterHandler并不被ndis调用,只是当用户deviceiocontrol bind命令时才被调用。此时用户调用参数中包含adapter name,ndis 在调用bindadapterhandler时将该值传递给形参devicename。
liuhb
驱动牛犊
驱动牛犊
  • 注册日期2001-09-25
  • 最后登录2002-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-10-20 14:01
请教,静态加载和动态加载分别在什么时候?
混在深圳
square
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2004-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-10-21 10:36
(PtBindAdapter传入的DevieceName总是你下一层的DevieceName,当然它有可能是另一个IM Driver的虚拟adapter. )
我想问得就是怎么来区别这个devicename,我在程序中怎么控制跟哪一层绑定。
liuhb
驱动牛犊
驱动牛犊
  • 注册日期2001-09-25
  • 最后登录2002-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-10-21 11:29
[QUOTE]原本由 square 发表
[B](PtBindAdapter传入的DevieceName总是你下一层的DevieceName,当然它有可能是另一个IM Driver的虚拟adapter. )
我想问得就是怎么来区别这个devicename,我在程序中怎么控制跟哪一层绑定。
 [/B][/QUOTE]

这个问题我不太敢肯定,我初步的理解是这样的:如果有多个IM Driver,他们应该是分层的关系。也就是说,上层绑定的总是下层的虚拟的adapter,并且应该是无法判断的(即透明的)。而这种上下层的关系应该是安装时决定的。安装时如何决定呢?可能后安装的总是把自己放在最下面。实际上,我知道,在WOSA的结构中,也有类似的问题,并且没有解决的很好。
混在深圳
xjtugyh
驱动牛犊
驱动牛犊
  • 注册日期2001-08-27
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-10-23 09:42
静态加载是在系统启动时加载,在整个系统存活期内不能卸载。
动态加载是用户需要时才告诉系统加载所需的驱动程序,如调用CreateFile函数时。
游客

返回顶部