1
0
mirror of https://github.com/solemnwarning/ipxwrapper synced 2024-12-30 16:45:37 +01:00

Rewrote stub generation code to create ASM code, no more unimplemented functions due to missing declarations!

This commit is contained in:
Daniel Collins 2009-01-25 17:06:29 +00:00
parent 62c8078ad5
commit 75c0f30518
9 changed files with 202 additions and 265 deletions

View File

@ -24,7 +24,7 @@ all: ipxwrapper.dll wsock32.dll mswsock.dll
clean:
rm -f src/*.o
rm -f src/*_stubs.c
rm -f src/*_stubs.s
ipxwrapper.dll: $(IPXWRAPPER_DEPS)
$(CC) $(CFLAGS) -Wl,--enable-stdcall-fixup -shared -o ipxwrapper.dll $(IPXWRAPPER_DEPS) -liphlpapi
@ -41,23 +41,23 @@ src/ipxwrapper.o: src/ipxwrapper.c src/ipxwrapper.h
src/winsock.o: src/winsock.c src/ipxwrapper.h
$(CC) $(CFLAGS) -c -o src/winsock.o src/winsock.c
src/ipxwrapper_stubs.o: src/ipxwrapper_stubs.c
$(CC) $(CFLAGS) -c -o src/ipxwrapper_stubs.o src/ipxwrapper_stubs.c
src/ipxwrapper_stubs.o: src/ipxwrapper_stubs.s
nasm -f win32 -o src/ipxwrapper_stubs.o src/ipxwrapper_stubs.s
src/ipxwrapper_stubs.c: src/ipxwrapper_stubs.txt
perl mkstubs.pl src/ipxwrapper_stubs.txt src/ipxwrapper_stubs.c
src/ipxwrapper_stubs.s: src/ipxwrapper_stubs.txt
perl mkstubs.pl src/ipxwrapper_stubs.txt src/ipxwrapper_stubs.s
src/stubdll.o: src/stubdll.c
$(CC) $(CFLAGS) -c -o src/stubdll.o src/stubdll.c
src/wsock32_stubs.o: src/wsock32_stubs.c
$(CC) $(CFLAGS) -c -o src/wsock32_stubs.o src/wsock32_stubs.c
src/wsock32_stubs.o: src/wsock32_stubs.s
nasm -f win32 -o src/wsock32_stubs.o src/wsock32_stubs.s
src/wsock32_stubs.c: src/wsock32_stubs.txt
perl mkstubs.pl src/wsock32_stubs.txt src/wsock32_stubs.c wsock32.dll
src/wsock32_stubs.s: src/wsock32_stubs.txt
perl mkstubs.pl src/wsock32_stubs.txt src/wsock32_stubs.s wsock32.dll
src/mswsock_stubs.o: src/mswsock_stubs.c
$(CC) $(CFLAGS) -c -o src/mswsock_stubs.o src/mswsock_stubs.c
src/mswsock_stubs.o: src/mswsock_stubs.s
nasm -f win32 -o src/mswsock_stubs.o src/mswsock_stubs.s
src/mswsock_stubs.c: src/mswsock_stubs.txt
perl mkstubs.pl src/mswsock_stubs.txt src/mswsock_stubs.c mswsock.dll
src/mswsock_stubs.s: src/mswsock_stubs.txt
perl mkstubs.pl src/mswsock_stubs.txt src/mswsock_stubs.s mswsock.dll

View File

@ -14,95 +14,61 @@
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
use strict;
use warnings;
if(@ARGV != 2 && @ARGV != 3) {
print STDERR "Usage: mkdll.pl <input header> <output code> [<dll name>]\n";
print STDERR "Usage: mkdll.pl <function list> <output code> [<dll name>]\n";
exit(1);
}
open(STUBS, "<".$ARGV[0]) or die("Cannot open ".$ARGV[0].": $!");
open(CODE, ">".$ARGV[1]) or die("Cannot open ".$ARGV[1].": $!");
print CODE <<EOF;
#include <windows.h>
#include <winsock2.h>
#include <mswsock.h>
#include <nspapi.h>
#include <ws2spi.h>
void *find_sym(char const *symbol);
EOF
if(@ARGV == 3) {
print CODE "char const *dllname = \"".$ARGV[2]."\";\n";
}
my @stubs = ();
foreach my $line(<STUBS>) {
$line =~ s/[\r\n;]//g;
$line =~ s/\/\*.*\*\///g;
$line =~ s/[\r\n]//g;
if($line eq "") {
next;
if($line ne "") {
push @stubs, $line;
}
}
if(@ARGV == 3) {
print CODE "section .rdata:\n";
print CODE "\tglobal\t_dllname\n";
print CODE "\tdllname_s:\tdb\t'wsock32.dll'\n";
print CODE "\t_dllname:\tdd\tdllname_s\n\n";
}
print CODE "section .data\n";
for($n = 0; $n < @stubs; $n++) {
my $func = $stubs[$n];
$func =~ s/^r_//;
my $type = "";
my $func = "";
my $args = "";
foreach my $word(split(/ /, $line)) {
if($word =~ /\w+\(/) {
if($func ne "") {
$type .= " $func($args";
}
($func, $args) = split(/\(/, $word, 2);
next;
}
if($args ne "") {
$args .= " $word";
}else{
if($type ne "") {
$type .= " ";
}
$type .= $word;
}
}
$args =~ s/\)$//;
my $argdefs = "void";
my $argnames = "";
my $count = 0;
if($args ne "void") {
foreach my $arg(split(/,/, $args)) {
if($count == 0) {
$argdefs = "$arg arg$count";
$argnames = "arg$count";
}else{
$argdefs .= ", $arg arg$count";
$argnames .= ", arg$count";
}
$count++;
}
}
my $symbol = $func;
$symbol =~ s/^r_//;
print CODE "\n$type $func($argdefs) {\n";
print CODE "\tstatic $type (*real_$func)($args) = NULL;\n";
print CODE "\tif(!real_$func) {\n";
print CODE "\t\treal_$func = find_sym(\"$symbol\");\n";
print CODE "\t}\n";
print CODE "\treturn real_$func($argnames);\n";
print CODE "}\n";
print CODE "\tname$n:\tdb\t'$func'\n";
print CODE "\taddr$n:\tdd\t0\n";
}
print CODE "\nsection .text\n";
print CODE "\textern\t_find_sym\n";
for($n = 0; $n < @stubs; $n++) {
my $func = $stubs[$n];
print CODE "\tglobal\t_$func\n";
}
for($n = 0; $n < @stubs; $n++) {
my $func = $stubs[$n];
print CODE "\n_$func:\n";
print CODE "\tcmp\tdword [addr$n], 0\n";
print CODE "\tjne\tjmp$n\n\n";
print CODE "\tpush\tname$n\n";
print CODE "\tcall\t_find_sym\n";
print CODE "\tmov\t[addr$n], eax\n";
print CODE "jmp$n:\n";
print CODE "\tjmp\t[addr$n]\n";
}
close(CODE);

View File

@ -26,7 +26,6 @@
#include <stdint.h>
#include "ipxwrapper.h"
#include "ipxwrapper_stubs.txt"
#define DLL_UNLOAD(dll) \
if(dll) {\
@ -144,7 +143,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) {
return TRUE;
}
void *find_sym(char const *symbol) {
void __stdcall *find_sym(char const *symbol) {
void *addr = GetProcAddress(winsock2_dll, symbol);
if(!addr) {

View File

@ -147,7 +147,7 @@ extern HMODULE winsock2_dll;
extern HMODULE mswsock_dll;
extern HMODULE wsock32_dll;
void *find_sym(char const *sym);
void __stdcall *find_sym(char const *sym);
void debug(char const *fmt, ...);
ipx_socket *get_socket(SOCKET fd);
void lock_mutex(void);
@ -156,4 +156,18 @@ IP_ADAPTER_INFO *get_nics(void);
char const *w32_error(DWORD errnum);
ipx_host *find_host(unsigned char *hwaddr);
INT APIENTRY r_EnumProtocolsA(LPINT,LPVOID,LPDWORD);
INT APIENTRY r_EnumProtocolsW(LPINT,LPVOID,LPDWORD);
int PASCAL FAR r_WSARecvEx(SOCKET,char*,int,int*);
int WSAAPI r_bind(SOCKET,const struct sockaddr*,int);
int WSAAPI r_closesocket(SOCKET);
int WSAAPI r_getsockname(SOCKET,struct sockaddr*,int*);
int WSAAPI r_getsockopt(SOCKET,int,int,char*,int*);
int WSAAPI r_recv(SOCKET,char*,int,int);
int WSAAPI r_recvfrom(SOCKET,char*,int,int,struct sockaddr*,int*);
int WSAAPI r_sendto(SOCKET,const char*,int,int,const struct sockaddr*,int);
int WSAAPI r_setsockopt(SOCKET,int,int,const char*,int);
int WSAAPI r_shutdown(SOCKET,int);
SOCKET WSAAPI r_socket(int,int,int);
#endif /* !IPXWRAPPER_H */

