阅读:1380回复:1
NDIS IM driver 的一个流程以及关于绑定的一个问题。。。
我对于一个NDIS IM driver (以passthru为例)的流程是这么理解的:
1) 系统调用 DriverEntry 2) 系统调用 PtBindAdapter 3) PtBindAdapter 调用 NdisOpenAdapter 4) PtBindAdapter 调用 NdisIMInitializeDeviceEx 传入一个 ProtocolBindContext,就是保存我们 自己的一些信息了。在passthru里面就是 ADAPT 结构。 5) NdisIMInitializeDeviceEx 调用 MPInitialize 6) MPInitiailize 调用 NdisIMGetDeviceContext 获取 4 里面的 ProtocolBindContext 7) MPInitiailize 申请VirtualNicContext,注意passthru没有 申请,他只用了一个ADAPT结构来同时作为ProtocolBindContext 和 VirtualNicContext 8) MPInitialize 调用MPSetAttributesEx,传入 VirtualNicContext。 9) MPInitialize 返回 10) 再上层的protocol driver可以绑定到我们生成的 vitual nic. 我的问题是:再上层的protocol driver真的是在MPInitiailize 成功返回后才被系统调用他的PtBindAdapter然后绑定到达我们的 吗?他调用NdisOpenAdapter的时候我们的哪个函数会被回掉,还是 只有NDIS Library被调用?如果有多个Protocol driver绑定到 我们,与只有一个protocol绑定到我们,对我们会有什么影响,要不要特殊考虑这种情况? |
|
最新喜欢:![]() |
沙发#
发布于:2002-03-30 13:23
是的,因为只有本层(中间层)的MPInitiailize成功返回后,中间层才成功地建立一个虚拟的NIC,并在NDIS上进行记录(由MPInitiailize传进来的参数MiniprotAdapterHandle就是句柄)。
等上层来进行绑定而调用上层的ProtocolBindAdapter,NDIS就将刚刚虚拟好的NIC用DeviceName做参数,让上层进行绑定。 而上层有一个或多个PROTOCOL并没有关系。 |
|