-分层服务提供者(LSP)
开发过滤数据包的LSP程序可以定义过滤规则,恩,先看看
LSP本身是DLL,可以将它安装至Winsock目录,创建套接字的应用程序不必知道此LSP的任何信息就能调用它
1. 运行原理
用户创建套接字
1) 套接字创建函数(如socket)在Winsock目录寻找合适的协议
2) 此协议的提供者导出的函数完成各种功能
我们的目的:
1) 将自己编写的提供者安装到Winsock目录中,让用户调用我们的服务提供者
2) 由我们的提供者调用下层提供者
就可以截获所有的Winsock调用
服务提供者本身是DLL,导出与Windows API相对应的函数,如WSPStartup,WSPSocket,WSPSendTo等.
这里的LSP向上导出所有的SPI函数供Ws2_32.dll调用,在内部又通过基础服务提供者实现这些SPI
2. 安装LSP
实现LSP之前,将分层提供者安装到Winsock目录,安装一个LSP包括安装一个WSAPROTOCOL_INFOW结构(协议的入口),让创建套接字的应用程序可以枚举到它.
WSAPROTOCOL_INFOW结构:定义了分层提供者的特性和LSP是如何填写"链"的.
(1) 协议链
LSP和基础提供者连在一起形成了协议链,协议链描述了分层提供者加入Winsock目录的顺序.
SPI提供三中协议:分层协议,基础协议,协议链
协议类型由WSAPROTOCOL_INFOW结构内的WSAPROTOCOLCHAIN结构中数据指定,如下:
typedef struct _WSAPROTOCOLCHAIN {
int ChainLen; &nb