smallcat0008
驱动牛犊
驱动牛犊
  • 注册日期2004-08-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分504分
  • 威望62点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
阅读:1847回复:7

IMD的DriverEntry什么时候被调用?NDIS在IMD中表现为什么方式?一个对象还是就是一个规范?

楼主#
更多 发布于:2005-06-22 19:10
  IMD的DriverEntry什么时候被调用?NDIS在IMD中表现为什么方式?一个对象还是就是一个规范?

最新喜欢:

quickerquicke...
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-06-22 20:15
ndis分成protocol驱动,miniport驱动,protocol driver 要绑定到miniport driver 上,imd 驱动就是在
protocol driver和miniport driver之间插了一层,对上层的protocol driver 表现为一个miniport driver,
对下面的miniport driver 表现为一个protocol driver.
至于imd的driverentry什么时候被调用,和其他驱动一样,当驱动被系统加载的时候,就会被调用,类似于上层的dll的dllmain
smallcat0008
驱动牛犊
驱动牛犊
  • 注册日期2004-08-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分504分
  • 威望62点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-23 08:55
请问DriverEntry中的两个参数到底是什么意思?NdisWrapperHandle到底指向谁?还有driverentry什么时候被系统加载呢?谢谢zhaock 老大拉
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-06-23 10:01
DriverEntry第一个参数指向DriveObject的指针,第二个参数好像是是驱动程序在注册表中的路径,一般用不到,具体用ice跟踪一下,就明了了。NdisWrapperHandle实际上是一个指针PNDIS_WRAPPER_HANDLE,ndis内部用的,你不用关心。
至于imd DriverEntry具体什么时候被加载,应该是是imd什么时候被加载吧?我也不知道,对于windows这种源代码不公开的os,很多东西,我们只能按照ms的规范去做,就够了,对于linux,我们就可以搞清楚所有的细节。虽说windows代码泄漏了,但目前泄漏出来的w2k的代码,也不包含ndis这部分,nt4的部分可能太老了,和2k以后的也有了很大的差别。当然也不是完全没有办法知道,我们可以在 imd driverentry设置个断点(已经加载了ntoskrnl,ndis的symbols,)然后溯栈,可以知道是谁在调用imd DriverEntry。不了解这个细节,并不会妨碍你实现imd driver.
tanjer
驱动牛犊
驱动牛犊
  • 注册日期2005-06-20
  • 最后登录2005-09-28
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-23 11:46
我用passthru 试过。。当在属性里 打勾IM的时候 passthru!driverentry 就会被调用。。。这跟我以前理解有出入。。我以前认为: 只要安装了 passthru后 入口函数就被调用。。驱动就被载入 打勾导致PtBindAdapter调用 去掉导致PtUnbindAdapter调用。。
另 观察了DriveObject 发现后来 里面的处理IRP的函数 都填成 ndis!********+abc 之类的。。。
也创建了个设备。。。。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2005-06-23 12:11
>>另 观察了DriveObject 发现后来 里面的处理IRP的函数 都填成 ndis!********+abc 之类的。。。
>>也创建了个设备。。。。
imd调用NdisIMRegisterLayeredMiniport,这个函数会创建设备,并将imd DriverObject里面的Dispatch函数设置成ndis的内部函数
tanjer
驱动牛犊
驱动牛犊
  • 注册日期2005-06-20
  • 最后登录2005-09-28
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-23 12:25
调用NdisIMRegisterLayeredMiniport,这个函数会创建设备 我大概也猜出来了

让我困惑的是 上层是怎么知道 把包发给 这个新创建的设备.......。。

zhao版 来支几招吧。。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2005-06-23 16:03
这个设备和上层协议发包好像没有什么关系,主要是处理,应用程序可以直接query ,set miniport driver的oid. 至于发包,还是上层协议绑定到你的虚拟miniport后,就可以调用NdisSend发包了。
游客

返回顶部