View File

@ -1,27 +1,22 @@
/* Stub functions will be generated for all functions declared here */
/* Declarations from MinGW headers */
unsigned long PASCAL inet_addr(const char*);
int PASCAL WSAStartup(WORD,LPWSADATA);
int PASCAL WSACleanup(void);
void PASCAL WSASetLastError(int);
int PASCAL WSAGetLastError(void);
u_long PASCAL htonl(u_long);
u_long PASCAL ntohl(u_long);
u_short PASCAL htons(u_short);
u_short PASCAL ntohs(u_short);
/* Declarations from the win32 SDK and MSDN */
INT APIENTRY r_EnumProtocolsA(LPINT,LPVOID,LPDWORD);
INT APIENTRY r_EnumProtocolsW(LPINT,LPVOID,LPDWORD);
int PASCAL FAR r_WSARecvEx(SOCKET,char*,int,int*);
int WSAAPI r_bind(SOCKET,const struct sockaddr*,int);
int WSAAPI r_closesocket(SOCKET);
int WSAAPI r_getsockname(SOCKET,struct sockaddr*,int*);
int WSAAPI r_getsockopt(SOCKET,int,int,char*,int*);
int WSAAPI r_recv(SOCKET,char*,int,int);
int WSAAPI r_recvfrom(SOCKET,char*,int,int,struct sockaddr*,int*);
int WSAAPI r_sendto(SOCKET,const char*,int,int,const struct sockaddr*,int);
int WSAAPI r_setsockopt(SOCKET,int,int,const char*,int);
int WSAAPI r_shutdown(SOCKET,int);
SOCKET WSAAPI r_socket(int,int,int);
inet_addr
WSAStartup
WSACleanup
WSASetLastError
WSAGetLastError
htonl
ntohl
htons
ntohs
r_EnumProtocolsA
r_EnumProtocolsW
r_WSARecvEx
r_bind
r_closesocket
r_getsockname
r_getsockopt
r_recv
r_recvfrom
r_sendto
r_setsockopt
r_shutdown
r_socket

