我爱Aspx >> VC.Net >> 简单分析用SPI实现防火墙现在我们看看ws2_32.dll里的API的,ws2_32里的API被应用程序调用后大部分都最终映射成了SPI里的30个函数,这30个函数都是用WSP开头的。注意,SPI里的30个函数是不能被应用程序直接调用的,而是应该由ws2_32.dll来调用。而LPWSPPROC_TABLE是一个表,里面保存了这30个函数的指针。我们通过调用下一层服务提供者的WSPStarup来得到下一层服务提供者的30个函数指针,同时我们也要EXPORT(SPI是一个DLL)这个函数,以便我们上一层的服务提供者来调用得到这30个函数指针。
例如
int WSPStartup (
WORD wVersionRequested,
LPWSPDATAW lpWSPData,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
WSPUPCALLTABLE UpcallTable,
LPWSPPROC_TABLE lpProcTable
)
{
LPWSPSTARUP WSPStarProc=GetProcAddress(LbHandle,"WSPStartup");//得到下一层服务提供者的WSPStatrup函数指针,记得要先LoadLibrary下一层服务提供者的DLL
WSPStarProc(wVersionRequested,lpWSPData,lpProtocolInfo,UpcallTable,lpProcTable )
//记得要保留下一层原来的函数指针,有过HOOK API经验的朋友应该知道,就像要保存你HOOK 的API原来的地址一样
WSPPROC_TABLE SystemProc=*lpProcTable;
//然后就可以设置自己的处理函数了,和HOOK API也差不多,比如
lpProcTable->lpWSPSend=WSPSend;
【我对这篇文章有话说?】
简单分析用SPI实现防火墙[05-21]
WIN32用户界面设计基础之Cursor篇[05-21]
WIN32用户界面设计基础之Cursor篇[05-21]
程序员手记:简析Java RMI 与 .N..[05-21]
智力游戏九连环的算法[05-21]
一个IE浏览器Explorer Bar的例子[05-21]
如何用C++编程获得某台机器的IP地..[05-21]
.NET框架以及在C++中的初步应用[05-21]
汉诺塔移动步数的计算[05-21]
关于Profile的系列文章(二)[05-21]