【水晶玻璃鞋 13】SPI技術2

SPI由兩部分組成——傳輸服務提供者和命名空間服務提供者;

傳輸服務提供者(通常是指協議堆棧)是提供建立連接、傳輸數據、行使流控制、出錯控制的服務,他有兩種類型:分層的(LSP)和基礎的(BSP)。

BSP負責實現傳輸協議的真正細節,它導出Winsock接口,此接口直接實現協議;LSP將自己安裝到Winsock目錄中的基礎提供者上面,很可能在其他分增提供者之間,他截取來自應用程序的WinsockAPI調用。

LSP本身就是dll,可以將它安裝到Winsock目錄,以便創建套接字的應用程序不必知道此LSP的任何信息就能調用它。

安裝LSP

實現LSP之前,首先是要將分層提供者安裝到Winsock目錄,安裝LSP包括安裝一個WSAPROTOCAL_INFLOW結構,它定義了分層提供者的特性和LSP是如何填寫“鏈”的。安裝LSP就是向Winsock目錄中安裝一個WSAPROTOCAL_INFLOW結構,讓創建套接字的應用程序可以枚舉他。

協議鏈

LSP和基礎提供者連在一起形成了協議鏈,協議鏈描述了分層提供者加入Winsock目錄的順序。實現LSP的dll或者被另外一個LSP加載,或者直接擺Ws2_32.dll加載,取決於他在協議鏈中的位置。如果LSP沒有在協議鏈的頂層,他就會被鏈中位於它上層的LSP加載,否則的話,被Ws2_32.dll加載。不管是誰,加載LSP之後,必須首先調用哪個LSP導出的函數WSPStartup,並將包含在協議鏈的WSAPEOTOCOL_INFOW結構傳遞給這個函數。被加載的LSP再從協議鏈中找到爲自己下方的提供者,進而加載它。

安裝LSP,必須在Winsock目錄中安裝兩種協議:一個分層協議和一個協議鏈。安裝分層協議(ChainLen爲0)是爲了獲取Winsock庫分配的目錄ID號,以便在協議鏈中標識自己的位置。協議鏈纔是Winsock目錄中LSP的真正入口,鏈中包含了自己分層協議的目錄ID號和下層提供者的目錄ID號。安裝函數是

Int WSCInstallProvider

重新排序目錄,以便新安裝的LSP入口首先出現:

Int WSCWriteProviderOrder(LPDWORD lpwdCatalogEntryID,DWORDdwNumberOfEntries)

總結:安裝新的分層服務提供者,需要首先安裝分層協議入口,以便獲取系統分配的目錄ID號。分層協議安裝之後,在安裝一個或者多個協議鏈,安裝的數量取決於要分層的下層協議的數量。例如,要將LSP安裝在TCP、UDP和Raw之上,就要安裝3個協議鏈。然後在大多數情況下,需喲重新排序Winsock,以便應用程序調用LSP,而不是調用基礎提供者。

移除LSP

移除LSP時,先根據分層洗衣的GUID號找到其目錄ID號,然後逐個移除各個協議鏈,最後再移除分層協議的提供者。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章