安装LSP分层服务的理解

要安装在udp之上.(代码来源网络)

1。枚举所有的,找到UDP的入口WSAPROTOCOL_INFOW

2。拷备一个WSAPROTOCOL_INFOW到2个变量中,下面安装的的LSP需要分层和协议链

WSAPROTOCOL_INFOW inf1,inf2

3。修改几个必要的字段和标志位

4。然后把这个分层服务inf1安装上去

5。再一次枚举所有的,找到刚刚安装的LSP,获得系统分配的dwCatalogEntryId

6。修改inf2中的ProtocolChain结构,如下修改:

如果inf2是基础协议1的话,ProtocolChain.ChainLen++,给它添加一个分层服务(这时

候这个inf2也变成一个协议链了),然后把它原来的dwCatalogEntryId往后移一位
如果inf2是协议链>2的话,ProtocolChain.ChainLen++,在原来的协议链增加多一个分

层,然后循环把ProtocolChain.ChainEntries数组的元素各个往后移。

以上两个完成之后,把ProtocolChain.ChainEntries[0]设置为第5步获得的

dwCatalogEntryId

然后把这个inf2安装上去

7。循环扫描一次所有的,找到我们在6中安装的协议链,(协议链,所以>1)

// 添加我们的协议链,(在数组前面)
    for(i=0; i<nProtocols; i++)
    {
        if((pProtoInfo[i].ProtocolChain.ChainLen > 1) && (pProtoInfo

[i].ProtocolChain.ChainEntries[0] == dwLayeredCatalogId))
        {
            dwIds[nIndex++] = pProtoInfo[i].dwCatalogEntryId;
        }
    }
    // 添加其它协议
    for(i=0; i<nProtocols; i++)
    {
        if((pProtoInfo[i].ProtocolChain.ChainLen <= 1) || (pProtoInfo

[i].ProtocolChain.ChainEntries[0] != dwLayeredCatalogId))
        {
            dwIds[nIndex++] = pProtoInfo[i].dwCatalogEntryId;
        }
    }

最后再调用。。。。。。。


WSCWriteProviderOrder(dwIds, nIndex)
这时候我们的协议链就是最顶了,而且ProtocolChain.ChainEntries[0]是我们安装的

lsp

=============================================================================

====================


// 卸载LSP
//
BOOL RemoveProvider()
{
    LPWSAPROTOCOL_INFOW pProtoInfo;
    int nProtocols;
    DWORD dwLayeredCatalogId;
  
    // 根据Guid取得分层协议的目录ID号
    pProtoInfo = GetProvider(&nProtocols);
    int nError;
    for(int i=0; i<nProtocols; i++)
    {
        if(memcmp(&ProviderGuid, &pProtoInfo[i].ProviderId, sizeof

(ProviderGuid)) == 0)
        {
            dwLayeredCatalogId = pProtoInfo[i].dwCatalogEntryId;
            break;
        }
    }
  
    if(i < nProtocols)
    {
        // 移除协议链
        for(i=0; i<nProtocols; i++)
        {
            if((pProtoInfo[i].ProtocolChain.ChainLen > 1) && (pProtoInfo

[i].ProtocolChain.ChainEntries[0] == dwLayeredCatalogId))
            {
                ::WSCDeinstallProvider(&pProtoInfo[i].ProviderId, &nError);
            }
        }
        // 移除分层协议
        ::WSCDeinstallProvider(&ProviderGuid, &nError);
    }
  
    return TRUE;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值