2016年8月12日 星期五

TDI Transports and Their Clients - IV

TDI Transport Driver Routines

每一個符合TDI標準的傳輸驅動程式必須導出(export)一組進入點(entry points)來給I/O管理員調用。

一些標準TDI傳輸驅動的例程(routines),如初始或是卸載(unload)例程由驅動自己本身負責調用。其他標準的派遣(Dispatch)例程,當TDI客戶調用系統所支援的例程時,由I/O管理員負責調用,例如ZwCreateFile 以及 IoCallDriver

就像其他的核心模式驅動一樣,一個TDI傳輸的DriverEntry例程設定一個或者多個派遣(Dispatch)例程來處理多種類型的I/O請求(IRPs)TDI驅動可以導出單一個派遣歷程來處理所有進來的IRPs或是一個個分開的DispatchXxx來處理每一個驅動所支援的IRP_MJ_XXX有關更多特定TDI要求的派遣例程,請參考TDI Routines, Macros, and Callbacks

當一個TDI傳輸完成一個客戶端的要求,I/O管理員會調用IoCompletion,此IoCompletion會在客戶端提交I/O請求給底層傳輸之前設定在IRP內部。

另外,當特定的網路事件發生時,傳輸驅動必須調用先前在TDI客戶所註冊的事件處理(event handler)。這些客戶端支援的事件處理會總結在TDI Routines, Macros, and Callbacks以及也會在Network Driver Reference章節討論。

在傳輸層下緣,TDI驅動必須導出一組ProtocolXxx 函式,此組函式會底層NDIS中間層或是NIC驅動透過NDIS函式庫調用。這些NDIS驅動下緣函式在本篇更早以前就有介紹(我想他指的是NDIS的章節)


沒有留言:

張貼留言