1989年,microsoft和3com两公司提出了一个界说mac层与osi模子高层和谈驱动法式之间的收集培植接口范例(network device interface specification : ndis),ndis给数据交流提出了一个天真的情况,它范例了软件接口──称为ndis接口,传输和谈可用它与网卡驱动法式进行通信。是以在windows nt情况下拓荒焦点态网卡驱动法式应遵循ndis范例。
对于高速收集fddi(fiber distributed data interface)网卡驱动法式还需要smt(station management)站治理功能的实现,否则将不能作为一个fddi站连入环结构中,只能实现点到点间的数据通信。故有需要将smt软件移植到网卡驱动法式中,这将又导致对miniport nic驱动法式编程框架的损坏,于是有需要形成fddi网卡驱动法式(包含smt)与windows nt垄断系统的优越接口──由逻辑网卡的注册和mac层驱动法式的初始化来完成。
所以,)。多供给者路由选择法式决意适合的供给者,然后借助于供给者,对应用哀告到响应的转发法式做出选择。
§1.1.2 windows nt收集驱动法式
windows nt撑持两种范例的收集驱动法式
传输驱动法式
实现数据链路层中的逻辑链路节制子层协议和传输层和谈。向 下与ndis接口,向上与tdi接口。
网卡驱动法式
实现对物理层的治理和数据链路层中介质接见节制子层和谈,经过过程ndis向下治理物理网卡,向上与传输驱动法式通信。
§1.1.3 windows nt网卡驱动法式
windows nt情况下的网卡驱动法式也分为两种:
miniport网卡驱动法式:miniport驱动法式只须实现与收集硬件相关的垄断(包含发送和领受)。而全数底层网卡驱动法式的通用垄断(仿佛步),日常由ndis接口法式来实现。
full网卡驱动法式:full网卡驱动法式必需实现全数硬件相关和同步、排队等垄断。例如full网卡驱动法式为了响应数据领受,需要连结ndis.h作为miniport驱动法式的首要头文件,界说了miniport驱动法式的进口点、ndis接口库函数和通用数据结构。
上边缘函数的浸染是网卡驱动与ndis接口库进行通信,而下边缘函数是tdi和谈驱动法式与ndis通信的手法。
§1.2.1 miniport网卡器械
ndis用一个叫做逻辑网卡的软件器械来描摹系统中的每块网卡,而逻辑网卡与windows nt培植器械的通信由i/o子系统来治理,描摹网卡的培植器械包含相关的收集信息如名字、收集地址和网卡内存基地址等,它还包含与硬件相关的驱动法式状况数据(绑缚数目,绑缚句柄,包过滤数据库等)。ndis分配一个句柄到miniportinitialize这个上边缘函数的一个结构中,然后miniport网卡驱动法式将在往后供给这个句柄来给ndis挪用,这个结构一贯被ndis连结,而且对miniport驱动法式不透明。
当miniport网卡驱动法式初始化一块网卡时,它成立自己的内部数据结构来描摹网卡,纪录需要它治理的与培植相关的状况信息。当miniport网卡驱动法式挪用ndismsetatttibutes或ndismsetattributesex两ndis库函数时,它传递一个句柄给这数据结构。这样,当挪用miniport驱动法式进口点时,它就传递这个句柄来验证驱动法式所对应的网卡的正确性。这个数据结构为miniport网卡驱动法式所拥有并维护。
§1.2.2收集器械标识符
miniport nic驱动法式还需要维护一组器械,这些器械是系统界说的器械标识符(object idetifier:oid)来标识,以描摹驱动法式的机能和当前状况信息。为盘问这些信息,上层驱动法式挪用ndisrequest向ndis接口库指示oid。oid透露表现了挪用所需的信息范例,如miniport驱动法式所撑持的lookahead缓冲区巨细等。ndis接到上层驱动法式的盘问哀告,将oid传递给上边缘函数miniportqueryinformation实现对oid的盘问,若是上层驱动法式哀告改变状况信息则挪用miniportsetinformation实现对oid的设置。
§1.2.3 miniport网卡驱动法式代码
典型的miniport nic驱动法式必需有一些函数来经过过程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:中止屏障。
其余,每个网卡驱动法式必需有一个初始化进口点,由driver entry