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: clean:
rm -f src/*.o rm -f src/*.o
rm -f src/*_stubs.c rm -f src/*_stubs.s
ipxwrapper.dll: $(IPXWRAPPER_DEPS) ipxwrapper.dll: $(IPXWRAPPER_DEPS)
$(CC) $(CFLAGS) -Wl,--enable-stdcall-fixup -shared -o ipxwrapper.dll $(IPXWRAPPER_DEPS) -liphlpapi $(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 src/winsock.o: src/winsock.c src/ipxwrapper.h
$(CC) $(CFLAGS) -c -o src/winsock.o src/winsock.c $(CC) $(CFLAGS) -c -o src/winsock.o src/winsock.c
src/ipxwrapper_stubs.o: src/ipxwrapper_stubs.c src/ipxwrapper_stubs.o: src/ipxwrapper_stubs.s
$(CC) $(CFLAGS) -c -o src/ipxwrapper_stubs.o src/ipxwrapper_stubs.c nasm -f win32 -o src/ipxwrapper_stubs.o src/ipxwrapper_stubs.s
src/ipxwrapper_stubs.c: src/ipxwrapper_stubs.txt src/ipxwrapper_stubs.s: src/ipxwrapper_stubs.txt
perl mkstubs.pl src/ipxwrapper_stubs.txt src/ipxwrapper_stubs.c perl mkstubs.pl src/ipxwrapper_stubs.txt src/ipxwrapper_stubs.s
src/stubdll.o: src/stubdll.c src/stubdll.o: src/stubdll.c
$(CC) $(CFLAGS) -c -o src/stubdll.o src/stubdll.c $(CC) $(CFLAGS) -c -o src/stubdll.o src/stubdll.c
src/wsock32_stubs.o: src/wsock32_stubs.c src/wsock32_stubs.o: src/wsock32_stubs.s
$(CC) $(CFLAGS) -c -o src/wsock32_stubs.o src/wsock32_stubs.c nasm -f win32 -o src/wsock32_stubs.o src/wsock32_stubs.s
src/wsock32_stubs.c: src/wsock32_stubs.txt src/wsock32_stubs.s: src/wsock32_stubs.txt
perl mkstubs.pl src/wsock32_stubs.txt src/wsock32_stubs.c wsock32.dll perl mkstubs.pl src/wsock32_stubs.txt src/wsock32_stubs.s wsock32.dll
src/mswsock_stubs.o: src/mswsock_stubs.c src/mswsock_stubs.o: src/mswsock_stubs.s
$(CC) $(CFLAGS) -c -o src/mswsock_stubs.o src/mswsock_stubs.c nasm -f win32 -o src/mswsock_stubs.o src/mswsock_stubs.s
src/mswsock_stubs.c: src/mswsock_stubs.txt src/mswsock_stubs.s: src/mswsock_stubs.txt
perl mkstubs.pl src/mswsock_stubs.txt src/mswsock_stubs.c mswsock.dll 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 # this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
use strict;
use warnings;
if(@ARGV != 2 && @ARGV != 3) { 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); exit(1);
} }
open(STUBS, "<".$ARGV[0]) or die("Cannot open ".$ARGV[0].": $!"); open(STUBS, "<".$ARGV[0]) or die("Cannot open ".$ARGV[0].": $!");
open(CODE, ">".$ARGV[1]) or die("Cannot open ".$ARGV[1].": $!"); open(CODE, ">".$ARGV[1]) or die("Cannot open ".$ARGV[1].": $!");
print CODE <<EOF; my @stubs = ();
#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";
}
foreach my $line(<STUBS>) { foreach my $line(<STUBS>) {
$line =~ s/[\r\n;]//g; $line =~ s/[\r\n]//g;
$line =~ s/\/\*.*\*\///g;
if($line eq "") { if($line ne "") {
next; 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 = ""; print CODE "\tname$n:\tdb\t'$func'\n";
my $func = ""; print CODE "\taddr$n:\tdd\t0\n";
my $args = ""; }
foreach my $word(split(/ /, $line)) { print CODE "\nsection .text\n";
if($word =~ /\w+\(/) { print CODE "\textern\t_find_sym\n";
if($func ne "") {
$type .= " $func($args"; for($n = 0; $n < @stubs; $n++) {
} my $func = $stubs[$n];
print CODE "\tglobal\t_$func\n";
($func, $args) = split(/\(/, $word, 2); }
next;
} for($n = 0; $n < @stubs; $n++) {
my $func = $stubs[$n];
if($args ne "") {
$args .= " $word"; print CODE "\n_$func:\n";
}else{ print CODE "\tcmp\tdword [addr$n], 0\n";
if($type ne "") { print CODE "\tjne\tjmp$n\n\n";
$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 "\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); close(CODE);

View File

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

View File

@ -147,7 +147,7 @@ extern HMODULE winsock2_dll;
extern HMODULE mswsock_dll; extern HMODULE mswsock_dll;
extern HMODULE wsock32_dll; extern HMODULE wsock32_dll;
void *find_sym(char const *sym); void __stdcall *find_sym(char const *sym);
void debug(char const *fmt, ...); void debug(char const *fmt, ...);
ipx_socket *get_socket(SOCKET fd); ipx_socket *get_socket(SOCKET fd);
void lock_mutex(void); void lock_mutex(void);
@ -156,4 +156,18 @@ IP_ADAPTER_INFO *get_nics(void);
char const *w32_error(DWORD errnum); char const *w32_error(DWORD errnum);
ipx_host *find_host(unsigned char *hwaddr); 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 */ #endif /* !IPXWRAPPER_H */

