Closing a Connection Endpoint
下圖示範一個核心模式客戶如何關閉一個連接端點。
在一個點對點連線已經斷線以後,一個客戶可以關閉連接端點。當一個客戶不在需要使用一個開啟的連接端點(connection endpoint),它必須如下關閉連接端點:
- 透過 ObReferenceObjectByHandle 得到檔案物件,並且使用 ObDereferenceObject。
- 使用 ZwClose 關閉 ZwCreateFile 產生的file handle。
接者,I/O管理員提交 IRPs 到傳輸端的 TdiDispatchCleanup,以及之後的 TdiDispatchClose 例程。
這些傳輸例程立即的關閉連接端點並且釋放所有相關的傳輸驅動資源。TdiDispatchCleanup 也透過發送一個斷線通知給對應的遠端節點傳輸終止所有的連線活動。
如前述, 在建立一個關閉連線端點請求之前,TDI客戶不需要撇清(disassociate)連接端點與它所關聯的傳輸位址。如有需要,底層傳輸會模擬一個撇清的影響。
然而,一個客戶可以在關閉連線端點之前,明確的透過 TDI_DISSOCIATE_ADDRESS 請求來撇清(disassociate)一個連接端點與一個開啟的傳輸位址,這可以使用 TdiBuildDisassociateAddress 來封裝這個請求。
沒有留言:
張貼留言