国产成人v爽在线免播放观看,日韩欧美色,久久99国产精品久久99软件,亚洲综合色网站,国产欧美日韩中文久久,色99在线,亚洲伦理一区二区

學(xué)習(xí)啦>論文大全>學(xué)科論文>計(jì)算機(jī)論文>

windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì)論文

時(shí)間: 謝樺657 分享

  驅(qū)動(dòng)程序一般指的是設(shè)備驅(qū)動(dòng)程序(Device Driver),是一種可以使計(jì)算機(jī)和設(shè)備通信的特殊程序。相當(dāng)于硬件的接口,操作系統(tǒng)只有通過(guò)這個(gè)接口,才能控制硬件設(shè)備的工作,假如某設(shè)備的驅(qū)動(dòng)程序未能正確安裝,便不能正常工作。因此,驅(qū)動(dòng)程序被比作“ 硬件的靈魂”、“硬件的主宰”、和“硬件和系統(tǒng)之間的橋梁”等。以下是學(xué)習(xí)啦小編為大家精心準(zhǔn)備的:windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì)相關(guān)論文。內(nèi)容僅供參考,歡迎閱讀!

  windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì)全文如下:

  前言

  windows nt是一個(gè)功能全面的操作系統(tǒng),具有完全集成式的連網(wǎng)能力,它的網(wǎng)絡(luò)模型開(kāi)始于mac子層,網(wǎng)絡(luò)接口卡(network interface card以后簡(jiǎn)稱(chēng)網(wǎng)卡或nic)驅(qū)動(dòng)程序駐留在其中。通過(guò)相關(guān)的網(wǎng)卡把windows nt與網(wǎng)絡(luò)連接起來(lái),但一直到80年代后期,許多傳輸協(xié)議的實(shí)現(xiàn)受限于mac層接口的獨(dú)特實(shí)現(xiàn),因?yàn)閙ac層定義了協(xié)議與網(wǎng)卡之間的轉(zhuǎn)換機(jī)制。

  1989年,microsoft和3com兩公司提出了一個(gè)定義mac層與osi模型高層協(xié)議驅(qū)動(dòng)程序之間的網(wǎng)絡(luò)設(shè)備接口規(guī)范(network device interface specification : ndis),ndis給數(shù)據(jù)交換提出了一個(gè)靈活的環(huán)境,它規(guī)范了軟件接口──稱(chēng)為ndis接口,傳輸協(xié)議可用它與網(wǎng)卡驅(qū)動(dòng)程序進(jìn)行通信。因此在windows nt環(huán)境下開(kāi)發(fā)核心態(tài)網(wǎng)卡驅(qū)動(dòng)程序應(yīng)遵循ndis規(guī)范。

  對(duì)于高速網(wǎng)絡(luò)fddi(fiber distributed data interface)網(wǎng)卡驅(qū)動(dòng)程序還需要smt(station management)站管理功能的實(shí)現(xiàn),否則將不能作為一個(gè)fddi站連入環(huán)結(jié)構(gòu)中,只能實(shí)現(xiàn)點(diǎn)到點(diǎn)間的數(shù)據(jù)通信。故有必要將smt軟件移植到網(wǎng)卡驅(qū)動(dòng)程序中,這將又導(dǎo)致對(duì)miniport nic驅(qū)動(dòng)程序編程框架的破壞,于是有必要形成fddi網(wǎng)卡驅(qū)動(dòng)程序(包含smt)與windows nt操作系統(tǒng)的良好接口──由邏輯網(wǎng)卡的注冊(cè)和mac層驅(qū)動(dòng)程序的初始化來(lái)完成。

  所以,本課題旨在深入研究應(yīng)用microsoft公司的ddk(device driver kit)將smt移植于windows nt的fddi網(wǎng)卡驅(qū)動(dòng)程序過(guò)程中如何注冊(cè)miniport nic驅(qū)動(dòng)程序。即怎樣正確注冊(cè)邏輯網(wǎng)卡和mac驅(qū)動(dòng)程序的初始化。著重討論與初始化相關(guān)的上邊緣函數(shù)的使用和調(diào)用關(guān)系以及初始化過(guò)程中遇到的各種問(wèn)題的具體解決。

  第一章windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動(dòng)程序

  總體結(jié)構(gòu)介紹

  第一節(jié)windows nt網(wǎng)絡(luò)結(jié)構(gòu)

  §1.1.1 windows nt網(wǎng)絡(luò)體系結(jié)構(gòu)

  windows nt的網(wǎng)絡(luò)體系結(jié)構(gòu)是基于國(guó)際標(biāo)準(zhǔn)化(iso)制定的標(biāo)準(zhǔn)模型──開(kāi)放式系統(tǒng)互連(open system interconnection:osi)參考模型分層建立的,這種方式有利于隨時(shí)擴(kuò)展其它功能和服務(wù)。

  windows nt網(wǎng)絡(luò)模型開(kāi)始于mac子層,網(wǎng)卡驅(qū)動(dòng)程序就駐留在其中。它通過(guò)相關(guān)的網(wǎng)卡把windows nt與網(wǎng)絡(luò)連接起來(lái),圖中的多個(gè)網(wǎng)卡表明在一臺(tái)運(yùn)行windows nt的計(jì)算機(jī)上能使用多種網(wǎng)卡。

  這一網(wǎng)絡(luò)體系結(jié)構(gòu)包括兩個(gè)重要接口──ndis接口與傳輸驅(qū)動(dòng)

  程序接口(tdi)。這兩個(gè)接口把兩個(gè)層隔離開(kāi)來(lái),辦法是相鄰的部件只允許按單一的標(biāo)準(zhǔn)來(lái)寫(xiě),不允許多重標(biāo)準(zhǔn)。例如一個(gè)網(wǎng)卡驅(qū)動(dòng)程序(在ndis接口的下面)就不需要特地按每個(gè)傳輸協(xié)議來(lái)寫(xiě)它的代碼塊,恰恰相反,該驅(qū)動(dòng)程序是寫(xiě)給ndis接口的,它通過(guò)符合ndis的相應(yīng)傳輸協(xié)議來(lái)請(qǐng)求服務(wù)。這些接口包含在windows nt的網(wǎng)絡(luò)體系結(jié)構(gòu)中,以容納可移植、可互換的模塊。

  在兩個(gè)接口之間,是傳輸協(xié)議。它在網(wǎng)絡(luò)中起著組織者的作用。一個(gè)傳輸協(xié)議規(guī)定了數(shù)據(jù)以何種方式呈遞給下一個(gè)接收層,以及如何對(duì)數(shù)據(jù)相應(yīng)地進(jìn)行打包。它通過(guò)ndis把數(shù)據(jù)傳給網(wǎng)卡驅(qū)動(dòng)程序,并通過(guò)tdi把數(shù)據(jù)傳給轉(zhuǎn)發(fā)程序(redirector)

  tdi之上是轉(zhuǎn)發(fā)程序,它把本地的網(wǎng)絡(luò)資源申請(qǐng)轉(zhuǎn)送給網(wǎng)絡(luò)。

  為了能和其他廠商的網(wǎng)絡(luò)互連,windows nt允許有多個(gè)轉(zhuǎn)發(fā)程序。對(duì)于每一個(gè)轉(zhuǎn)發(fā)程序windows nt計(jì)算機(jī)必須也有一個(gè)相應(yīng)的供應(yīng)者(provider)(由網(wǎng)絡(luò)廠商提供)。多供應(yīng)者路由選擇程序決定適當(dāng)?shù)墓?yīng)者,然后借助于供應(yīng)者,對(duì)應(yīng)用請(qǐng)求到相應(yīng)的轉(zhuǎn)發(fā)程序做出選擇。

  §1.1.2 windows nt網(wǎng)絡(luò)驅(qū)動(dòng)程序

  windows nt支持兩種類(lèi)型的網(wǎng)絡(luò)驅(qū)動(dòng)程序

  傳輸驅(qū)動(dòng)程序

  實(shí)現(xiàn)數(shù)據(jù)鏈路層中的邏輯鏈路控制子層協(xié)議和傳輸層協(xié)議。向 下與ndis接口,向上與tdi接口。

  網(wǎng)卡驅(qū)動(dòng)程序

  實(shí)現(xiàn)對(duì)物理層的管理和數(shù)據(jù)鏈路層中介質(zhì)訪問(wèn)控制子層協(xié)議,通過(guò)ndis向下管理物理網(wǎng)卡,向上與傳輸驅(qū)動(dòng)程序通信。

  §1.1.3 windows nt網(wǎng)卡驅(qū)動(dòng)程序

  windows nt環(huán)境下的網(wǎng)卡驅(qū)動(dòng)程序也分為兩種:

  miniport網(wǎng)卡驅(qū)動(dòng)程序:miniport驅(qū)動(dòng)程序只須實(shí)現(xiàn)與網(wǎng)絡(luò)硬件相關(guān)的操作(包括發(fā)送和接收)。而所有底層網(wǎng)卡驅(qū)動(dòng)程序的通用操作(如同步),一般由ndis接口程序來(lái)實(shí)現(xiàn)。

  full網(wǎng)卡驅(qū)動(dòng)程序:full網(wǎng)卡驅(qū)動(dòng)程序必須實(shí)現(xiàn)所有硬件相關(guān)和同步、排隊(duì)等操作。例如full網(wǎng)卡驅(qū)動(dòng)程序?yàn)榱隧憫?yīng)數(shù)據(jù)接收,需要保持本身的捆綁信息,而miniport就可以由ndis接口庫(kù)來(lái)實(shí)現(xiàn)。

  在windows nt的早期版本中,full網(wǎng)卡驅(qū)動(dòng)程序要求開(kāi)發(fā)者實(shí)現(xiàn)許多底層操作,來(lái)處理多處理器的核心問(wèn)題以及處理器、線程的同步,這樣不同的開(kāi)發(fā)者在大量重復(fù)著許多相同的工作。

  而miniport網(wǎng)卡驅(qū)動(dòng)程序允許開(kāi)發(fā)者僅僅寫(xiě)一些與網(wǎng)絡(luò)硬件相關(guān)的代碼即可,而那些通用的函數(shù)由ndis接口庫(kù)來(lái)實(shí)現(xiàn),這樣開(kāi)發(fā)出來(lái)的驅(qū)動(dòng)程序減少了不必要的工作。

  第二節(jié)miniport驅(qū)動(dòng)程序的結(jié)構(gòu)

  ndis接口規(guī)范了網(wǎng)卡驅(qū)動(dòng)程序的實(shí)現(xiàn),同時(shí)也對(duì)tdi驅(qū)動(dòng)程序的實(shí)現(xiàn)提出了一定的要求,在nt中,ndis約束下的網(wǎng)卡驅(qū)動(dòng)程序、tdi驅(qū)動(dòng)程序和系統(tǒng)的關(guān)系如下圖所示:

  圖2.0 ndis約束下的網(wǎng)卡驅(qū)動(dòng)程序、tdi驅(qū)動(dòng)程序和系統(tǒng)的關(guān)系

  miniport驅(qū)動(dòng)程序包括驅(qū)動(dòng)程序?qū)ο?、?qū)動(dòng)程序源代碼和ndis接口庫(kù)代碼。windows nt ddk提供ndis.h作為miniport驅(qū)動(dòng)程序的主要頭文件,定義了miniport驅(qū)動(dòng)程序的入口點(diǎn)、ndis接口庫(kù)函數(shù)和通用數(shù)據(jù)結(jié)構(gòu)。

  上邊緣函數(shù)的作用是網(wǎng)卡驅(qū)動(dòng)與ndis接口庫(kù)進(jìn)行通信,而下邊緣函數(shù)是tdi協(xié)議驅(qū)動(dòng)程序與ndis通信的手段。

  §1.2.1 miniport網(wǎng)卡對(duì)象

  ndis用一個(gè)叫做邏輯網(wǎng)卡的軟件對(duì)象來(lái)描述系統(tǒng)中的每塊網(wǎng)卡,而邏輯網(wǎng)卡與windows nt設(shè)備對(duì)象的通信由i/o子系統(tǒng)來(lái)管理,描述網(wǎng)卡的設(shè)備對(duì)象包括相關(guān)的網(wǎng)絡(luò)信息如名字、網(wǎng)絡(luò)地址和網(wǎng)卡內(nèi)存基地址等,它還包含與硬件相關(guān)的驅(qū)動(dòng)程序狀態(tài)數(shù)據(jù)(捆綁數(shù)目,捆綁句柄,包過(guò)濾數(shù)據(jù)庫(kù)等)。ndis分配一個(gè)句柄到miniportinitialize這個(gè)上邊緣函數(shù)的一個(gè)結(jié)構(gòu)中,然后miniport網(wǎng)卡驅(qū)動(dòng)程序?qū)⒃谝院筇峁┻@個(gè)句柄來(lái)給ndis調(diào)用,這個(gè)結(jié)構(gòu)一直被ndis保持,并且對(duì)miniport驅(qū)動(dòng)程序不透明。

  當(dāng)miniport網(wǎng)卡驅(qū)動(dòng)程序初始化一塊網(wǎng)卡時(shí),它創(chuàng)立自己的內(nèi)部數(shù)據(jù)結(jié)構(gòu)來(lái)描述網(wǎng)卡,記錄需要它管理的與設(shè)備相關(guān)的狀態(tài)信息。當(dāng)miniport網(wǎng)卡驅(qū)動(dòng)程序調(diào)用ndismsetatttibutes或ndismsetattributesex兩ndis庫(kù)函數(shù)時(shí),它傳遞一個(gè)句柄給這數(shù)據(jù)結(jié)構(gòu)。這樣,當(dāng)調(diào)用miniport驅(qū)動(dòng)程序入口點(diǎn)時(shí),它就傳遞這個(gè)句柄來(lái)驗(yàn)證驅(qū)動(dòng)程序所對(duì)應(yīng)的網(wǎng)卡的正確性。這個(gè)數(shù)據(jù)結(jié)構(gòu)為miniport網(wǎng)卡驅(qū)動(dòng)程序所擁有并維護(hù)。

  §1.2.2網(wǎng)絡(luò)對(duì)象標(biāo)識(shí)符

  miniport nic驅(qū)動(dòng)程序還需要維護(hù)一組對(duì)象,這些對(duì)象是系統(tǒng)定義的對(duì)象標(biāo)識(shí)符(object idetifier:oid)來(lái)標(biāo)識(shí),以描述驅(qū)動(dòng)程序的性能和當(dāng)前狀態(tài)信息。為查詢這些信息,上層驅(qū)動(dòng)程序調(diào)用ndisrequest向ndis接口庫(kù)指示oid。oid表示了調(diào)用所需的信息類(lèi)型,如miniport驅(qū)動(dòng)程序所支持的lookahead緩沖區(qū)大小等。ndis接到上層驅(qū)動(dòng)程序的查詢請(qǐng)求,將oid傳遞給上邊緣函數(shù)miniportqueryinformation實(shí)現(xiàn)對(duì)oid的查詢,如果上層驅(qū)動(dòng)程序請(qǐng)求改變狀態(tài)信息則調(diào)用miniportsetinformation實(shí)現(xiàn)對(duì)oid的設(shè)置。

  §1.2.3 miniport網(wǎng)卡驅(qū)動(dòng)程序代碼

  典型的miniport nic驅(qū)動(dòng)程序必須有一些函數(shù)來(lái)通過(guò)ndis接口實(shí)現(xiàn)上層驅(qū)動(dòng)程序與硬件的通信。這些函數(shù)稱(chēng)為上邊緣服務(wù)函數(shù)。

  這些上邊緣服務(wù)函數(shù)由驅(qū)動(dòng)程序的開(kāi)發(fā)者根據(jù)驅(qū)動(dòng)程序面向的特定低層網(wǎng)絡(luò)類(lèi)型和硬件以及相應(yīng)環(huán)境,可以有選擇地實(shí)現(xiàn),但必須保證驅(qū)動(dòng)程序最基本的功能,這些基本功能包括初始化、發(fā)送、中斷處理、重置、參數(shù)查詢與設(shè)置和報(bào)文接收。

  miniportinitialize:操作系統(tǒng)根據(jù)系統(tǒng)配置信息,檢測(cè)出網(wǎng)卡已安裝時(shí),由ndis接口在初始化時(shí)調(diào)用,主要完成低層網(wǎng)絡(luò)類(lèi)型確定,對(duì)應(yīng)于物理網(wǎng)卡的邏輯網(wǎng)卡初始化,中斷信息注冊(cè),網(wǎng)卡與主機(jī)通訊方式的確認(rèn)。i/o端口的申請(qǐng)與注冊(cè),內(nèi)存映像,mib的初始化,物理網(wǎng)卡的驗(yàn)證與初始化等。

  miniportreconfigure:支持網(wǎng)卡參數(shù)動(dòng)態(tài)變化,和miniportinitilize一樣由ndis接口以初始化級(jí)別調(diào)度執(zhí)行(不能屏蔽中斷,必須由驅(qū)動(dòng)程序承認(rèn)并清除在此期間產(chǎn)生的中斷),支持即插即用和軟配置的網(wǎng)卡在動(dòng)態(tài)改變參數(shù)時(shí),必須提供此函數(shù)。

  miniportqueryinformation:查詢網(wǎng)卡的狀態(tài)以及網(wǎng)卡驅(qū)動(dòng)程序的操作或統(tǒng)計(jì)參數(shù),如是否支持組通訊、網(wǎng)卡的物理速率是否支持回環(huán)、是否支持直接拷貝等,這些參數(shù)以oid方式統(tǒng)一管理。

  miniportsetinformation:ndis接口或協(xié)議驅(qū)動(dòng)程序通過(guò)調(diào)用此接口改變驅(qū)動(dòng)程序維護(hù)的oid庫(kù),一些操作參數(shù)的改變也將同時(shí)改變驅(qū)動(dòng)程序狀態(tài),例如組地址的設(shè)置。

  miniportreset:包括網(wǎng)卡硬件重置和驅(qū)動(dòng)程序軟件重置,軟件重置包括驅(qū)動(dòng)程序狀態(tài)重置,以及一些相關(guān)的參數(shù)重置,還需考慮有些參數(shù)的恢復(fù),重置時(shí)不必完成所有正在活躍的外部請(qǐng)求,但必須釋放已占用的外部資源。

  miniporthalt:掛起網(wǎng)卡并釋放該網(wǎng)卡驅(qū)動(dòng)程序占用的所有資源,在此期間不屏蔽中斷。

  miniportisr:高優(yōu)先級(jí)的中斷處理程序,進(jìn)行的工作包括初始中斷處理類(lèi)型,決定是否進(jìn)行中斷轉(zhuǎn)交,對(duì)卡上中斷進(jìn)行處理 等,該服務(wù)類(lèi)型只在以下情況被調(diào)用:

  ndis接口調(diào)用miniportinitialize和miniporthalt兩函數(shù)時(shí)。

  .中斷處理類(lèi)型設(shè)為每此中斷處理過(guò)程都調(diào)用時(shí)。

  為使系統(tǒng)能及時(shí)響應(yīng)所有硬件中斷,高優(yōu)先級(jí)的硬件中斷處理程序應(yīng)盡可能的減少運(yùn)行時(shí)間,防止長(zhǎng)時(shí)間的屏蔽低優(yōu)先級(jí)中斷,避免造程中斷丟失。

  miniporthandleinterrupt:由中斷延時(shí)處理程序在中斷延時(shí)處理時(shí)進(jìn)行調(diào)用。ndis排隊(duì)所有的延時(shí)處理,該服務(wù)主要處理發(fā)送完成、報(bào)文接收、描述符用盡、溢出、網(wǎng)卡異常等中斷。

  miniportsend:ndis收到上層發(fā)送請(qǐng)求時(shí)經(jīng)過(guò)若干協(xié)議處理再向下調(diào)用此服務(wù)過(guò)程,發(fā)送的packet已含有l(wèi)lc和mac頭,該服務(wù)過(guò)程進(jìn)行邊界對(duì)齊、packet約束重整、描述符映射和報(bào)文發(fā)送、以及發(fā)送資源和packet緩沖隊(duì)列管理。

  miniporttransferdata:多個(gè)已和網(wǎng)卡捆綁的協(xié)議驅(qū)動(dòng)程序在接收到報(bào)文到達(dá)指示后,向網(wǎng)卡驅(qū)動(dòng)程序發(fā)出傳送請(qǐng)求以拷貝各自所需的報(bào)文數(shù)據(jù)部分,網(wǎng)卡驅(qū)動(dòng)程序根據(jù)各協(xié)議驅(qū)動(dòng)程序?qū)蝹€(gè)packet是否進(jìn)行多次拷貝,以決定是否暫存只允許單次拷貝的packet等。

  miniportcheckhandle:ndis每秒調(diào)用此服務(wù)函數(shù)一次,驅(qū)動(dòng)程序發(fā)現(xiàn)網(wǎng)卡異常時(shí)報(bào)告給ndis由ndis調(diào)用miniportreset進(jìn)行硬件重恢復(fù)。

  miniportenableintrrupt:中斷使能。

  miniportdisableinterrupt:中斷屏蔽。

  另外,每個(gè)網(wǎng)卡驅(qū)動(dòng)程序必須有一個(gè)初始化入口點(diǎn),由driver entry函數(shù)實(shí)現(xiàn),它和系統(tǒng)相關(guān),由操作系統(tǒng)在裝入驅(qū)動(dòng)程序時(shí)調(diào)用,主要完成初始化ndis wrapper,再由wrapper初始生成驅(qū)動(dòng)程序管理塊并完成相應(yīng)各種初始化工作,登錄網(wǎng)卡驅(qū)動(dòng)程序所有上邊緣服務(wù)入口點(diǎn),同時(shí)寫(xiě)入ndis版本信息。

  §1.2.4 ndis接口庫(kù)

  ndis接口庫(kù)包括在ndis.sys中,它是一個(gè)核態(tài)函數(shù)庫(kù),有一套抽象的函數(shù),無(wú)論協(xié)議驅(qū)動(dòng)程序還是nic驅(qū)動(dòng)程序都連接到這個(gè)庫(kù)中,以實(shí)現(xiàn)上下層之間的操作。

  第二章fddi網(wǎng)卡驅(qū)動(dòng)程序的加載和運(yùn)行

  第一節(jié) 網(wǎng)卡驅(qū)動(dòng)程序的安裝

  windows nt網(wǎng)卡驅(qū)動(dòng)程序安裝的目的是實(shí)現(xiàn)網(wǎng)卡相應(yīng)硬件信息和驅(qū)動(dòng)程序在windows nt注冊(cè)庫(kù)中的注冊(cè),使windows nt能夠正確識(shí)別網(wǎng)卡,了解所必需的軟硬件信息并能在windows nt啟動(dòng)時(shí)加載相應(yīng)驅(qū)動(dòng)程序。

  網(wǎng)卡驅(qū)動(dòng)程序安裝時(shí),首先在主群組的控制面板中選擇“網(wǎng)絡(luò)”,然后添加網(wǎng)卡,指定相應(yīng)信息文件──oemsetup.inf的路徑,以完成以下兩個(gè)必要的操作:

  復(fù)制驅(qū)動(dòng)程序到相應(yīng)的系統(tǒng)目錄(windows nt根目錄system32drivers)中;

  在windows nt注冊(cè)庫(kù)中存入相應(yīng)軟硬件信息。

  下面主要以fddi網(wǎng)卡為例介紹安裝驅(qū)動(dòng)程序所必需的工作:

  §2.1.1網(wǎng)卡一般硬件參數(shù)

  對(duì)于fddi網(wǎng)卡,必須在編寫(xiě)其oemsetup.inf文件時(shí)確定以下硬件參數(shù):

  總線類(lèi)型:pci(5)……括號(hào)中的數(shù)字5表示pci總線在ndis中的總線類(lèi)型代碼;

  廠商代號(hào):0x5588……系統(tǒng)加載時(shí)確定網(wǎng)卡的標(biāo)記,也是編程時(shí)確定pci槽號(hào)的標(biāo)識(shí);

  cfid: 0x01;

  介質(zhì)類(lèi)型:光纖(3) ……括號(hào)中的數(shù)字表示光纖在ndis中的介質(zhì)類(lèi)型代碼;

  是否支持全雙工:支持。

  對(duì)于其它的硬件信息在此inf配置信息文件中可有可無(wú),如若配置,則可在驅(qū)動(dòng)程序的編寫(xiě)時(shí)利用這些信息,方便編程,同時(shí)有利于其它應(yīng)用對(duì)其參數(shù)的確定和使用。

  §2.1.2 fddi網(wǎng)卡加載時(shí)需在注冊(cè)庫(kù)登錄表里做的網(wǎng)絡(luò)配置

  網(wǎng)卡驅(qū)動(dòng)程序的安裝通常將創(chuàng)建登錄表中的四個(gè)不同子鍵:

  software registrion鍵,對(duì)應(yīng)于驅(qū)動(dòng)程序,存在于hkey_local_machinesoftwarecompany productnameversion中。我們的fddi網(wǎng)卡驅(qū)動(dòng)程序所對(duì)應(yīng)的是hkey_local_machinesoftwarenet612yhfddiyhfddi1.0;

  網(wǎng)卡的軟件登錄鍵,存在于hkey_local_machinesoftwaremicrosoft windows ntnt3.51networkcardsyhfddi1;

  驅(qū)動(dòng)程序的服務(wù)登錄鍵,存在于hkey_local_machinesystemcurrentcontrolsetservices

  網(wǎng)卡的服務(wù)登錄鍵,存在于hkey_local_machinesystemcurrentcontrolsetservices

  對(duì)于每一個(gè)網(wǎng)絡(luò)部件,一個(gè)名為netrules的特殊子鍵在鄰近的驅(qū)動(dòng)程序或網(wǎng)卡登錄子鍵里創(chuàng)建,netrules標(biāo)識(shí)網(wǎng)絡(luò)部件為網(wǎng)絡(luò)整體的一部分。

  fddi網(wǎng)卡驅(qū)動(dòng)程序?qū)?yīng)的標(biāo)準(zhǔn)軟件登錄表項(xiàng)將出現(xiàn)在以下路徑:

  hkey_local_machinesoftwarenet612yhfddiyhfddi1.0;

  驅(qū)動(dòng)程序?qū)?yīng)的標(biāo)準(zhǔn)項(xiàng)的值為:

  description =yhfddi/pci adapter controller

  install date =……

  ……

  refcount =0x01

  servicename =yhfddi

  softwaretype =driver

  title =yhfddi/pci adapter controller

  而且在yhfddi驅(qū)動(dòng)程序相關(guān)的netrules子鍵下,這些值項(xiàng)為:

  bindable =yhfddi driver yhfddi adapter non exclusiver

  bindform =“yhfddisys”yes no container

  class = reg_multi_sz “yhfddi driver basic”

  infname =oemnad1.inf

  type =yhfddisys ndisdriver yhfddidriver

  use =driver

  yhfddi網(wǎng)卡在如下路徑的networkcards子鍵里介紹:

  hkey_local_machinesoftwaremicrosoft

  windows ntnt3.51networkcardsyhfddi1;

  網(wǎng)卡的標(biāo)準(zhǔn)項(xiàng)包括以下這些值:

  description =yhfddi/pci adapter controller

  install date =……

  manufacturer =net612

  productname =yhfddi

  servicename =yhfddi01

  title =[01]yhfddi/pci adapter controller

  §2.1.3編寫(xiě)inf信息配置文件

  gui inf描述語(yǔ)言被windows nt用以書(shū)寫(xiě)系統(tǒng)所有部件的配置文件,當(dāng)然也可以用以書(shū)寫(xiě)網(wǎng)絡(luò)系統(tǒng)各部件的配置文件,該配置文件描述了網(wǎng)絡(luò)部件安裝、配置、刪除的執(zhí)行過(guò)程。當(dāng)網(wǎng)絡(luò)部件進(jìn)行初始安裝或二次安裝(通常通過(guò)ncpa進(jìn)行)時(shí),安裝程序讀取部件對(duì)應(yīng)的配置文件,進(jìn)行解釋執(zhí)行。gui inf描述語(yǔ)言由節(jié)、命令、邏輯操作、變量規(guī)范、流程控制以及一套調(diào)用dll或外部程序的機(jī)制組成,其中,節(jié)是配置文件的主體,節(jié)可分為install節(jié)(類(lèi)似于函數(shù)),shell節(jié)(也類(lèi)似于函數(shù),但可調(diào)用insall和shell節(jié)),detect節(jié)(不包含命令),一個(gè)配置文件一般由若干不同類(lèi)型的節(jié)組成。驅(qū)動(dòng)程序的開(kāi)發(fā)者根據(jù)需要可以在配置文件中編寫(xiě)相應(yīng)代碼,使得用戶和系統(tǒng)之間能進(jìn)行交互,并且由用戶決定一些配置參數(shù)。

  nt網(wǎng)卡配置文件有其一套規(guī)范,驅(qū)動(dòng)程序開(kāi)發(fā)者必須按規(guī)范編寫(xiě)配置文件,一般來(lái)說(shuō),一個(gè)配置文件至少應(yīng)該提供下面三個(gè)節(jié):

  安裝入口點(diǎn):[identify]shell節(jié)。該節(jié)主要功能是給出安裝部件的類(lèi)型名,系統(tǒng)通過(guò)它識(shí)別該部件屬于哪一大類(lèi)(display,mouse,scsi,network等)中的哪一類(lèi)(網(wǎng)絡(luò)adapter,driver,transport,service,network和netprovidor),同時(shí),還需要給出映像文件和配置文件所在的源介質(zhì)及標(biāo)識(shí)。

  [returnoption]shell節(jié)。系統(tǒng)執(zhí)行安裝identify節(jié)后,執(zhí)行該節(jié)。它主要功能是檢查所需安裝的部件是否支持的硬件平臺(tái)和語(yǔ)言,并給出網(wǎng)卡名(有些配置文件支持多類(lèi)網(wǎng)卡,此時(shí)必須讓用戶進(jìn)行選擇,并獲得選擇結(jié)果)。

  [installoption]shell節(jié)。該節(jié)是配置文件得主體,也是上次安裝完后再次進(jìn)行配置、刪除、更新的入口點(diǎn)。主要功能是拷貝映像文件和配置文件,生成配置的各種選項(xiàng),創(chuàng)建該部件在注冊(cè)庫(kù)中對(duì)應(yīng)的各種登錄子樹(shù)并更新重寫(xiě)。

  第二節(jié) 驅(qū)動(dòng)程序的加載過(guò)程

  §2.2.1 windows nt的啟動(dòng)過(guò)程

  第一階段:調(diào)入裝入程序。和硬件平臺(tái)相關(guān),x86機(jī)器首先由rom裝入根扇區(qū),再由根扇區(qū)裝入ntldr;

  第二階段:硬件檢測(cè)。x86機(jī)器調(diào)ntdetect程序最大限度地獲取各種硬件設(shè)備信息,引導(dǎo)hal及基本卷設(shè)備驅(qū)動(dòng)程序,以便引導(dǎo)nt內(nèi)核;

  第三階段:獲取注冊(cè)庫(kù)中各種控制信息,如用戶定義的非頁(yè)內(nèi)存大小;第四階段:初始化注冊(cè)庫(kù) registrymachine下system和hardware并創(chuàng)建currentcontrolset,為裝入相關(guān)硬件設(shè)備驅(qū)動(dòng)程序作準(zhǔn)備;

  第五階段:裝入基本核心驅(qū)動(dòng)程序;

  第六階段:釋放一些已經(jīng)完成使命的裝入初始數(shù)據(jù)塊;

  第七階段:進(jìn)一步初始化注冊(cè)庫(kù),以便有些依賴(lài)于基本核心驅(qū)動(dòng)程序的上層驅(qū)動(dòng)程序能順利裝入;

  第八階段:服務(wù)控制器裝入應(yīng)該由該服務(wù)控制器裝入的各種驅(qū)動(dòng)程序。

  §2.2.2 fddi網(wǎng)卡驅(qū)動(dòng)程序的加載過(guò)程

  在windows nt啟動(dòng)的第五個(gè)階段,將加載核心驅(qū)動(dòng)程序。而對(duì)于ndis網(wǎng)卡驅(qū)動(dòng)程序是在ndis接口(ndis.sys)加載后調(diào)入運(yùn)行,向ndis wrapper注冊(cè)、初始化、查詢?cè)O(shè)置參數(shù)等。

  windows nt啟動(dòng)時(shí),相應(yīng)的實(shí)體如nt的服務(wù)控制器根據(jù)注冊(cè)庫(kù)中yhfddi驅(qū)動(dòng)程序的配置注冊(cè)信息,初始化ndis wrapper,并裝入相應(yīng)的驅(qū)動(dòng)程序,生成驅(qū)動(dòng)程序管理塊結(jié)構(gòu),申請(qǐng)內(nèi)存以保存各種信息,向ndis wrapper注冊(cè)驅(qū)動(dòng)程序。初始化和注冊(cè)完畢后,再由服務(wù)控制器讀取注冊(cè)庫(kù)中相應(yīng)的鏈接信息。

  在ndis wrapper和yhfddi驅(qū)動(dòng)程序初始化和注冊(cè)成功后,ndis wrapper根據(jù)系統(tǒng)相應(yīng)的注冊(cè)信息,加入和yhfddi驅(qū)動(dòng)程序所對(duì)應(yīng)的fddi網(wǎng)卡,同時(shí)讀入網(wǎng)卡的注冊(cè)信息,并進(jìn)行網(wǎng)卡注冊(cè)和網(wǎng)卡初始化。

  在以上過(guò)程成功后,wrapper將查詢和設(shè)置驅(qū)動(dòng)程序的各種參數(shù),了解驅(qū)動(dòng)程序?qū)δ男┎僮髦С?,決定對(duì)上層驅(qū)動(dòng)程序的支持范圍。

  第三節(jié)fddi網(wǎng)卡驅(qū)動(dòng)程序的注冊(cè)

  driverentry函數(shù)是windows nt ddk規(guī)定的核心驅(qū)動(dòng)程序的入口點(diǎn),wrapper識(shí)別到入口點(diǎn)后,調(diào)入驅(qū)動(dòng)程序,在driverentry函數(shù)內(nèi)完成兩個(gè)基本注冊(cè)任務(wù):

  調(diào)用ndisminitializewapper函數(shù)向ndis接口報(bào)告驅(qū)動(dòng)程序?qū)⒁詍iniport類(lèi)網(wǎng)卡驅(qū)動(dòng)程序注冊(cè)。ndis建立它需要記錄的驅(qū)動(dòng)程序狀態(tài)信息,同時(shí)返回ndiswrapperhandle,驅(qū)動(dòng)程序保存這個(gè)句柄,以利后來(lái)調(diào)用ndisxxxconfiguration和initialization等函數(shù)。

  填寫(xiě)ndisxx_miniport_characteristics屬性結(jié)構(gòu),主要記錄ndis版本號(hào)和驅(qū)動(dòng)程序支持的miniportxxx函數(shù)的入口點(diǎn),然后調(diào)用ndismregisterminiport函數(shù)實(shí)現(xiàn)驅(qū)動(dòng)程序的整體注冊(cè)。

  以yhfddi為例所要注冊(cè)的屬性結(jié)構(gòu)的內(nèi)容大致如下:

  ndis_miniport_characteristics yhfddichar;

  (ndis_miniport_characteristics這個(gè)結(jié)構(gòu)將在第三章介紹)

  yhfddichar.majorndisversion=yhfddi_ndis_major_version;

  yhfddichar.minorndisversion=yhfddi_ndis_minor_version;

  這兩個(gè)屬性決定驅(qū)動(dòng)程序是ndis的哪個(gè)版本所支持,我們所用的是ndis3.0

  yhfddichar.disableinterrupthandler=yhfddidisableinterrupt;

  yhfddichar.enableinterrupthandler=yhfddienableinterrupt;

  yhfddichar.isrhandle=yhfddiinterruptservice;

  yhfddichar.handleinterrupthandler=yhfddihandleinterrupt;

  以上四項(xiàng)屬性是中斷處理所需的上邊緣服務(wù)函數(shù)的入口點(diǎn)(句柄)。fddi網(wǎng)卡驅(qū)動(dòng)程序需要有smt站管理功能,而smt是以中斷處理方式進(jìn)行的,故這四項(xiàng)屬性在fddi網(wǎng)卡驅(qū)動(dòng)程序中是很重要的。

  yhfddichar.initializehandler=yhfddiinitialize;

  此項(xiàng)注冊(cè)的是驅(qū)動(dòng)程序的初始化函數(shù)句柄。

  yhfddichar.queryinformationhandler= yhfddiqueryinformation;

  yhfddichar.setinformationhandler=yhfddisetinformation;

  這兩項(xiàng)注冊(cè)的是參數(shù)查詢和設(shè)置函數(shù)的句柄。

  yhfddichar.sendhanler= yhfddisend;

  yhfddichar.transferdatahandler= yhfdditransferdata;

  主要提供數(shù)據(jù)發(fā)送和接收函數(shù)句柄。

  yhfddichar.resethandler=yhfddireset;

  此項(xiàng)注冊(cè)網(wǎng)卡軟硬件重置函數(shù)句柄。

  yhfddichar.halthandler= yhfddihalt;

  此項(xiàng)注冊(cè)網(wǎng)卡驅(qū)動(dòng)程序掛起函數(shù)句柄。

  yhfddichar.checkforhandler=null;

  yhfddichar.reconfigurehandler=null;

  這兩個(gè)上邊緣服務(wù)函數(shù)是fddi網(wǎng)卡驅(qū)動(dòng)程序所不提供的,故置為null。

  填好這些結(jié)構(gòu)以后,調(diào)用以下函數(shù)實(shí)現(xiàn)驅(qū)動(dòng)程序的注冊(cè):

  ndismregisterminiport(

  yhfddiwrapperhandle,

  &yhfddichar,

  sizeof(yhfddichar));

  其中yhfddiwrapperhandle是在此之前初始化wrapper調(diào)用ndisminitializewrapper所得的句柄。

  如果調(diào)用ndismregisterminiport不能返回ndis_status_success,必須在退出driverentry之前釋放已經(jīng)分配的資源(如yhfddiwrapperhandle等),故調(diào)用

  ndisterminatewrapper(yhfddiwrapperhandle,null)。

  這樣驅(qū)動(dòng)程序沒(méi)能正確注冊(cè),亦不能正常運(yùn)行。

  第四節(jié) 網(wǎng)卡驅(qū)動(dòng)程序?qū)ο蟛樵兣c設(shè)置

  如果ndis的管理實(shí)體要查詢或設(shè)置一個(gè)特定的網(wǎng)絡(luò)對(duì)象,它必須提供一個(gè)32位的oid。oid的結(jié)構(gòu)如下: 圖2.3.0 oid結(jié)構(gòu)圖

  由上可以看到,oid可分為三大類(lèi):

  所有ndis驅(qū)動(dòng)程序都有的一般對(duì)象;

  特定介質(zhì)的對(duì)象;

  特殊的與具體實(shí)現(xiàn)相關(guān)的對(duì)象(如多目地址表的長(zhǎng)度)。

  一般的和特定介質(zhì)的oid被記錄在windows nt ddk中,對(duì)于這些oid ddk文本指明了相關(guān)的對(duì)象能否通過(guò)miniportqueryinformation查詢參數(shù)和通過(guò)miniportsetinformation設(shè)置參數(shù)。

  oid也可被分為操作特性(如多目地址表長(zhǎng)度參數(shù))和統(tǒng)計(jì)參數(shù)(如廣播包接收)。最后oid可分為必須的和可選的兩種。

  oid的前三個(gè)字節(jié)表明oid的不同類(lèi)別,而最后一個(gè)字節(jié)確定這一類(lèi)別內(nèi)特定的信息管理對(duì)象。

  針對(duì)于fddi網(wǎng)卡,被查詢的oid的第一個(gè)字節(jié)為0x03。而ndis所查詢的介質(zhì)相關(guān)參數(shù)為:

  0x03010104 oid_fddi_long_max_list_size

  0x03010108 oid_fddi_short_max_list_size

  0x03010102 oid_fddi_long_current_addr

  0x03010106 oid_fddi_short_current_addr

  tcp/ip傳輸驅(qū)動(dòng)程序所要查詢的fddi oid為:

  0x03010102 oid_fddi_long_current_addr

  0x03010103 oid_fddi_long_multicast_list

  0x03010107 oid_fddi_short_multicast_list

  通過(guò)以上兩階段的查詢,ndis和tcp/ip驅(qū)動(dòng)程序就分別了解了網(wǎng)卡驅(qū)動(dòng)程序?qū)ζ涞闹С?,從而進(jìn)行相應(yīng)的捆綁,以便數(shù)據(jù)傳輸時(shí)正確選擇網(wǎng)卡驅(qū)動(dòng)程序。

  第五節(jié) 開(kāi)發(fā)環(huán)境與調(diào)試方法

  開(kāi)發(fā)環(huán)境:

  fddi網(wǎng)卡驅(qū)動(dòng)程序的開(kāi)發(fā)環(huán)境為nt server 3.51,sdk,ddk for workstation 3.51, vc++4.1,硬件平臺(tái)為586。

  調(diào)試平臺(tái):

  主機(jī)為nt server 3.51,windbg32

  目標(biāo)機(jī)為nt workstation3.51 (check 944)

  調(diào)試方法:

  ※利用dbgprint把目標(biāo)機(jī)上關(guān)鍵信息通過(guò)串口傳到主機(jī)進(jìn)行分析,以得出ndis驅(qū)動(dòng)程序的調(diào)度機(jī)制和運(yùn)轉(zhuǎn)狀況;

  ※利用assert產(chǎn)生異常斷點(diǎn),由主機(jī)對(duì)異常進(jìn)行控制

  ※自定義宏,進(jìn)行分級(jí)控制,以根據(jù)不同情況產(chǎn)生不同調(diào)試信息

  第四章 與smt移植相關(guān)的問(wèn)題討論

  在本yhfddi網(wǎng)卡驅(qū)動(dòng)程序中,smt的移植是極其關(guān)鍵的一部分,主要承擔(dān)了驅(qū)動(dòng)程序中硬件初始化和中斷延遲處理。但由于smt是相對(duì)獨(dú)立的軟件,這樣就有一個(gè)ndis wrapper與smt間參數(shù)傳遞的問(wèn)題。所以本章主要討論miniport驅(qū)動(dòng)程序與smt的關(guān)系和移植smt過(guò)程中初始化的要求、中斷處理的要求,ndis wrapper與smt如何傳遞參數(shù)。

  (一)miniport fddi網(wǎng)卡驅(qū)動(dòng)程序與smt的關(guān)系。

  在第一章已經(jīng)談及網(wǎng)卡驅(qū)動(dòng)程序主要實(shí)現(xiàn)osi參考模型中的物理層和mac層。而對(duì)于fddi網(wǎng)絡(luò)的物理層又可分為介質(zhì)相關(guān)子層和介質(zhì)無(wú)關(guān)子層。

  對(duì)于我們的fddi/pci是基于x.3.19、x3.148、x3.166和x3.229而實(shí)現(xiàn)的。

  smt在整個(gè)iso七層模型中屬低兩層范疇。下圖是iso模型與fddi層次的對(duì)應(yīng)關(guān)系,從而可知fddi miniport驅(qū)動(dòng)程序在nt網(wǎng)絡(luò)結(jié)構(gòu)中的位置。

  即在windows nt fddi網(wǎng)卡驅(qū)動(dòng)程序應(yīng)包含smt,實(shí)現(xiàn)fddi拓?fù)洵h(huán)上的站管理。

  而在驅(qū)動(dòng)程序內(nèi)部smt主要是在miniport驅(qū)動(dòng)程序中的中斷延遲處理上邊緣服務(wù)中實(shí)現(xiàn)的,也可以說(shuō)是將smt嵌入中斷延遲處理程序中,實(shí)現(xiàn)ndis接口對(duì)smt的正確調(diào)度。

  yh-fddi驅(qū)動(dòng)程序的實(shí)現(xiàn)可分為硬件無(wú)關(guān)部分和硬件相關(guān)部分。

  移植smt過(guò)程中初始化的要求.

  這里的初始化主要是指硬件初始化,包括寄存器的初始化和數(shù)據(jù)結(jié)構(gòu)的初始化,由smt共用的硬件相關(guān)例程庫(kù)中硬件初始化部分來(lái)完成. 我們?cè)陂_(kāi)發(fā)過(guò)程序是調(diào)用fddi_main(bdd_t*bdd)這個(gè)函數(shù)來(lái)調(diào)用smt共用的硬件相關(guān)例程庫(kù)的.可見(jiàn)使用fddi_main(bdd_t*bdd)時(shí),需要傳遞bdd這個(gè)參量,而bdd_t這個(gè)數(shù)據(jù)結(jié)構(gòu)的定義如下:

  它包含了各類(lèi)硬件寄存器的基址,所以要對(duì)其進(jìn)行正確賦值就必須首先在nt的內(nèi)存中映射一塊虛存與網(wǎng)卡內(nèi)存相對(duì)應(yīng),也就實(shí)現(xiàn)了bdd_t結(jié)構(gòu)的賦值,對(duì)fddi_main(bdd_t *bdd)的正確調(diào)用.

  因此,我們?cè)谡{(diào)用fddi_main前首先將網(wǎng)卡上寄存器內(nèi)存空間映射到nt的虛存空間上,并將bdd結(jié)構(gòu)正確賦值.以映射bsi_phy_base為例,具體過(guò)程如下:

  pchar destination;

  bdd_t *bdd;

  ndis_physical_address physicaladdress;

  ulong baseaddress;

  ndis_status status;

  baseadress =0x0d0000+bsi_phy_base;

  ndissetphysicaladdresshigh(physicaladdress,0);

  ndissetphysicaladdresslow(physicaladdress,baseaddress);

  status=ndismmapiospace(

  (pvoid *)&destination,

  miniportadapterhandle,

  physicaladdress,

  bsi_phy_len

  );

  bdd->bsi_vir_base=(pchar) destination;

  adapter-> bdd->bsi_vir_base= bsi_vir_base;

  /*對(duì)adapter結(jié)構(gòu)中的bdd結(jié)構(gòu)賦值,以便在其它上邊緣函數(shù)中使用這些虛存基地址*/

  中斷處理要求.

  對(duì)于中斷處理,在smt中主要調(diào)用cspintrhandandler()來(lái)實(shí)現(xiàn).我們的fddi網(wǎng)卡驅(qū)動(dòng)程序是miniport方式的,若在isr中做此處理將占用大量系統(tǒng)資源,使系統(tǒng)崩潰,所以我們采用只在isr中進(jìn)行中斷的排隊(duì),而在dpc中調(diào)用cspintrhandler()來(lái)完成中斷處理.

  在中斷處理方面還有一個(gè)中斷屏蔽和中斷使能的問(wèn)題,這兩方面smt并不提供,故我們要正確處理.

  具體處理方法見(jiàn)第三章.

  ndis wrapper與smt間參數(shù)如何傳遞.

  miniport方式的網(wǎng)卡驅(qū)動(dòng)程序中,網(wǎng)卡上有中斷時(shí),系統(tǒng)反映給ndiswrapper,再由wrapper調(diào)度中斷處理上邊緣服務(wù)實(shí)現(xiàn)中斷處理,在我們的yhfddi網(wǎng)卡驅(qū)動(dòng)程序的中斷具體處理是smt完成的所以在調(diào)用cspintrhandler時(shí)應(yīng)將adapter結(jié)構(gòu)傳進(jìn)smt以便在以后應(yīng)用.

  如在處理接收中斷時(shí),處理的最后應(yīng)調(diào)用ndisindicatefddireceive,向ndiswrapper指示以接收到一個(gè)數(shù)據(jù)包,而ndisindicaterfddireceive的調(diào)用需要adapterminiporthandle作為參數(shù),這就必須一級(jí)級(jí)從中斷延遲處理函數(shù)(yhfddi handleinterrupt)中將adapter結(jié)構(gòu)傳遞下來(lái). 當(dāng)然,其它方面如發(fā)送,也會(huì)有類(lèi)似的問(wèn)題需要考慮.

  總之,對(duì)于smt的移植,需要詳盡的在程序中做好接口,才能實(shí)現(xiàn)與

  smt的數(shù)據(jù)交換.

  結(jié)束語(yǔ)

  ndis規(guī)范在網(wǎng)絡(luò)兩層間提供了一個(gè)統(tǒng)一界面,ndis對(duì)網(wǎng)絡(luò)本身而言,是一個(gè)帶有協(xié)議功能的標(biāo)準(zhǔn)接口,對(duì)實(shí)現(xiàn)者而言,它應(yīng)該是一個(gè)環(huán)境,這種環(huán)境不僅帶有協(xié)議功能,更重要的是帶有和軟、硬平臺(tái)無(wú)關(guān)的核心功能支持,它不會(huì)受軟、硬平臺(tái)的變化嚴(yán)重影響,無(wú)疑,它是軟件的移植和兼容的可靠保證,ndis把網(wǎng)絡(luò)的一部分共性抽象出來(lái),并根據(jù)具體的操作系統(tǒng)實(shí)現(xiàn)系統(tǒng)和平臺(tái)相關(guān)的基礎(chǔ)庫(kù)以保證ndis的標(biāo)準(zhǔn)性和對(duì)開(kāi)發(fā)者提供最大的功能支持,這也將加速和規(guī)范開(kāi)發(fā)過(guò)程,但是,在操作系統(tǒng)之上提供ndis基礎(chǔ)庫(kù)獲得標(biāo)準(zhǔn)同時(shí)也失去直接作用于操作系統(tǒng)帶來(lái)的靈活性以及更強(qiáng)的功能支持,同時(shí),ndis處于網(wǎng)絡(luò)中層和低層之間,低層網(wǎng)絡(luò)的快速發(fā)展和ndis對(duì)網(wǎng)絡(luò)部分共性的抽象必然導(dǎo)致ndis對(duì)實(shí)現(xiàn)者的滯后,例如ddk3.51提供的ndis開(kāi)發(fā)環(huán)境只支持10m以太網(wǎng)、fddi、令牌網(wǎng)(802.5)、localtalk、arcnet等,而對(duì)新出現(xiàn)的快速以太網(wǎng)及atm不提供支持,這對(duì)我們?nèi)绾卧趎dis環(huán)境下實(shí)現(xiàn)諸如atm的lan emulation,ip over atm、快速以太網(wǎng)帶來(lái)很大問(wèn)題。

  smt是實(shí)現(xiàn)fddi網(wǎng)卡驅(qū)動(dòng)程序的關(guān)鍵,然而由于應(yīng)用ddk開(kāi)發(fā)miniport驅(qū)動(dòng)程序時(shí)要遵循其結(jié)構(gòu)框架,所以要想完整地按其結(jié)構(gòu)移植smt,就必須分解smt適應(yīng)之,即要求對(duì)smt有一個(gè)很好的理解。但smt是龐大的給開(kāi)發(fā)帶來(lái)了一定的困難。

  參考文獻(xiàn)

  【1】《device driver kit用戶手冊(cè)》

  【2】《device driver kit核心驅(qū)動(dòng)程序設(shè)計(jì)》

  【3】《device driver kit網(wǎng)絡(luò)驅(qū)動(dòng)程序設(shè)計(jì)》

  【4】《windows nt核心內(nèi)幕》

  【5】《windows nt資源》之三《性能評(píng)測(cè)》

385596