- 相關(guān)推薦
windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì)
總體結(jié)構(gòu)介紹
第一節(jié)windowsnt網(wǎng)絡(luò)結(jié)構(gòu)
§1.1.1windowsnt網(wǎng)絡(luò)體系結(jié)構(gòu)
windowsnt的網(wǎng)絡(luò)體系結(jié)構(gòu)是基于國(guó)際標(biāo)準(zhǔn)化(iso)制定的標(biāo)準(zhǔn)模型──開(kāi)放式系統(tǒng)互連(opensysteminterconnection:osi)參考模型分層建立的,這種方式有利于隨時(shí)擴(kuò)展其它功能和服務(wù)。
windowsnt網(wǎng)絡(luò)模型開(kāi)始于mac子層,網(wǎng)卡驅(qū)動(dòng)程序就駐留在其中。它通過(guò)相關(guān)的網(wǎng)卡把windowsnt與網(wǎng)絡(luò)連接起來(lái),圖中的多個(gè)網(wǎng)卡表明在一臺(tái)運(yùn)行windowsnt的計(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ù)。這些接口包含在windowsnt的網(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ò)互連,windowsnt允許有多個(gè)轉(zhuǎn)發(fā)程序。對(duì)于每一個(gè)轉(zhuǎn)發(fā)程序windowsnt計(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.2windowsnt網(wǎng)絡(luò)驅(qū)動(dòng)程序
windowsnt支持兩種類型的網(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.3windowsnt網(wǎng)卡驅(qū)動(dòng)程序
windowsnt環(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)。
在windowsnt的早期版本中,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.0ndis約束下的網(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ù)代碼。windowsntddk提供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.1miniport網(wǎng)卡對(duì)象
ndis用一個(gè)叫做邏輯網(wǎng)卡的軟件對(duì)象來(lái)描述系統(tǒng)中的每塊網(wǎng)卡,而邏輯網(wǎng)卡與windowsnt設(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í)符
miniportnic驅(qū)動(dòng)程序還需要維護(hù)一組對(duì)象,這些對(duì)象是系統(tǒng)定義的對(duì)象標(biāo)識(shí)符(objectidetifier: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)用所需的信息類型,如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.3miniport網(wǎng)卡驅(qū)動(dòng)程序代碼
典型的miniportnic驅(qū)動(dòng)程序必須有一些函數(shù)來(lái)通過(guò)ndis接口實(shí)現(xiàn)上層驅(qū)動(dòng)程序與硬件的通信。這些函數(shù)稱為上邊緣服務(wù)函數(shù)。
這些上邊緣服務(wù)函數(shù)由驅(qū)動(dòng)程序的開(kāi)發(fā)者根據(jù)驅(qū)動(dòng)程序面向的特定低層網(wǎng)絡(luò)類型和硬件以及相應(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ò)類型確定,對(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接口以初
【windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì)】相關(guān)文章:
Windows05-28
電子商務(wù)環(huán)境下客戶價(jià)值探討06-01
新媒體環(huán)境下的體驗(yàn)廣告形態(tài)文學(xué)論文04-29
淺探網(wǎng)絡(luò)環(huán)境下搜索引擎的使用05-13
淺談網(wǎng)絡(luò)環(huán)境下的德育教育論文(精選11篇)08-08
淺談電子商務(wù)環(huán)境下國(guó)際貿(mào)易的發(fā)展創(chuàng)新06-02
局域網(wǎng)數(shù)據(jù)庫(kù)環(huán)境下數(shù)據(jù)采集及處理05-08