阅读:3457回复:2
DrvierNetwork miniport驱动学习(10)
前言
这一次重新研读DriverNetwork的有关miniport驱动的帮助文档,并以DriverNetwork中自带的nmne2k例子说明相应的知识点。 第一次重新学习内容:NDIS的miniport驱动框架 NDIS miniport的adapter类继承了KNdisMiniAdapter类,主要声明了所需的例程,例如Initialize(), Halt()和Reset()。这些例程可以是虚拟的或者非虚拟的,或者是派生类内联的成员函数。这些例程和模块的命名和DDK一一对应:Initialize() 对应MiniportInitialize();Halt() 对应MiniportHalt()。对这些例程的处理和IRQL级也和DDK相应的MiniportXxxx()一样。 参看文档Understanding the NDIS Miniport Driver Framework的图:该图描述了DriverNetworks框架类和驱动开发者要实现的类(黄颜色给出了)之间的关系。 驱动开发者提供了两个主要的类: 1)KNdisMiniDriver派生driver类:class NMNE2KDriver : protected KNdisMiniDrive driver派生类负责向NDIS注册miniport的adapter,并且必须实现唯一的虚拟方法KNdisMiniDriver::DriverEntry()。DriverEntry()一般只要注册KNdisMiniAdapter派生的miniport的 adapter类。在向NDIS注册了adapter之后,NDIS立即调用adapter类的Initialize()例程。DriverNetwork框架要求源文件包括宏:DECLARE_MINIDRIVER_CLASS(DriverClass) 2)KNdisMiniAdapter派生adapter类:class NMNE2KAdapter : public KNdisMiniAdapter Adapter类实现了全部的方法,分成两种类型:handlers和service。Handlers:驱动提供给NDIS回调用的,例如Initialize(),Halt()和Reset()等等。NDIS通过KNdisWrapper类调用这些handlers。对于每一个适配器类A,框架创建了一个KNdisWrapper<A>的一个实现,将NDIS回调转发给A定义的正确的handlers。所需要的handlers都在Characteristics.h文件的宏KNDIS_MINIPORT_HANDLER声明了,而且都必须声明,如果在该头文件中声明而又没有在adapter类中实现,NDIS就会调用默认的基类handler,报告“Handler not implemented!Check Characteristics.h”。services是NDIS提供给miniport调用的方法,这些服务通常由handler调用。 Instantiation过程:DriverNetwork框架自动生成一个KNdisMniportAdapter派生类的实体。框架向NDIS注册,截取初始NDIS的MiniportInitialize()回调函数,并创建一个adapter类的实体。创建adapter实体之后,框架将控制权交给Initialize() handler,Initialize()完成如下功能:1)声明硬件资源2)对NIC初始化。从Initialize()成功返回之后系统才能使用adapter。 Destruction过程:KNdisMiniportAdapter派生对象的销毁也由框架实现。在销毁之前,调用Halt() handler,完成如下功能:1)执行硬件关闭2)释放在Initialize()声明的资源。 成员函数: KNdisMiniAdapter - 构造函数 ~KNdisMiniAdapter - 析构函数 AllocateComplete - 共享内存分配完成 (handler) CancelSendPackets - 取消悬挂状态的发送分组(handler)(NDIS5.1 only) 当捆绑的协议或者中间驱动执行NdisCancelSendPackets请求时,调用该handle。如果miniport将分组在内部排队,他应该遍历整个悬挂发送分组链表,并且取消每一个取消id和CancelId匹配的分组。 CheckForHang - 检测适配器的悬挂条件 (handler) 这是一个可选handler。如果定义了该handler,NDIS每两秒钟调用一次。如果CheckForHang返回真,NDIS就调用驱动的Reset() handler。如果满足悬挂条件,就返回真。 DisableInterrupt - 适配器中断去能 (handler) EnableInterrupt - 适配器中断使能(handler) GetDeviceProperty |
|
最新喜欢:mapofl |
沙发#
发布于:2004-03-27 22:07
楼主!
你所说的nmne2k例子在哪?是不是miniport driver 的例子? 我正在找NDIS_WDM miniport driver的例子,搜不到啊! 你有吗?没有的话有一般miniport driver 例子参考一下也行! 谢谢 :D |
|
|
板凳#
发布于:2004-03-27 22:15
C:\Program Files\Compuware\SoftICE Driver Suite\DriverNetworks\Examples\Kndis\nmne2k
这是我的路径! 可能你用的不是compuware公司的softice! |
|