When this dll is loaded is gets he addresses of the functions..
ws2_32_main.cpp
CODE
#include <windows.h>
#include "ws2_32.h"
HINSTANCE h_original;
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
char path[MAX_PATH];
GetSystemDirectory(path, MAX_PATH);
strcat(path, "\\ws2_32.dll");
switch( ul_reason_for_call ) {
case DLL_PROCESS_ATTACH:
h_original = LoadLibrary( path );
if ( h_original == NULL ) return FALSE;
p_accept = (APIWRAPPER)GetProcAddress(h_original, "accept");
p_bind = (APIWRAPPER)GetProcAddress(h_original, "bind");
p_closesocket = (APIWRAPPER)GetProcAddress(h_original, "closesocket");
p_connect = (APIWRAPPER)GetProcAddress(h_original, "connect");
p_getpeername = (APIWRAPPER)GetProcAddress(h_original, "getpeername");
p_getsockname = (APIWRAPPER)GetProcAddress(h_original, "getsockname");
p_getsockopt = (APIWRAPPER)GetProcAddress(h_original, "getsockopt");
p_htonl = (APIWRAPPER)GetProcAddress(h_original, "htonl");
p_htons = (APIWRAPPER)GetProcAddress(h_original, "htons");
p_ioctlsocket = (APIWRAPPER)GetProcAddress(h_original, "ioctlsocket");
p_inet_addr = (APIWRAPPER)GetProcAddress(h_original, "inet_addr");
p_inet_ntoa = (APIWRAPPER)GetProcAddress(h_original, "inet_ntoa");
p_listen = (APIWRAPPER)GetProcAddress(h_original, "listen");
p_ntohl = (APIWRAPPER)GetProcAddress(h_original, "ntohl");
p_ntohs = (APIWRAPPER)GetProcAddress(h_original, "ntohs");
p_recv = (APIWRAPPER)GetProcAddress(h_original, "recv");
p_recvfrom = (APIWRAPPER)GetProcAddress(h_original, "recvfrom");
p_select = (APIWRAPPER)GetProcAddress(h_original, "select");
p_send = (APIWRAPPER)GetProcAddress(h_original, "send");
p_sendto = (APIWRAPPER)GetProcAddress(h_original, "sendto");
p_setsockopt = (APIWRAPPER)GetProcAddress(h_original, "setsockopt");
p_shutdown = (APIWRAPPER)GetProcAddress(h_original, "shutdown");
p_socket = (APIWRAPPER)GetProcAddress(h_original, "socket");
p_GetAddrInfoW = (APIWRAPPER)GetProcAddress(h_original, "GetAddrInfoW");
p_GetNameInfoW = (APIWRAPPER)GetProcAddress(h_original, "GetNameInfoW");
p_WSApSetPostRoutine = (APIWRAPPER)GetProcAddress(h_original, "WSApSetPostRoutine");
p_FreeAddrInfoW = (APIWRAPPER)GetProcAddress(h_original, "FreeAddrInfoW");
p_WPUCompleteOverlappedRequest = (APIWRAPPER)GetProcAddress(h_original, "WPUCompleteOverlappedRequest");
p_WSAAccept = (APIWRAPPER)GetProcAddress(h_original, "WSAAccept");
p_WSAAddressToStringA = (APIWRAPPER)GetProcAddress(h_original, "WSAAddressToStringA");
p_WSAAddressToStringW = (APIWRAPPER)GetProcAddress(h_original, "WSAAddressToStringW");
p_WSACloseEvent = (APIWRAPPER)GetProcAddress(h_original, "WSACloseEvent");
p_WSAConnect = (APIWRAPPER)GetProcAddress(h_original, "WSAConnect");
p_WSACreateEvent = (APIWRAPPER)GetProcAddress(h_original, "WSACreateEvent");
p_WSADuplicateSocketA = (APIWRAPPER)GetProcAddress(h_original, "WSADuplicateSocketA");
p_WSADuplicateSocketW = (APIWRAPPER)GetProcAddress(h_original, "WSADuplicateSocketW");
p_WSAEnumNameSpaceProvidersA = (APIWRAPPER)GetProcAddress(h_original, "WSAEnumNameSpaceProvidersA");
p_WSAEnumNameSpaceProvidersW = (APIWRAPPER)GetProcAddress(h_original, "WSAEnumNameSpaceProvidersW");
p_WSAEnumNetworkEvents = (APIWRAPPER)GetProcAddress(h_original, "WSAEnumNetworkEvents");
p_WSAEnumProtocolsA = (APIWRAPPER)GetProcAddress(h_original, "WSAEnumProtocolsA");
p_WSAEnumProtocolsW = (APIWRAPPER)GetProcAddress(h_original, "WSAEnumProtocolsW");
p_WSAEventSelect = (APIWRAPPER)GetProcAddress(h_original, "WSAEventSelect");
p_WSAGetOverlappedResult = (APIWRAPPER)GetProcAddress(h_original, "WSAGetOverlappedResult");
p_WSAGetQOSByName = (APIWRAPPER)GetProcAddress(h_original, "WSAGetQOSByName");
p_WSAGetServiceClassInfoA = (APIWRAPPER)GetProcAddress(h_original, "WSAGetServiceClassInfoA");
p_WSAGetServiceClassInfoW = (APIWRAPPER)GetProcAddress(h_original, "WSAGetServiceClassInfoW");
p_WSAGetServiceClassNameByClassIdA = (APIWRAPPER)GetProcAddress(h_original, "WSAGetServiceClassNameByClassIdA");
p_WSAGetServiceClassNameByClassIdW = (APIWRAPPER)GetProcAddress(h_original, "WSAGetServiceClassNameByClassIdW");
p_WSAHtonl = (APIWRAPPER)GetProcAddress(h_original, "WSAHtonl");
p_WSAHtons = (APIWRAPPER)GetProcAddress(h_original, "WSAHtons");
p_gethostbyaddr = (APIWRAPPER)GetProcAddress(h_original, "gethostbyaddr");
p_gethostbyname = (APIWRAPPER)GetProcAddress(h_original, "gethostbyname");
p_getprotobyname = (APIWRAPPER)GetProcAddress(h_original, "getprotobyname");
p_getprotobynumber = (APIWRAPPER)GetProcAddress(h_original, "getprotobynumber");
p_getservbyname = (APIWRAPPER)GetProcAddress(h_original, "getservbyname");
p_getservbyport = (APIWRAPPER)GetProcAddress(h_original, "getservbyport");
p_gethostname = (APIWRAPPER)GetProcAddress(h_original, "gethostname");
p_WSAInstallServiceClassA = (APIWRAPPER)GetProcAddress(h_original, "WSAInstallServiceClassA");
p_WSAInstallServiceClassW = (APIWRAPPER)GetProcAddress(h_original, "WSAInstallServiceClassW");
p_WSAIoctl = (APIWRAPPER)GetProcAddress(h_original, "WSAIoctl");
p_WSAJoinLeaf = (APIWRAPPER)GetProcAddress(h_original, "WSAJoinLeaf");
p_WSALookupServiceBeginA = (APIWRAPPER)GetProcAddress(h_original, "WSALookupServiceBeginA");
p_WSALookupServiceBeginW = (APIWRAPPER)GetProcAddress(h_original, "WSALookupServiceBeginW");
p_WSALookupServiceEnd = (APIWRAPPER)GetProcAddress(h_original, "WSALookupServiceEnd");
p_WSALookupServiceNextA = (APIWRAPPER)GetProcAddress(h_original, "WSALookupServiceNextA");
p_WSALookupServiceNextW = (APIWRAPPER)GetProcAddress(h_original, "WSALookupServiceNextW");
p_WSANSPIoctl = (APIWRAPPER)GetProcAddress(h_original, "WSANSPIoctl");
p_WSANtohl = (APIWRAPPER)GetProcAddress(h_original, "WSANtohl");
p_WSANtohs = (APIWRAPPER)GetProcAddress(h_original, "WSANtohs");
p_WSAProviderConfigChange = (APIWRAPPER)GetProcAddress(h_original, "WSAProviderConfigChange");
p_WSARecv = (APIWRAPPER)GetProcAddress(h_original, "WSARecv");
p_WSARecvDisconnect = (APIWRAPPER)GetProcAddress(h_original, "WSARecvDisconnect");
p_WSARecvFrom = (APIWRAPPER)GetProcAddress(h_original, "WSARecvFrom");
p_WSARemoveServiceClass = (APIWRAPPER)GetProcAddress(h_original, "WSARemoveServiceClass");
p_WSAResetEvent = (APIWRAPPER)GetProcAddress(h_original, "WSAResetEvent");
p_WSASend = (APIWRAPPER)GetProcAddress(h_original, "WSASend");
p_WSASendDisconnect = (APIWRAPPER)GetProcAddress(h_original, "WSASendDisconnect");
p_WSASendTo = (APIWRAPPER)GetProcAddress(h_original, "WSASendTo");
p_WSASetEvent = (APIWRAPPER)GetProcAddress(h_original, "WSASetEvent");
p_WSASetServiceA = (APIWRAPPER)GetProcAddress(h_original, "WSASetServiceA");
p_WSASetServiceW = (APIWRAPPER)GetProcAddress(h_original, "WSASetServiceW");
p_WSASocketA = (APIWRAPPER)GetProcAddress(h_original, "WSASocketA");
p_WSASocketW = (APIWRAPPER)GetProcAddress(h_original, "WSASocketW");
p_WSAStringToAddressA = (APIWRAPPER)GetProcAddress(h_original, "WSAStringToAddressA");
p_WSAStringToAddressW = (APIWRAPPER)GetProcAddress(h_original, "WSAStringToAddressW");
p_WSAWaitForMultipleEvents = (APIWRAPPER)GetProcAddress(h_original, "WSAWaitForMultipleEvents");
p_WSCDeinstallProvider = (APIWRAPPER)GetProcAddress(h_original, "WSCDeinstallProvider");
p_WSCEnableNSProvider = (APIWRAPPER)GetProcAddress(h_original, "WSCEnableNSProvider");
p_WSCEnumProtocols = (APIWRAPPER)GetProcAddress(h_original, "WSCEnumProtocols");
p_WSCGetProviderPath = (APIWRAPPER)GetProcAddress(h_original, "WSCGetProviderPath");
p_WSCInstallNameSpace = (APIWRAPPER)GetProcAddress(h_original, "WSCInstallNameSpace");
p_WSCInstallProvider = (APIWRAPPER)GetProcAddress(h_original, "WSCInstallProvider");
p_WSCUnInstallNameSpace = (APIWRAPPER)GetProcAddress(h_original, "WSCUnInstallNameSpace");
p_WSCUpdateProvider = (APIWRAPPER)GetProcAddress(h_original, "WSCUpdateProvider");
p_WSCWriteNameSpaceOrder = (APIWRAPPER)GetProcAddress(h_original, "WSCWriteNameSpaceOrder");
p_WSCWriteProviderOrder = (APIWRAPPER)GetProcAddress(h_original, "WSCWriteProviderOrder");
p_freeaddrinfo = (APIWRAPPER)GetProcAddress(h_original, "freeaddrinfo");
p_getaddrinfo = (APIWRAPPER)GetProcAddress(h_original, "getaddrinfo");
p_getnameinfo = (APIWRAPPER)GetProcAddress(h_original, "getnameinfo");
p_WSAAsyncSelect = (APIWRAPPER)GetProcAddress(h_original, "WSAAsyncSelect");
p_WSAAsyncGetHostByAddr = (APIWRAPPER)GetProcAddress(h_original, "WSAAsyncGetHostByAddr");
p_WSAAsyncGetHostByName = (APIWRAPPER)GetProcAddress(h_original, "WSAAsyncGetHostByName");
p_WSAAsyncGetProtoByNumber = (APIWRAPPER)GetProcAddress(h_original, "WSAAsyncGetProtoByNumber");
p_WSAAsyncGetProtoByName = (APIWRAPPER)GetProcAddress(h_original, "WSAAsyncGetProtoByName");
p_WSAAsyncGetServByPort = (APIWRAPPER)GetProcAddress(h_original, "WSAAsyncGetServByPort");
p_WSAAsyncGetServByName = (APIWRAPPER)GetProcAddress(h_original, "WSAAsyncGetServByName");
p_WSACancelAsyncRequest = (APIWRAPPER)GetProcAddress(h_original, "WSACancelAsyncRequest");
p_WSASetBlockingHook = (APIWRAPPER)GetProcAddress(h_original, "WSASetBlockingHook");
p_WSAUnhookBlockingHook = (APIWRAPPER)GetProcAddress(h_original, "WSAUnhookBlockingHook");
p_WSAGetLastError = (APIWRAPPER)GetProcAddress(h_original, "WSAGetLastError");
p_WSASetLastError = (APIWRAPPER)GetProcAddress(h_original, "WSASetLastError");
p_WSACancelBlockingCall = (APIWRAPPER)GetProcAddress(h_original, "WSACancelBlockingCall");
p_WSAIsBlocking = (APIWRAPPER)GetProcAddress(h_original, "WSAIsBlocking");
p_WSAStartup = (APIWRAPPER)GetProcAddress(h_original, "WSAStartup");
p_WSACleanup = (APIWRAPPER)GetProcAddress(h_original, "WSACleanup");
p___WSAFDIsSet = (APIWRAPPER)GetProcAddress(h_original, "__WSAFDIsSet");
p_WEP = (APIWRAPPER)GetProcAddress(h_original, "WEP");
break;
case DLL_PROCESS_DETACH:
FreeLibrary( h_original );
break;
default:
break;
}
return TRUE;
}
And this is HOW its used..

Example:
CODE
//ws2_32_hook.cpp:
int WINAPI h_connect(SOCKET s, struct sockaddr *name, int namelen)
{
int ret = plugin->ModOnConnect(s,name,namelen);
return p_connect(s,name,namelen);
}
//ws2_32.h:
extern int (__stdcall *p_connect)( int s, const void* name, int namelen);
Cheers.