一、簡介
二、lsp操作
netsh winsockoption:
? - 顯示命令列表。
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層 主要負責一些業務處...