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