阅读:2224回复:10
请教一个关于ProtocolBindAdapter问题
我看一个中间层驱动程序时,在绑定underlying NIC有一个函数看明白
ProtocolBindAdapter( OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2 ); 其中参数DevieceName这个参数到底是从哪里来的? 没理解错的ProtocolBindAdapter应该时由ndis自动调用,由于可以绑定的网卡有多个,就不知道该怎么变化这个参数。 |
|
最新喜欢:moqing... |
沙发#
发布于: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. 看这段就知道了啊!! |
|
|
板凳#
发布于:2001-10-17 22:24
after opening of the underlying physical adapter succeeds
问题是under lying physical adapter有多个 我怎么知道到底去打开哪一个?这个函数不是由程序调用的 |
|
地板#
发布于:2001-10-17 23:47
你为什么要知道打开的是哪一个呢?你只知道他是虚拟的适配器不就可以了?如果还要知道是哪一个,那还要中间层干什么?要知道哪个的是nic miniport才需要的!调用的也不是ndis函数获得的!pci的接口函数!
|
|
|
地下室#
发布于:2001-10-18 21:08
我在问一下 DeviceName这个参数 到底是由自己控制的还是由ndis库帮忙的
如果存在多个中间层,是不是绑定的并不一定就是underlying nic了 |
|
5楼#
发布于:2001-10-19 12:19
DevieceName是由ndis传入的,在函数内无法控制。与查询UpperBindings无关,查询UpperBindings只是得到传入NdisIMInitializeDeviceInstanceEx的第二个参数。如果有多个
IM Driver叠加,你的PtBindAdapter传入的DevieceName总是你下一层的DevieceName,当然它有可能是另一个IM Driver的虚拟adapter. |
|
|
6楼#
发布于:2001-10-20 13:20
我觉得有两种情况:
1。驱动程序是静态加载,在初始化时调用函数NdisOpenProtocolConfiguration NdisOpenConfigurationKey or NdisOpenConfigurationKeyName获得网卡信息(在注册表里都以键值 0000、0001等记录),然后调用NdisOpenAdapter。 2。动态加载:驱动程序初始化时BindAdapterHandler并不被ndis调用,只是当用户deviceiocontrol bind命令时才被调用。此时用户调用参数中包含adapter name,ndis 在调用bindadapterhandler时将该值传递给形参devicename。 |
|
7楼#
发布于:2001-10-20 14:01
请教,静态加载和动态加载分别在什么时候?
|
|
|
8楼#
发布于:2001-10-21 10:36
(PtBindAdapter传入的DevieceName总是你下一层的DevieceName,当然它有可能是另一个IM Driver的虚拟adapter. )
我想问得就是怎么来区别这个devicename,我在程序中怎么控制跟哪一层绑定。 |
|
9楼#
发布于:2001-10-21 11:29
[QUOTE]原本由 square 发表
[B](PtBindAdapter传入的DevieceName总是你下一层的DevieceName,当然它有可能是另一个IM Driver的虚拟adapter. ) 我想问得就是怎么来区别这个devicename,我在程序中怎么控制跟哪一层绑定。 [/B][/QUOTE] 这个问题我不太敢肯定,我初步的理解是这样的:如果有多个IM Driver,他们应该是分层的关系。也就是说,上层绑定的总是下层的虚拟的adapter,并且应该是无法判断的(即透明的)。而这种上下层的关系应该是安装时决定的。安装时如何决定呢?可能后安装的总是把自己放在最下面。实际上,我知道,在WOSA的结构中,也有类似的问题,并且没有解决的很好。 |
|
|
10楼#
发布于:2001-10-23 09:42
静态加载是在系统启动时加载,在整个系统存活期内不能卸载。
动态加载是用户需要时才告诉系统加载所需的驱动程序,如调用CreateFile函数时。 |
|