View File

@ -1,24 +1,32 @@
/* Stub functions will be generated for all functions declared here */
/* Declarations from MinGW headers */
BOOL PASCAL AcceptEx(SOCKET,SOCKET,PVOID,DWORD,DWORD,DWORD,LPDWORD,LPOVERLAPPED);
VOID PASCAL GetAcceptExSockaddrs(PVOID,DWORD,DWORD,DWORD,struct sockaddr**, LPINT, struct sockaddr**, LPINT);
INT WINAPI GetAddressByNameA(DWORD,LPGUID,LPSTR,LPINT,DWORD,LPSERVICE_ASYNC_INFO,LPVOID,LPDWORD,LPSTR,LPDWORD);
INT WINAPI GetAddressByNameW(DWORD,LPGUID,LPWSTR,LPINT,DWORD,LPSERVICE_ASYNC_INFO,LPVOID,LPDWORD,LPWSTR,LPDWORD);
INT WINAPI SetServiceA(DWORD,DWORD,DWORD,LPSERVICE_INFOA,LPSERVICE_ASYNC_INFO,LPDWORD);
INT WINAPI SetServiceW(DWORD,DWORD,DWORD,LPSERVICE_INFOW,LPSERVICE_ASYNC_INFO,LPDWORD);
BOOL PASCAL TransmitFile(SOCKET,HANDLE,DWORD,DWORD,LPOVERLAPPED,LPTRANSMIT_FILE_BUFFERS,DWORD);
/* Declarations from the win32 SDK and MSDN */
INT WSAAPI NSPStartup(LPGUID,LPNSP_ROUTINE);
INT APIENTRY GetNameByTypeA(IN LPGUID,IN OUT LPSTR,IN DWORD);
INT APIENTRY GetNameByTypeW(IN LPGUID,IN OUT LPWSTR,IN DWORD);
INT APIENTRY GetServiceA(DWORD, LPGUID, LPSTR,DWORD,LPVOID,LPDWORD,LPSERVICE_ASYNC_INFO);
INT APIENTRY GetServiceW(DWORD, LPGUID, LPWSTR,DWORD,LPVOID,LPDWORD,LPSERVICE_ASYNC_INFO);
INT APIENTRY GetTypeByNameA(LPSTR,LPGUID);
INT APIENTRY GetTypeByNameW(LPWSTR,LPGUID);
int WSPAPI WSPStartup(WORD,LPWSPDATA,LPWSAPROTOCOL_INFOW,WSPUPCALLTABLE,LPWSPPROC_TABLE);
int APIENTRY sethostname(char*,int);
INT APIENTRY EnumProtocolsA(LPINT,LPVOID,LPDWORD);
INT APIENTRY EnumProtocolsW(LPINT,LPVOID,LPDWORD);
int PASCAL FAR WSARecvEx(SOCKET,char*,int,int*);
ServiceMain
SvchostPushServiceGlobals
AcceptEx
EnumProtocolsA
EnumProtocolsW
GetAcceptExSockaddrs
GetAddressByNameA
GetAddressByNameW
GetNameByTypeA
GetNameByTypeW
GetServiceA
GetServiceW
GetTypeByNameA
GetTypeByNameW
MigrateWinsockConfiguration
NPLoadNameSpaces
NSPStartup
SetServiceA
SetServiceW
StartWsdpService
StopWsdpService
TransmitFile
WSARecvEx
WSPStartup
dn_expand
getnetbyname
inet_network
rcmd
rexec
rresvport
s_perror
sethostname

