HINSTANCE hfilter; LPWSPSTARTUP wspstartupfunc=NULL;
if(lpprotoinfo->ProtocolChain.ChainLen<=1) { OutputDebugString(_T("ChainLen<=1")); return FALSE; }
getfilter();
for(i=0;i<totalprotos;i++) { if(memcmp(&protoinfo[i].ProviderId,&filterguid,sizeof(GUID))==0) { layerid=protoinfo[i].dwCatalogEntryId; break; } }
for(i=0;i<lpprotoinfo->ProtocolChain.ChainLen;i++) { if(lpprotoinfo->ProtocolChain.ChainEntries[i]==layerid) { nextlayerid=lpprotoinfo->ProtocolChain.ChainEntries[i+1]; break; } }
filterpathlen=MAX_PATH; filterpath=(TCHAR*)GlobalAlloc(GPTR,filterpathlen); for(i=0;i<totalprotos;i++) { if(nextlayerid==protoinfo[i].dwCatalogEntryId) { if(WSCGetProviderPath(&protoinfo[i].ProviderId,filterpath,&filterpathlen,&errorcode)==SOCKET_ERROR) { OutputDebugString(_T("WSCGetProviderPath Error!")); return WSAEPROVIDERFAILEDINIT; } break; } }
if(!ExpandEnvironmentStrings(filterpath,filterpath,MAX_PATH)) { OutputDebugString(_T("ExpandEnvironmentStrings Error!")); return WSAEPROVIDERFAILEDINIT; }
if((hfilter=LoadLibrary(filterpath))==NULL) { OutputDebugString(_T("LoadLibrary Error!")); return WSAEPROVIDERFAILEDINIT; }
if((wspstartupfunc=(LPWSPSTARTUP)GetProcAddress(hfilter,"WSPStartup"))==NULL) { OutputDebugString(_T("GetProcessAddress Error!")); return WSAEPROVIDERFAILEDINIT; }
if((errorcode=wspstartupfunc(wversionrequested,lpwspdata,lpprotoinfo,upcalltable,lpproctable))!=ERROR_SUCCESS) { OutputDebugString(_T("wspstartupfunc Error!")); return errorcode; }
nextproctable=*lpproctable;
freefilter(); return 0; }
3.testBD.exe的源代码
#include <winsock2.h> #include <stdio.h> #include <conio.h>
int main() { WSADATA wsa; SOCKET sock; struct sockaddr_in sin;
上一篇:无盘工作站2000终端全攻略
下一篇:极限软件电影下载密技
|