【水晶玻璃鞋 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号,然后逐个移除各个协议链,最后再移除分层协议的提供者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值