LSP在注册表中的位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters下的Current_NameSpace_Catalog描述了当先使用的协议目录,一般为Protocol_Catalog9。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9下的Num_Catalog_Entries记录了该结构链的节点的总数。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries下面的以序号为键名的内容依次对应了一个服务程序.
程序首先读取Current_Protocol_Catalog协议目录存放的子键名称,接着读取存放目录子键下的Num_Catalog_Entries目录总数,接着遍历Catalog_Entries下的所有存放协议目录的子键,他们的存放结构如下:
typedef struct tagPACKED_CATALOG_ITEM
{
char spi_path[MAX_PATH]; // dll的路径名称
WSAPROTOCOL_INFO protocol_info; // 协议的结构体
} PACKED_CATALOG_ITEM, *PPACKED_CATALOG_ITEM;
将注册表存放目录的数据填充到这个结构体里面即可.
如何判断是否有效的LSP呢。
1、对协议结构体中的CLSID进行匹配,与以下的CLSID:
{E70F1AA0-AB8B-11CF-8CA3-00805F48A192}
{9D60A9