- 相關(guān)推薦
windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動程序設(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)是基于國際標(biāo)準(zhǔn)化(iso)制定的標(biāo)準(zhǔn)模型──開放式系統(tǒng)互連(opensysteminterconnection:osi)參考模型分層建立的,這種方式有利于隨時擴(kuò)展其它功能和服務(wù)。
windowsnt網(wǎng)絡(luò)模型開始于mac子層,網(wǎng)卡驅(qū)動程序就駐留在其中。它通過相關(guān)的網(wǎng)卡把windowsnt與網(wǎng)絡(luò)連接起來,圖中的多個網(wǎng)卡表明在一臺運(yùn)行windowsnt的計(jì)算機(jī)上能使用多種網(wǎng)卡。
這一網(wǎng)絡(luò)體系結(jié)構(gòu)包括兩個重要接口──ndis接口與傳輸驅(qū)動
程序接口(tdi)。這兩個接口把兩個層隔離開來,辦法是相鄰的部件只允許按單一的標(biāo)準(zhǔn)來寫,不允許多重標(biāo)準(zhǔn)。例如一個網(wǎng)卡驅(qū)動程序(在ndis接口的下面)就不需要特地按每個傳輸協(xié)議來寫它的代碼塊,恰恰相反,該驅(qū)動程序是寫給ndis接口的,它通過符合ndis的相應(yīng)傳輸協(xié)議來請求服務(wù)。這些接口包含在windowsnt的網(wǎng)絡(luò)體系結(jié)構(gòu)中,以容納可移植、可互換的模塊。
在兩個接口之間,是傳輸協(xié)議。它在網(wǎng)絡(luò)中起著組織者的作用。一個傳輸協(xié)議規(guī)定了數(shù)據(jù)以何種方式呈遞給下一個接收層,以及如何對數(shù)據(jù)相應(yīng)地進(jìn)行打包。它通過ndis把數(shù)據(jù)傳給網(wǎng)卡驅(qū)動程序,并通過tdi把數(shù)據(jù)傳給轉(zhuǎn)發(fā)程序(redirector)
tdi之上是轉(zhuǎn)發(fā)程序,它把本地的網(wǎng)絡(luò)資源申請轉(zhuǎn)送給網(wǎng)絡(luò)。
為了能和其他廠商的網(wǎng)絡(luò)互連,windowsnt允許有多個轉(zhuǎn)發(fā)程序。對于每一個轉(zhuǎn)發(fā)程序windowsnt計(jì)算機(jī)必須也有一個相應(yīng)的供應(yīng)者(provider)(由網(wǎng)絡(luò)廠商提供)。多供應(yīng)者路由選擇程序決定適當(dāng)?shù)墓⿷?yīng)者,然后借助于供應(yīng)者,對應(yīng)用請求到相應(yīng)的轉(zhuǎn)發(fā)程序做出選擇。
§1.1.2windowsnt網(wǎng)絡(luò)驅(qū)動程序
windowsnt支持兩種類型的網(wǎng)絡(luò)驅(qū)動程序
傳輸驅(qū)動程序
實(shí)現(xiàn)數(shù)據(jù)鏈路層中的邏輯鏈路控制子層協(xié)議和傳輸層協(xié)議。向下與ndis接口,向上與tdi接口。
網(wǎng)卡驅(qū)動程序
實(shí)現(xiàn)對物理層的管理和數(shù)據(jù)鏈路層中介質(zhì)訪問控制子層協(xié)議,通過ndis向下管理物理網(wǎng)卡,向上與傳輸驅(qū)動程序通信。
§1.1.3windowsnt網(wǎng)卡驅(qū)動程序
windowsnt環(huán)境下的網(wǎng)卡驅(qū)動程序也分為兩種:
miniport網(wǎng)卡驅(qū)動程序:miniport驅(qū)動程序只須實(shí)現(xiàn)與網(wǎng)絡(luò)硬件相關(guān)的操作(包括發(fā)送和接收)。而所有底層網(wǎng)卡驅(qū)動程序的通用操作(如同步),一般由ndis接口程序來實(shí)現(xiàn)。
full網(wǎng)卡驅(qū)動程序:full網(wǎng)卡驅(qū)動程序必須實(shí)現(xiàn)所有硬件相關(guān)和同步、排隊(duì)等操作。例如full網(wǎng)卡驅(qū)動程序?yàn)榱隧憫?yīng)數(shù)據(jù)接收,需要保持本身的捆綁信息,而miniport就可以由ndis接口庫來實(shí)現(xiàn)。
在windowsnt的早期版本中,full網(wǎng)卡驅(qū)動程序要求開發(fā)者實(shí)現(xiàn)許多底層操作,來處理多處理器的核心問題以及處理器、線程的同步,這樣不同的開發(fā)者在大量重復(fù)著許多相同的工作。
而miniport網(wǎng)卡驅(qū)動程序允許開發(fā)者僅僅寫一些與網(wǎng)絡(luò)硬件相關(guān)的代碼即可,而那些通用的函數(shù)由ndis接口庫來實(shí)現(xiàn),這樣開發(fā)出來的驅(qū)動程序減少了不必要的工作。
第二節(jié)miniport驅(qū)動程序的結(jié)構(gòu)
ndis接口規(guī)范了網(wǎng)卡驅(qū)動程序的實(shí)現(xiàn),同時也對tdi驅(qū)動程序的實(shí)現(xiàn)提出了一定的要求,在nt中,ndis約束下的網(wǎng)卡驅(qū)動程序、tdi驅(qū)動程序和系統(tǒng)的關(guān)系如下圖所示:
圖2.0ndis約束下的網(wǎng)卡驅(qū)動程序、tdi驅(qū)動程序和系統(tǒng)的關(guān)系
miniport驅(qū)動程序包括驅(qū)動程序?qū)ο、?qū)動程序源代碼和ndis接口庫代碼。windowsntddk提供ndis.h作為miniport驅(qū)動程序的主要頭文件,定義了miniport驅(qū)動程序的入口點(diǎn)、ndis接口庫函數(shù)和通用數(shù)據(jù)結(jié)構(gòu)。
上邊緣函數(shù)的作用是網(wǎng)卡驅(qū)動與ndis接口庫進(jìn)行通信,而下邊緣函數(shù)是tdi協(xié)議驅(qū)動程序與ndis通信的手段。
§1.2.1miniport網(wǎng)卡對象
ndis用一個叫做邏輯網(wǎng)卡的軟件對象來描述系統(tǒng)中的每塊網(wǎng)卡,而邏輯網(wǎng)卡與windowsnt設(shè)備對象的通信由i/o子系統(tǒng)來管理,描述網(wǎng)卡的設(shè)備對象包括相關(guān)的網(wǎng)絡(luò)信息如名字、網(wǎng)絡(luò)地址和網(wǎng)卡內(nèi)存基地址等,它還包含與硬件相關(guān)的驅(qū)動程序狀態(tài)數(shù)據(jù)(捆綁數(shù)目,捆綁句柄,包過濾數(shù)據(jù)庫等)。ndis分配一個句柄到miniportinitialize這個上邊緣函數(shù)的一個結(jié)構(gòu)中,然后miniport網(wǎng)卡驅(qū)動程序?qū)⒃谝院筇峁┻@個句柄來給ndis調(diào)用,這個結(jié)構(gòu)一直被ndis保持,并且對miniport驅(qū)動程序不透明。
當(dāng)miniport網(wǎng)卡驅(qū)動程序初始化一塊網(wǎng)卡時,它創(chuàng)立自己的內(nèi)部數(shù)據(jù)結(jié)構(gòu)來描述網(wǎng)卡,記錄需要它管理的與設(shè)備相關(guān)的狀態(tài)信息。當(dāng)miniport網(wǎng)卡驅(qū)動程序調(diào)用ndismsetatttibutes或ndismsetattributesex兩ndis庫函數(shù)時,它傳遞一個句柄給這數(shù)據(jù)結(jié)構(gòu)。這樣,當(dāng)調(diào)用miniport驅(qū)動程序入口點(diǎn)時,它就傳遞這個句柄來驗(yàn)證驅(qū)動程序所對應(yīng)的網(wǎng)卡的正確性。這個數(shù)據(jù)結(jié)構(gòu)為miniport網(wǎng)卡驅(qū)動程序所擁有并維護(hù)。
§1.2.2網(wǎng)絡(luò)對象標(biāo)識符
miniportnic驅(qū)動程序還需要維護(hù)一組對象,這些對象是系統(tǒng)定義的對象標(biāo)識符(objectidetifier:oid)來標(biāo)識,以描述驅(qū)動程序的性能和當(dāng)前狀態(tài)信息。為查詢這些信息,上層驅(qū)動程序調(diào)用ndisrequest向ndis接口庫指示oid。oid表示了調(diào)用所需的信息類型,如miniport驅(qū)動程序所支持的lookahead緩沖區(qū)大小等。ndis接到上層驅(qū)動程序的查詢請求,將oid傳遞給上邊緣函數(shù)miniportqueryinformation實(shí)現(xiàn)對oid的查詢,如果上層驅(qū)動程序請求改變狀態(tài)信息則調(diào)用miniportsetinformation實(shí)現(xiàn)對oid的設(shè)置。
§1.2.3miniport網(wǎng)卡驅(qū)動程序代碼
典型的miniportnic驅(qū)動程序必須有一些函數(shù)來通過ndis接口實(shí)現(xiàn)上層驅(qū)動程序與硬件的通信。這些函數(shù)稱為上邊緣服務(wù)函數(shù)。
這些上邊緣服務(wù)函數(shù)由驅(qū)動程序的開發(fā)者根據(jù)驅(qū)動程序面向的特定低層網(wǎng)絡(luò)類型和硬件以及相應(yīng)環(huán)境,可以有選擇地實(shí)現(xiàn),但必須保證驅(qū)動程序最基本的功能,這些基本功能包括初始化、發(fā)送、中斷處理、重置、參數(shù)查詢與設(shè)置和報(bào)文接收。
miniportinitialize:操作系統(tǒng)根據(jù)系統(tǒng)配置信息,檢測出網(wǎng)卡已安裝時,由ndis接口在初始化時調(diào)用,主要完成低層網(wǎng)絡(luò)類型確定,對應(yīng)于物理網(wǎng)卡的邏輯網(wǎng)卡初始化,中斷信息注冊,網(wǎng)卡與主機(jī)通訊方式的確認(rèn)。i/o端口的申請與注冊,內(nèi)存映像,mib的初始化,物理網(wǎng)卡的驗(yàn)證與初始化等。
miniportreconfigure:支持網(wǎng)卡參數(shù)動態(tài)變化,和miniportinitilize一樣由ndis接口以初
【windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動程序設(shè)計(jì)】相關(guān)文章:
windowsnt環(huán)境下fddi網(wǎng)卡驅(qū)動程序設(shè)計(jì)(2)03-18
Windows CE環(huán)境下無線網(wǎng)卡的自動安裝03-19
WindowsCE.Net下CAN卡的驅(qū)動程序設(shè)計(jì)03-20
嵌入式Linux下CAN總線驅(qū)動程序設(shè)計(jì)03-07
Windows NT中的登記項(xiàng)及其完整性03-06