View File

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

View File

@ -1,24 +1,32 @@
/* Stub functions will be generated for all functions declared here */ ServiceMain
SvchostPushServiceGlobals
/* Declarations from MinGW headers */ AcceptEx
BOOL PASCAL AcceptEx(SOCKET,SOCKET,PVOID,DWORD,DWORD,DWORD,LPDWORD,LPOVERLAPPED); EnumProtocolsA
VOID PASCAL GetAcceptExSockaddrs(PVOID,DWORD,DWORD,DWORD,struct sockaddr**, LPINT, struct sockaddr**, LPINT); EnumProtocolsW
INT WINAPI GetAddressByNameA(DWORD,LPGUID,LPSTR,LPINT,DWORD,LPSERVICE_ASYNC_INFO,LPVOID,LPDWORD,LPSTR,LPDWORD); GetAcceptExSockaddrs
INT WINAPI GetAddressByNameW(DWORD,LPGUID,LPWSTR,LPINT,DWORD,LPSERVICE_ASYNC_INFO,LPVOID,LPDWORD,LPWSTR,LPDWORD); GetAddressByNameA
INT WINAPI SetServiceA(DWORD,DWORD,DWORD,LPSERVICE_INFOA,LPSERVICE_ASYNC_INFO,LPDWORD); GetAddressByNameW
INT WINAPI SetServiceW(DWORD,DWORD,DWORD,LPSERVICE_INFOW,LPSERVICE_ASYNC_INFO,LPDWORD); GetNameByTypeA
BOOL PASCAL TransmitFile(SOCKET,HANDLE,DWORD,DWORD,LPOVERLAPPED,LPTRANSMIT_FILE_BUFFERS,DWORD); GetNameByTypeW
GetServiceA
/* Declarations from the win32 SDK and MSDN */ GetServiceW
INT WSAAPI NSPStartup(LPGUID,LPNSP_ROUTINE); GetTypeByNameA
INT APIENTRY GetNameByTypeA(IN LPGUID,IN OUT LPSTR,IN DWORD); GetTypeByNameW
INT APIENTRY GetNameByTypeW(IN LPGUID,IN OUT LPWSTR,IN DWORD); MigrateWinsockConfiguration
INT APIENTRY GetServiceA(DWORD, LPGUID, LPSTR,DWORD,LPVOID,LPDWORD,LPSERVICE_ASYNC_INFO); NPLoadNameSpaces
INT APIENTRY GetServiceW(DWORD, LPGUID, LPWSTR,DWORD,LPVOID,LPDWORD,LPSERVICE_ASYNC_INFO); NSPStartup
INT APIENTRY GetTypeByNameA(LPSTR,LPGUID); SetServiceA
INT APIENTRY GetTypeByNameW(LPWSTR,LPGUID); SetServiceW
int WSPAPI WSPStartup(WORD,LPWSPDATA,LPWSAPROTOCOL_INFOW,WSPUPCALLTABLE,LPWSPPROC_TABLE); StartWsdpService
int APIENTRY sethostname(char*,int); StopWsdpService
INT APIENTRY EnumProtocolsA(LPINT,LPVOID,LPDWORD); TransmitFile
INT APIENTRY EnumProtocolsW(LPINT,LPVOID,LPDWORD); WSARecvEx
int PASCAL FAR WSARecvEx(SOCKET,char*,int,int*); 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; static HMODULE sysdll = NULL;
extern char const *dllname; extern char const *dllname;
void *find_sym(char const *symbol); void __stdcall *find_sym(char const *symbol);
void debug(char const *fmt, ...); void debug(char const *fmt, ...);
BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) {
@ -58,7 +58,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) {
return TRUE; return TRUE;
} }
void *find_sym(char const *symbol) { void __stdcall *find_sym(char const *symbol) {
void *ptr = NULL; void *ptr = NULL;
if(!ptr) { if(!ptr) {

View File

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

View File

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