LSP(分層服務提供程式)

2021-09-08 11:14:34 字數 3591 閱讀 5335

一、簡介

二、lsp操作

netsh winsock
option:

?              - 顯示命令列表。

audit          - 顯示已經安裝和刪除的 winsock lsp 列表。

dump           - 顯示乙個配置指令碼。

help           - 顯示命令列表。

remove         - 從系統中刪除 winsock lsp。

reset          - 重置 winsock 目錄為清除狀態。

set            - 設定 winsock 選項。

show           - 顯示資訊。

若需要命令的更多幫助資訊,請鍵入命令,接著是空格,

後面跟 ?。

常用指令

netsh winsock show catalog        #顯示已經安裝lsp 列表

netsh winsock reset #重置winsock lsp

三、實現lsp

步驟如下:

1

、安裝分層協議入口,以便獲取系統分配的目錄id號。

2、安裝乙個或者多個協議鏈,安裝的數量取決於要分層的下層協議的數量。

3、在結尾進行目錄排序。

參考:http://

四、示例

//

////

instdemo.cpp

#include

#include

//定義了wscwriteproviderorder函式

#include

#include

#pragma comment(lib, "ws2_32.lib")

#pragma comment(lib, "rpcrt4.lib") //

實現了uuidcreate函式

//要安裝的lsp的硬編碼,在移除的時候還要使用它

guid providerguid = };

lpwsaprotocol_infow getprovider(lpint lpntotalprotocols)

pprotoinfo =(lpwsaprotocol_infow)::globalalloc(gptr, dwsize);

*lpntotalprotocols = ::wscenumprotocols(null, pprotoinfo, &dwsize, &nerror);

return

pprotoinfo;

}void

freeprovider(lpwsaprotocol_infow pprotoinfo)

//將lsp安裝到udp協議提供者之上

int installprovider(wchar *wszdllpath)

} //首先安裝分層協議,獲取乙個winsock庫安排的目錄id號,即dwlayeredcatalogid

//直接使用下層協議的wsaprotocol_infow結構即可

memcpy(&udplayeredinfo, &udpchaininfo, sizeof

(udplayeredinfo));

//修改協議名稱,型別,設定pfl_hidden標誌

wcscpy(udplayeredinfo.szprotocol, wszlspname);

udplayeredinfo.protocolchain.chainlen = layered_protocol; //

layered_protocol即0

udplayeredinfo.dwproviderflags |=pfl_hidden;

//安裝

if(::wscinstallprovider(&providerguid,

wszdllpath, &udplayeredinfo, 1, &nerror) ==socket_error)

return

nerror;

//重新列舉協議,獲取分層協議的目錄id號

freeprovider(pprotoinfo);

pprotoinfo = getprovider(&nprotocols);

for(i=0; i)

}//安裝協議鏈

//修改協議名稱,型別

wchar wszchainname[wsaprotocol_len + 1

]; swprintf(wszchainname, l

"%ws over %ws

", wszlspname, udpchaininfo.szprotocol);

wcscpy(udpchaininfo.szprotocol, wszchainname);

if(udpchaininfo.protocolchain.chainlen == 1

)

else

}udpchaininfo.protocolchain.chainlen ++;

//將我們的分層協議置於此協議鏈的頂層

udpchaininfo.protocolchain.chainentries[0] =dwlayeredcatalogid;

//獲取乙個guid,安裝之

guid providerchainguid;

if(::uuidcreate(&providerchainguid) ==rpc_s_ok)

else

return

getlasterror();

//重新排序winsock目錄,將我們的協議鏈提前

//重新列舉安裝的協議

freeprovider(pprotoinfo);

pprotoinfo = getprovider(&nprotocols);

dword dwids[

20];

int nindex = 0

;

//新增我們的協議鏈

for(i=0; i)

//新增其它協議

for(i=0; i)

//重新排序winsock目錄

nerror =::wscwriteproviderorder(dwids, nindex);

freeprovider(pprotoinfo);

return

nerror;

}void

removeprovider()

}if(i }

//移除分層協議

::wscdeinstallprovider(&providerguid, &nerror);

}}///

/int binstall = 0

;void

main()

else

}else

removeprovider();

}

LSP(分層服務提供者)

lsp本身是dll,可以將它安裝到winsock目錄,以便建立套接字的應用程式不必知道此lsp的任何資訊就能呼叫它。執行原理 套接字建立函式會在winsock目錄中尋找合適的協議 呼叫此協議,的提供者匯出的函式 完成各種功能。編寫目的 讓使用者呼叫自定義的服務提供者,有自定義的服務提供者呼叫下層提供...

安裝LSP分層服務的理解

要安裝在udp之上.網路 1。列舉所有的,找到udp的入口wsaprotocol infow 2。拷備乙個wsaprotocol infow到2個變數中,下面安裝的的lsp需要分層和協議鏈 wsaprotocol infow inf1,inf2 3。修改幾個必要的字段和標誌位 4。然後把這個分層服務...

5 27程式分層

什麼事mvc模式就是按照程式的功能將他們分成三層,分別是model層 模型層 view層 顯示層 controller層 控制層 分層的直接體現是將不同功能的 儲存到不同的包中。modle層又可以細分為兩層,分別是dao層,service層,這兩層的主要功能 1.service層 主要負責一些業務處...