询,如果上层驱动程序请求改变状态信息则调用miniportsetinformation实现对oid的设置。
§1.2.3miniport网卡驱动程序代码
典型的miniportnic驱动程序必须有一些函数来通过ndis接口实现上层驱动程序与硬件的通信。这些函数称为上边缘服务函数。
这些上边缘服务函数由驱动程序的开发者根据驱动程序面向的特定低层网络类型和硬件以及相应环境,可以有选择地实现,但必须保证驱动程序最基本的功能,这些基本功能包括初始化、发送、中断处理、重置、参数查询与设置和报文接收。
miniportinitialize:操作系统根据系统配置信息,检测出网卡已安装时,由ndis接口在初始化时调用,主要完成低层网络类型确定,对应于物理网卡的逻辑网卡初始化,中断信息注册,网卡与主机通讯方式的确认。i/o端口的申请与注册,内存映像,mib的初始化,物理网卡的验证与初始化等。
miniportreconfigure:支持网卡参数动态变化,和miniportinitilize一样由ndis接口以初始化级别调度执行(不能屏蔽中断,必须由驱动程序承认并清除在此期间产生的中断),支持即插即用和软配置的网卡在动态改变参数时,必须提供此函数。
miniportqueryinformation:查询网卡的状态以及网卡驱动程序的操作或统计参数,如是否支持组通讯、网卡的物理速率是否支持回环、是否支持直接拷贝等,这些参数以oid方式统一管理。
miniportsetinformation:ndis接口或协议驱动程序通过调用此接口改变驱动程序维护的oid库,一些操作参数的改变也将同时改变驱动程序状态,例如组地址的设置。
miniportreset:包括网卡硬件重置和驱动程序软件重置,软件重置包括驱动程序状态重置,以及一些相关的参数重置,还需考虑有些参数的恢复,重置时不必完成所有正在活跃的外部请求,但必须释放已占用的外部资源。
miniporthalt:挂起网卡并释放该网卡驱动程序占用的所有资源,在此期间不屏蔽中断。
miniportisr:高优先级的中断处理程序,进行的工作包括初始中断处理类型,决定是否进行中断转交,对卡上中断进行处理等,该服务类型只在以下情况被调用:
ndis接口调用miniportinitialize和miniporthalt两函数时。 .中断处理类型设为每此中断处理过程都调用时。
为使系统能及时响应所有硬件中断,高优先级的硬件中断处理程序应尽可能的减少运行时间,防止长时间的屏蔽低优先级中断,避免造程中断丢失。
miniporthandleinterrupt:由中断延时处理程序在中断延时处理时进行调用。ndis排队所有的延时处理,该服务主要处理发送完成、报文接收、描述符用尽、溢出、网卡异常等中断。
miniportsend:ndis收到上层发送请求时经过若干协议处理再向下调用
此服务过程,发送的packet已含有llc和mac头,该服务过程进行边界对齐、packet约束重整、描述符映射和报文发送、以及发送资源和packet缓冲队列管理。
miniporttransferdata:多个已和网卡捆绑的协议驱动程序在接收到报文到达指示后,向网卡驱动程序发出传送请求以拷贝各自所需的报文数据部分,网卡驱动程序根据各协议驱动程序对单个packet是否进行多次拷贝,以决定是否暂存只允许单次拷贝的packet等。
miniportcheckhandle:ndis每秒调用此服务函数一次,驱动程序发现网卡异常时报告给ndis由ndis调用miniportreset进行硬件重恢复。miniportenableintrrupt:中断使能。 miniportdisableinterrupt:中断屏蔽。
另外,每个网卡驱动程序必须有一个初始化入口点,由driverentry函数实现,它和系统相关,由操作系统在装入驱动程序时调用,主要完成初始化ndiswrapper,再由wrapper初始生成驱动程序管理块并完成相应各种初始化工作,登录网卡驱动程序所有上边缘服务入口点,同时写入ndis版本信息。 §1.2.4ndis接口库
ndis接口库包括在ndis.sys中,它是一个核态函数库,有一套抽象的函数,无论协议驱动程序还是nic驱动程序都连接到这个库中,以实现上下层之间的操作。
第二章fddi网卡驱动程序的加载和运行
第一节网卡驱动程序的安装
windowsnt网卡驱动程序安装的目的是实现网卡相应硬件信息和驱动程序在windowsnt注册库中的注册,使windowsnt能够正确识别网卡,了解所必需的软硬件信息并能在windowsnt启动时加载相应驱动程序。 网卡驱动程序安装时,首先在主群组的控制面板中选择“网络”,然后添加网卡,指定相应信息文件──oemsetup.inf的路径,以完成以下两个必要的操作:
复制驱动程序到相应的系统目录(windowsnt根目录\\system32\\drivers\\)中;
在windowsnt注册库中存入相应软硬件信息。
下面主要以fddi网卡为例介绍安装驱动程序所必需的工作: §2.1.1网卡一般硬件参数
对于fddi网卡,必须在编写其oemsetup.inf文件时确定以下硬件参数: 总线类型:pci(5)……括号中的数字5表示pci总线在ndis中的总线类型代码;
厂商代号:0x5588……系统加载时确定网卡的标记,也是编程时确定pci槽号的标识; cfid:0x01;
介质类型:光纤(3)……括号中的数字表示光纤在ndis中的介质类型代码; 是否支持全双工:支持。
对于其它的硬件信息在此inf配置信息文件中可有可无,如若配置,则
可在驱动程序的编写时利用这些信息,方便编程,同时有利于其它应用对其参数的确定和使用。
§2.1.2fddi网卡加载时需在注册库登录表里做的网络配置 网卡驱动程序的安装通常将创建登录表中的四个不同子键: softwareregistrion
键,对应于驱动程序,存在于
hkey_local_machine\\software\\company\\productname\\version中。我们的fddi
网
卡
驱
动
程
序
所
对
应
的
是
hkey_local_machine\\software\\net612\\yhfddi\\yhfddi1.0; 网
卡
的
软
件
登
录
键
,
存
在
于
hkey_local_machine\\software\\microsoft\\windowsnt\\nt3.51\\networkcards\\yhfddi1; 驱
动
程
序
的
服
务
登
录
键
,
存
在
于
hkey_local_machine\\system\\currentcontrolset\\services 网
卡
的
服
务
登
录
键
,
存
在
于
hkey_local_machine\\system\\currentcontrolset\\services
对于每一个网络部件,一个名为netrules的特殊子键在邻近的驱动程序或网卡登录子键里创建,netrules标识网络部件为网络整体的一部分。 fddi网卡驱动程序对应的标准软件登录表项将出现在以下路径: hkey_local_machine\\software\\net612\\yhfddi\\yhfddi1.0; 驱动程序对应的标准项的值为: description=yhfddi/pciadaptercontroller