2016年8月15日 星期一

TDI Transports and Their Clients - VI

TDI Requests Versus Events

多數低階網路介面,例如NetBIOS以及Windows Sockets為單向的。無論何時只要客戶端需要,它就可以調用底層的傳輸驅動,但是傳輸驅動卻不能主動呼叫客戶端。只有在傳輸驅動要回覆客戶端一個特定錯誤碼的時候才有機會對他的客戶端"說話"

TDI提供一個事件-通知機制,如果客戶端已經註冊ClientEventXxx 事件處理程序,則允許一個TDI傳輸驅動在一個特定網路事件發生時調用它的核心模式客戶端(例如,接收一個數據報)TDI客戶端支援回呼函式並且處理對應的工作。

Windows2000之後,為了PnP-aware傳輸,TDI也定義了一種方式在一個傳輸建立或是解除自己與底層的NIC綁定的時候,在傳輸驅動在任何特定綁定建立或是中斷一個連線的時候或是在一個系統電源狀態改變的時候,通知它的客戶端這些事件的發生。要接收這些類型的通知,則傳輸驅動的客戶端需要註冊一組ClientPnPXxx的事件處理程序。在TDI Device Objects內有介紹。

當一個TDI傳輸驅動調用客戶端註冊的ClientEventXxx 處理程序,它可以在此呼叫傳送一個作為參數的有限數據給客戶。此特徵允許客戶端不需要配置緩衝區來接收來自傳輸端的訊息。

例如,重定向器藉著此TDI特徵的優點。大多數重定發送給伺服端的請求(例如寫入一個SMBs)小於標準的SMB標頭。此標頭,包括狀態指示器,多重ID等等的長度,是相當小的,通常小於100個字節。當底層傳輸驅動調用重定向註冊的ClientEventReceive處理程序,重定向只需要檢視指示的訊息,注意SMB的回應狀態。在這樣的傳輸交易下,重定向不需要配置緩衝來接收SMB的回應訊息。


沒有留言:

張貼留言