diff --git a/Makefile b/Makefile index 1f5bb63..a7259cd 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/mkstubs.pl b/mkstubs.pl index 33c0cee..a53c339 100644 --- a/mkstubs.pl +++ b/mkstubs.pl @@ -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 []\n"; + print STDERR "Usage: mkdll.pl []\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 < -#include -#include -#include -#include - -void *find_sym(char const *symbol); -EOF - -if(@ARGV == 3) { - print CODE "char const *dllname = \"".$ARGV[2]."\";\n"; -} +my @stubs = (); foreach my $line() { - $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); diff --git a/src/ipxwrapper.c b/src/ipxwrapper.c index 47961c5..05412f8 100644 --- a/src/ipxwrapper.c +++ b/src/ipxwrapper.c @@ -26,7 +26,6 @@ #include #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) { diff --git a/src/ipxwrapper.h b/src/ipxwrapper.h index c6d703f..86e71f5 100644 --- a/src/ipxwrapper.h +++ b/src/ipxwrapper.h @@ -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 */ diff --git a/src/ipxwrapper_stubs.txt b/src/ipxwrapper_stubs.txt index a5455a5..77b8a4f 100644 --- a/src/ipxwrapper_stubs.txt +++ b/src/ipxwrapper_stubs.txt @@ -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 diff --git a/src/mswsock_stubs.txt b/src/mswsock_stubs.txt index 4033760..3f59c93 100644 --- a/src/mswsock_stubs.txt +++ b/src/mswsock_stubs.txt @@ -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 diff --git a/src/stubdll.c b/src/stubdll.c index 59c11bb..04ccaab 100644 --- a/src/stubdll.c +++ b/src/stubdll.c @@ -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) { diff --git a/src/winsock.c b/src/winsock.c index 18fe1cc..506e41b 100644 --- a/src/winsock.c +++ b/src/winsock.c @@ -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; diff --git a/src/wsock32_stubs.txt b/src/wsock32_stubs.txt index c482c6f..88ce718 100644 --- a/src/wsock32_stubs.txt +++ b/src/wsock32_stubs.txt @@ -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