View File

@ -23,7 +23,7 @@ static HMODULE ipxdll = NULL;
static HMODULE sysdll = NULL;
extern char const *dllname;
void *find_sym(char const *symbol);
void __stdcall *find_sym(char const *symbol);
void debug(char const *fmt, ...);
BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) {
@ -58,7 +58,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) {
return TRUE;
}
void *find_sym(char const *symbol) {
void __stdcall *find_sym(char const *symbol) {
void *ptr = NULL;
if(!ptr) {

View File

@ -24,7 +24,6 @@
#include "winstuff.h"
#include "ipxwrapper.h"
#include "ipxwrapper_stubs.txt"
INT APIENTRY EnumProtocolsA(LPINT protocols, LPVOID buf, LPDWORD bsptr) {
int bufsize = *bsptr, rval, i, want_ipx = 0;

View File

@ -1,119 +1,75 @@
/* Stub functions will be generated for all functions declared here */
/* Declarations from MinGW headers */
int PASCAL __WSAFDIsSet(SOCKET,fd_set*);
SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*);
int PASCAL connect(SOCKET,const struct sockaddr*,int);
int PASCAL ioctlsocket(SOCKET,long,u_long *);
int PASCAL getpeername(SOCKET,struct sockaddr*,int*);
unsigned long PASCAL inet_addr(const char*);
DECLARE_STDCALL_P(char *) inet_ntoa(struct in_addr);
int PASCAL listen(SOCKET,int);
int PASCAL send(SOCKET,const char*,int,int);
DECLARE_STDCALL_P(struct hostent *) gethostbyaddr(const char*,int,int);
DECLARE_STDCALL_P(struct hostent *) gethostbyname(const char*);
DECLARE_STDCALL_P(struct servent *) getservbyport(int,const char*);
DECLARE_STDCALL_P(struct servent *) getservbyname(const char*,const char*);
DECLARE_STDCALL_P(struct protoent *) getprotobynumber(int);
DECLARE_STDCALL_P(struct protoent *) getprotobyname(const char*);
int PASCAL WSAStartup(WORD,LPWSADATA);
int PASCAL WSACleanup(void);
void PASCAL WSASetLastError(int);
int PASCAL WSAGetLastError(void);
BOOL PASCAL WSAIsBlocking(void);
int PASCAL WSAUnhookBlockingHook(void);
FARPROC PASCAL WSASetBlockingHook(FARPROC);
int PASCAL WSACancelBlockingCall(void);
HANDLE PASCAL WSAAsyncGetServByName(HWND,u_int,const char*,const char*,char*,int);
HANDLE PASCAL WSAAsyncGetServByPort(HWND,u_int,int,const char*,char*,int);
HANDLE PASCAL WSAAsyncGetProtoByName(HWND,u_int,const char*,char*,int);
HANDLE PASCAL WSAAsyncGetProtoByNumber(HWND,u_int,int,char*,int);
HANDLE PASCAL WSAAsyncGetHostByName(HWND,u_int,const char*,char*,int);
HANDLE PASCAL WSAAsyncGetHostByAddr(HWND,u_int,const char*,int,int,char*,int);
int PASCAL WSACancelAsyncRequest(HANDLE);
int PASCAL WSAAsyncSelect(SOCKET,HWND,u_int,long);
u_long PASCAL htonl(u_long);
u_long PASCAL ntohl(u_long);
u_short PASCAL htons(u_short);
u_short PASCAL ntohs(u_short);
int PASCAL select(int,fd_set*,fd_set*,fd_set*,const struct timeval*);
int PASCAL gethostname(char*,int);
SOCKET WINAPI WSAAccept(SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
INT WINAPI WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD);
INT WINAPI WSAAddressToStringW(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD);
BOOL WINAPI WSACloseEvent(WSAEVENT);
int WINAPI WSAConnect(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS);
WSAEVENT WINAPI WSACreateEvent(void);
int WINAPI WSADuplicateSocketA(SOCKET, DWORD, LPWSAPROTOCOL_INFOA);
int WINAPI WSADuplicateSocketW(SOCKET, DWORD, LPWSAPROTOCOL_INFOW);
INT WINAPI WSAEnumNameSpaceProvidersA(LPDWORD, LPWSANAMESPACE_INFOA);
INT WINAPI WSAEnumNameSpaceProvidersW(LPDWORD, LPWSANAMESPACE_INFOW);
int WINAPI WSAEnumNetworkEvents(SOCKET, WSAEVENT, LPWSANETWORKEVENTS);
int WINAPI WSAEnumProtocolsA(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD);
int WINAPI WSAEnumProtocolsW(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD);
int WINAPI WSAEventSelect(SOCKET, WSAEVENT, long);
BOOL WINAPI WSAGetOverlappedResult(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD);
BOOL WINAPI WSAGetQOSByName(SOCKET, LPWSABUF, LPQOS);
INT WINAPI WSAGetServiceClassInfoA(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA);
INT WINAPI WSAGetServiceClassInfoW(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW);
INT WINAPI WSAGetServiceClassNameByClassIdA(LPGUID, LPSTR, LPDWORD);
INT WINAPI WSAGetServiceClassNameByClassIdW(LPGUID, LPWSTR, LPDWORD);
int WINAPI WSAHtonl(SOCKET, unsigned long, unsigned long *);
int WINAPI WSAHtons(SOCKET, unsigned short, unsigned short *);
INT WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA);
INT WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW);
int WINAPI WSAIoctl(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
SOCKET WINAPI WSAJoinLeaf(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD);
INT WINAPI WSALookupServiceBeginA(LPWSAQUERYSETA, DWORD, LPHANDLE);
INT WINAPI WSALookupServiceBeginW(LPWSAQUERYSETW, DWORD, LPHANDLE);
INT WINAPI WSALookupServiceNextA(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA);
INT WINAPI WSALookupServiceNextW(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW);
INT WINAPI WSALookupServiceEnd(HANDLE);
int WINAPI WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); /* XP or .NET Server */
int WINAPI WSANtohl(SOCKET, unsigned long, unsigned long *);
int WINAPI WSANtohs(SOCKET, unsigned short, unsigned short *);
int WINAPI WSARecv(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
int WINAPI WSARecvDisconnect(SOCKET, LPWSABUF);
int WINAPI WSARecvFrom(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
INT WINAPI WSARemoveServiceClass(LPGUID);
BOOL WINAPI WSAResetEvent(WSAEVENT);
int WINAPI WSASend(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
int WINAPI WSASendDisconnect(SOCKET, LPWSABUF);
int WINAPI WSASendTo(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
BOOL WINAPI WSASetEvent(WSAEVENT);
INT WSAAPI WSASetServiceA(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD);
INT WINAPI WSASetServiceW(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD);
SOCKET WINAPI WSASocketA(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD);
SOCKET WINAPI WSASocketW(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD);
INT WINAPI WSAStringToAddressA(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT);
INT WINAPI WSAStringToAddressW(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT);
DWORD WINAPI WSAWaitForMultipleEvents(DWORD, const WSAEVENT *, BOOL, DWORD, BOOL);
BOOL PASCAL AcceptEx(SOCKET,SOCKET,PVOID,DWORD,DWORD,DWORD,LPDWORD,LPOVERLAPPED);
VOID PASCAL GetAcceptExSockaddrs(PVOID,DWORD,DWORD,DWORD,struct sockaddr**, LPINT, struct sockaddr**, LPINT);
INT WINAPI GetAddressByNameA(DWORD,LPGUID,LPSTR,LPINT,DWORD,LPSERVICE_ASYNC_INFO,LPVOID,LPDWORD,LPSTR,LPDWORD);
INT WINAPI GetAddressByNameW(DWORD,LPGUID,LPWSTR,LPINT,DWORD,LPSERVICE_ASYNC_INFO,LPVOID,LPDWORD,LPWSTR,LPDWORD);
INT WINAPI SetServiceA(DWORD,DWORD,DWORD,LPSERVICE_INFOA,LPSERVICE_ASYNC_INFO,LPDWORD);
INT WINAPI SetServiceW(DWORD,DWORD,DWORD,LPSERVICE_INFOW,LPSERVICE_ASYNC_INFO,LPDWORD);
BOOL PASCAL TransmitFile(SOCKET,HANDLE,DWORD,DWORD,LPOVERLAPPED,LPTRANSMIT_FILE_BUFFERS,DWORD);
/* Declarations from the win32 SDK and MSDN */
INT APIENTRY GetNameByTypeA(IN LPGUID,IN OUT LPSTR,IN DWORD);
INT APIENTRY GetNameByTypeW(IN LPGUID,IN OUT LPWSTR,IN DWORD);
INT APIENTRY GetServiceA(DWORD, LPGUID, LPSTR,DWORD,LPVOID,LPDWORD,LPSERVICE_ASYNC_INFO);
INT APIENTRY GetServiceW(DWORD, LPGUID, LPWSTR,DWORD,LPVOID,LPDWORD,LPSERVICE_ASYNC_INFO);
INT APIENTRY GetTypeByNameA(LPSTR,LPGUID);
INT APIENTRY GetTypeByNameW(LPWSTR,LPGUID);
int APIENTRY sethostname(char*,int);
INT APIENTRY EnumProtocolsA(LPINT,LPVOID,LPDWORD);
INT APIENTRY EnumProtocolsW(LPINT,LPVOID,LPDWORD);
int PASCAL FAR WSARecvEx(SOCKET,char*,int,int*);
int WSAAPI bind(SOCKET,const struct sockaddr*,int);
int WSAAPI closesocket(SOCKET);
int WSAAPI getsockname(SOCKET,struct sockaddr*,int*);
int WSAAPI getsockopt(SOCKET,int,int,char*,int*);
int WSAAPI recv(SOCKET,char*,int,int);
int WSAAPI recvfrom(SOCKET,char*,int,int,struct sockaddr*,int*);
int WSAAPI sendto(SOCKET,const char*,int,int,const struct sockaddr*,int);
int WSAAPI setsockopt(SOCKET,int,int,const char*,int);
int WSAAPI shutdown(SOCKET,int);
SOCKET WSAAPI socket(int,int,int);
accept
bind
closesocket
connect
getpeername
getsockname
getsockopt
htonl
htons
inet_addr
inet_ntoa
ioctlsocket
listen
ntohl
ntohs
recv
recvfrom
select
send
sendto
setsockopt
shutdown
socket
MigrateWinsockConfiguration
gethostbyaddr
gethostbyname
getprotobyname
getprotobynumber
getservbyname
getservbyport
gethostname
WSAAsyncSelect
WSAAsyncGetHostByAddr
WSAAsyncGetHostByName
WSAAsyncGetProtoByNumber
WSAAsyncGetProtoByName
WSAAsyncGetServByPort
WSAAsyncGetServByName
WSACancelAsyncRequest
WSASetBlockingHook
WSAUnhookBlockingHook
WSAGetLastError
WSASetLastError
WSACancelBlockingCall
WSAIsBlocking
WSAStartup
WSACleanup
__WSAFDIsSet
WEP
WSApSetPostRoutine
inet_network
getnetbyname
rcmd
rexec
rresvport
sethostname
dn_expand
WSARecvEx
s_perror
GetAddressByNameA
GetAddressByNameW
EnumProtocolsA
EnumProtocolsW
GetTypeByNameA
GetTypeByNameW
GetNameByTypeA
GetNameByTypeW
SetServiceA
SetServiceW
GetServiceA
GetServiceW
NPLoadNameSpaces
TransmitFile
AcceptEx
GetAcceptExSockaddrs