update for HEAD-2003091401
[reactos.git] / include / winsock2.h
index a93362b..e3c2e9c 100644 (file)
 #ifndef __WINSOCK2_H
 #define __WINSOCK2_H
 
+#ifdef __USE_W32API
+
+#include_next <winsock2.h>
+
+#else /* __USE_W32API */
+
 #include <windows.h>
+#include <stddef.h>
 
 #ifdef __cplusplus
 extern "C"
@@ -222,7 +229,13 @@ typedef UINT   SOCKET;
 #define WSA_WAIT_TIMEOUT        (WAIT_TIMEOUT)
 #define WSA_INFINITE            (INFINITE)
 
-
+typedef enum _WSACOMPLETIONTYPE {
+    NSP_NOTIFY_IMMEDIATELY = 0,
+    NSP_NOTIFY_HWND,
+    NSP_NOTIFY_EVENT,
+    NSP_NOTIFY_PORT,
+    NSP_NOTIFY_APC,
+} WSACOMPLETIONTYPE, *PWSACOMPLETIONTYPE, FAR * LPWSACOMPLETIONTYPE;
 
 #define IOCPARM_MASK    0x7f
 #define IOC_VOID        0x20000000
@@ -248,6 +261,23 @@ typedef UINT   SOCKET;
 #define SIOCATMARK  _IOR('s',  7, ULONG)
 
 
+typedef unsigned short  u_short;
+typedef unsigned long   u_long;
+
+typedef struct in6_addr {
+    union {
+        UCHAR       Byte[16];
+        USHORT      Word[8];
+    } u;
+} IN6_ADDR;
+struct sockaddr_in6 {
+    short   sin6_family;
+    u_short sin6_port;
+    u_long  sin6_flowinfo;
+    struct in6_addr sin6_addr;
+    u_long sin6_scope_id;
+};
+
 struct in_addr {
     union {
         struct { UCHAR s_b1, s_b2,s_b3,s_b4; } S_un_b;
@@ -385,17 +415,16 @@ extern INT PASCAL FAR __WSAFDIsSet(SOCKET, fd_set FAR*);
 
 
 typedef struct _WSAOVERLAPPED {
-    DWORD Internal;     // reserved
-    DWORD InternalHigh; // reserved
-    DWORD Offset;       // reserved
-    DWORD OffsetHigh;   // reserved
+    DWORD Internal;     /* reserved */
+    DWORD InternalHigh; /* reserved */
+    DWORD Offset;       /* reserved */
+    DWORD OffsetHigh;   /* reserved */
     WSAEVENT hEvent;
 } WSAOVERLAPPED, FAR* LPWSAOVERLAPPED;
 
-
 typedef struct __WSABUF {
-    ULONG len;     // buffer length
-    CHAR FAR* buf; // pointer to buffer
+    ULONG len;     /* buffer length */
+    CHAR FAR* buf; /* pointer to buffer */
 } WSABUF, FAR* LPWSABUF;
 
 
@@ -494,6 +523,7 @@ typedef struct _WSAPROTOCOL_INFOW {
     WCHAR szProtocol[WSAPROTOCOL_LEN + 1];
 } WSAPROTOCOL_INFOW, FAR * LPWSAPROTOCOL_INFOW;
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO;
 typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
@@ -501,7 +531,20 @@ typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
 typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO;
 typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO;
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
+
+typedef
+VOID
+CALLBACK (*LPSERVICE_CALLBACK_PROC) (
+    IN LPARAM lParam,
+    IN HANDLE hAsyncTaskHandle
+    );
 
+typedef struct _SERVICE_ASYNC_INFO {
+    LPSERVICE_CALLBACK_PROC lpServiceCallbackProc;
+    LPARAM lParam;
+    HANDLE hAsyncTaskHandle;
+} SERVICE_ASYNC_INFO, *PSERVICE_ASYNC_INFO, FAR * LPSERVICE_ASYNC_INFO;
 
 /* WinSock 2 extended commands for WSAIoctl() */
 
@@ -559,12 +602,12 @@ struct servent {
     CHAR FAR* s_proto;
 };
 
-// It is assumed here that a network number fits in 32 bits.
+/* It is assumed here that a network number fits in 32 bits. */
 struct netent {
-    CHAR FAR* n_name;               // official net name
-    CHAR FAR* FAR* n_aliases;       // list of alias's
-    SHORT n_addrtype;               // network address type id
-    ULONG n_net;                    // network number
+    CHAR FAR* n_name;               /* official net name */
+    CHAR FAR* FAR* n_aliases;       /* list of alias's */
+    SHORT n_addrtype;               /* network address type id */
+    ULONG n_net;                    /* network number */
 };
 
 
@@ -590,6 +633,28 @@ VOID
     LPWSAOVERLAPPED lpOverlapped,
     DWORD dwFlags);
 
+typedef struct _WSACOMPLETION {
+    WSACOMPLETIONTYPE Type;
+    union {
+        struct {
+            HWND hWnd;
+            UINT uMsg;
+            WPARAM context;
+        } WindowMessage;
+        struct {
+            LPWSAOVERLAPPED lpOverlapped;
+        } Event;
+        struct {
+            LPWSAOVERLAPPED lpOverlapped;
+            LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
+        } Apc;
+        struct {
+            LPWSAOVERLAPPED lpOverlapped;
+            HANDLE hPort;
+            ULONG_PTR Key;
+        } Port;
+    } Parameters;
+} WSACOMPLETION, *PWSACOMPLETION, FAR *LPWSACOMPLETION;
 
 /* Microsoft Windows extended data types */
 
@@ -650,8 +715,8 @@ typedef struct WSAData {
     CHAR FAR* lpVendorInfo;
 } WSADATA, FAR* LPWSADATA;
 
-#ifndef _BLOB_DEFINED
-#define _BLOB_DEFINED
+#ifndef __BLOB_T_DEFINED
+#define __BLOB_T_DEFINED
 typedef struct _BLOB {
     ULONG cbSize;
     BYTE *pBlobData;
@@ -696,6 +761,7 @@ typedef struct _WSANAMESPACE_INFOW {
     LPWSTR lpszIdentifier;
 } WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO;
 typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO;
@@ -705,7 +771,27 @@ typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO;
 typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO;
 typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO;
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
+typedef struct _TRANSMIT_FILE_BUFFERS {
+    LPVOID Head;
+    DWORD HeadLength;
+    LPVOID Tail;
+    DWORD TailLength;
+} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, FAR *LPTRANSMIT_FILE_BUFFERS;
+
+typedef struct addrinfo
+{
+    int                 ai_flags;
+    int                 ai_family;
+    int                 ai_socktype;
+    int                 ai_protocol;
+    size_t              ai_addrlen;
+    char *              ai_canonname;
+    struct sockaddr *   ai_addr;
+    struct addrinfo *   ai_next;
+}
+ADDRINFO, *LPADDRINFO;
 
 typedef enum _WSAEcomparator
 {
@@ -762,6 +848,7 @@ typedef struct _WSAQuerySetW {
     LPBLOB lpBlob;
 } WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 typedef WSAQUERYSETW WSAQUERYSET;
 typedef PWSAQUERYSETW PWSAQUERYSET;
@@ -771,6 +858,7 @@ typedef WSAQUERYSETA WSAQUERYSET;
 typedef PWSAQUERYSETA PWSAQUERYSET;
 typedef LPWSAQUERYSETA LPWSAQUERYSET;
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 
 typedef enum _WSAESETSERVICEOP {
@@ -796,6 +884,7 @@ typedef struct _WSANSClassInfoW {
     LPVOID lpValue;
 } WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 typedef WSANSCLASSINFOW WSANSCLASSINFO;
 typedef PWSANSCLASSINFOW PWSANSCLASSINFO;
@@ -805,6 +894,7 @@ typedef WSANSCLASSINFOA WSANSCLASSINFO;
 typedef PWSANSCLASSINFOA PWSANSCLASSINFO;
 typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO;
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 typedef struct _WSAServiceClassInfoA {
     LPGUID lpServiceClassId;
@@ -820,6 +910,7 @@ typedef struct _WSAServiceClassInfoW {
     LPWSANSCLASSINFOW lpClassInfos;
 } WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO;
 typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO;
@@ -829,6 +920,7 @@ typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO;
 typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO;
 typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO;
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 
 /* WinSock 2 DLL prototypes */
@@ -1041,11 +1133,13 @@ WSADuplicateSocketW(
     IN  DWORD dwProcessId,
     OUT LPWSAPROTOCOL_INFOW lpProtocolInfo);
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 #define WSADuplicateSocket WSADuplicateSocketA
 #else /* UNICODE */
 #define WSADuplicateSocket WSADuplicateSocketW
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 INT
 WSAAPI
@@ -1068,11 +1162,13 @@ WSAEnumProtocolsW(
     OUT     LPWSAPROTOCOL_INFOW lpProtocolBuffer,
     IN OUT  LPDWORD lpdwBufferLength);
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 #define WSAEnumProtocols WSAEnumProtocolsA
 #else /* UNICODE */
 #define WSAEnumProtocols WSAEnumProtocolsW
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 INT
 WSAAPI
@@ -1258,11 +1354,13 @@ WSASocketW(
     IN  GROUP g,
     IN  DWORD dwFlags);
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 #define WSASocket WSASocketW
 #else /* UNICODE */
 #define WSASocket WSASocketA
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 INT
 WSAAPI
@@ -1310,11 +1408,13 @@ WSAAddressToStringW(
     OUT     LPWSTR lpszAddressString,
     IN OUT  LPDWORD lpdwAddressStringLength);
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 #define WSAAddressToString WSAAddressToStringW
 #else /* UNICODE */
 #define WSAAddressToString WSAAddressToStringA
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 INT
 WSAAPI
@@ -1328,11 +1428,15 @@ WSAEnumNameSpaceProvidersW(
     IN OUT  LPDWORD lpdwBufferLength,
     OUT     LPWSANAMESPACE_INFOW lpnspBuffer);
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
 #else /* UNICODE */
 #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
+
+typedef int socklen_t;
 
 INT
 WSAAPI
@@ -1350,11 +1454,13 @@ WSAGetServiceClassInfoW(
     IN OUT  LPDWORD lpdwBufferLength,
     OUT     LPWSASERVICECLASSINFOW lpServiceClassInfo);
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 #define WSAGetServiceClassInfo WSAGetServiceClassInfoW
 #else /* UNICODE */
 #define WSAGetServiceClassInfo WSAGetServiceClassInfoA
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 INT
 WSAAPI
@@ -1370,11 +1476,13 @@ WSAGetServiceClassNameByClassIdW(
     OUT     LPWSTR  lpszServiceClassName,
     IN OUT  LPDWORD lpdwBufferLength);
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW
 #else /* UNICODE */
 #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 INT
 WSAAPI
@@ -1386,19 +1494,36 @@ WSAAPI
 WSAInstallServiceClassW(
     IN  LPWSASERVICECLASSINFOW lpServiceClassInfo);
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 #define WSAInstallServiceClass WSAInstallServiceClassW
 #else /* UNICODE */
 #define WSAInstallServiceClass WSAInstallServiceClassA
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
+
+INT
+WSAAPI
+WSALookupServiceBeginA(
+    IN  LPWSAQUERYSETA lpqsRestrictions,
+    IN  DWORD dwControlFlags,
+    OUT LPHANDLE lphLookup);
 
 INT
 WSAAPI
-WSALookupServiceBegin(
-    IN  LPWSAQUERYSET lpqsRestrictions,
+WSALookupServiceBeginW(
+    IN  LPWSAQUERYSETW lpqsRestrictions,
     IN  DWORD dwControlFlags,
     OUT LPHANDLE lphLookup);
 
+#ifndef _DISABLE_TIDENTS
+#ifdef UNICODE
+#define WSALookupServiceBegin WSALookupServiceBeginW
+#else /* UNICODE */
+#define WSALookupServiceBegin WSALookupServiceBeginA
+#endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
+
 INT
 WSAAPI
 WSALookupServiceEnd(
@@ -1406,11 +1531,27 @@ WSALookupServiceEnd(
 
 INT
 WSAAPI
-WSALookupServiceNext(
-    IN      HANDLE hLookup,
-    IN      DWORD dwControlFlags,
-    IN OUT  LPDWORD lpdwBufferLength,
-    OUT     LPWSAQUERYSET lpqsResults);
+WSALookupServiceNextA(
+    IN      HANDLE         hLookup,
+    IN      DWORD          dwControlFlags,
+    IN OUT  LPDWORD        lpdwBufferLength,
+    OUT     LPWSAQUERYSETA lpqsResults);
+
+INT
+WSAAPI
+WSALookupServiceNextW(
+    IN      HANDLE         hLookup,
+    IN      DWORD          dwControlFlags,
+    IN OUT  LPDWORD        lpdwBufferLength,
+    OUT     LPWSAQUERYSETW lpqsResults);
+
+#ifndef _DISABLE_TIDENTS
+#ifdef UNICODE
+#define WSALookupServiceNext WSALookupServiceNextW
+#else /* UNICODE */
+#define WSALookupServiceNext WSALookupServiceNextA
+#endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 INT
 WSAAPI
@@ -1419,10 +1560,25 @@ WSARemoveServiceClass(
 
 INT
 WSAAPI
-WSASetService(
-    IN  LPWSAQUERYSET lpqsRegInfo,
+WSASetServiceA(
+    IN  LPWSAQUERYSETA   lpqsRegInfo,
     IN  WSAESETSERVICEOP essOperation,
-    IN  DWORD dwControlFlags);
+    IN  DWORD            dwControlFlags);
+
+INT
+WSAAPI
+WSASetServiceW(
+    IN  LPWSAQUERYSETW   lpqsRegInfo,
+    IN  WSAESETSERVICEOP essOperation,
+    IN  DWORD            dwControlFlags);
+
+#ifndef _DISABLE_TIDENTS
+#ifdef UNICODE
+#define WSASetService WSASetServiceW
+#else /* UNICODE */
+#define WSASetService WSASetServiceA
+#endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 INT
 WSAAPI
@@ -1442,11 +1598,13 @@ WSAStringToAddressW(
     OUT     LPSOCKADDR lpAddress,
     IN OUT  LPINT lpAddressLength);
 
+#ifndef _DISABLE_TIDENTS
 #ifdef UNICODE
 #define WSAStringToAddress WSAStringToAddressW
 #else /* UNICODE */
 #define WSAStringToAddress WSAStringToAddressA
 #endif /* UNICODE */
+#endif /* _DISABLE_TIDENTS */
 
 /* WinSock 1.1 compatible name resolution APIs */
 
@@ -1563,10 +1721,140 @@ WSAAPI
 WSACancelAsyncRequest(
     IN  HANDLE hAsyncTaskHandle);
 
+INT
+WSAAPI
+WSANSPIoctl(
+    HANDLE           hLookup,
+    DWORD            dwControlCode,
+    LPVOID           lpvInBuffer,
+    DWORD            cbInBuffer,
+    LPVOID           lpvOutBuffer,
+    DWORD            cbOutBuffer,
+    LPDWORD          lpcbBytesReturned,
+    LPWSACOMPLETION  lpCompletion
+    );
+
+INT
+WSAAPI
+WSCUpdateProvider(
+    LPGUID lpProviderId,
+    const WCHAR FAR * lpszProviderDllPath,
+    const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
+    DWORD dwNumberOfEntries,
+    LPINT lpErrno
+    );
+
+INT
+WSAAPI
+WSCWriteNameSpaceOrder (
+    LPGUID lpProviderId,
+    DWORD dwNumberOfEntries
+    );
+
+VOID
+WSAAPI
+freeaddrinfo(
+    LPADDRINFO      pAddrInfo
+    );
+
+INT
+WSAAPI
+getaddrinfo(
+    const char FAR * nodename,
+    const char FAR * servname,
+    const struct addrinfo FAR * hints,
+    struct addrinfo FAR * FAR * res
+    );
+
+INT
+WSAAPI
+getnameinfo(
+    const struct sockaddr FAR * sa,
+    socklen_t       salen,
+    char FAR *      host,
+    DWORD           hostlen,
+    char FAR *      serv,
+    DWORD           servlen,
+    INT             flags
+    );
+
+WINBOOL
+STDCALL
+AcceptEx(SOCKET sListenSocket,SOCKET sAcceptSocket,PVOID lpOutputBuffer,DWORD dwReceiveDataLength,DWORD dwLocalAddressLength,DWORD dwRemoteAddressLength,LPDWORD lpdwBytesReceived,LPOVERLAPPED lpOverlapped);
+INT
+STDCALL
+EnumProtocolsA(LPINT lpiProtocols,LPVOID lpProtocolBuffer,LPDWORD lpdwBufferLength);
+INT
+STDCALL
+EnumProtocolsW(LPINT lpiProtocols,LPVOID lpProtocolBuffer,LPDWORD lpdwBufferLength);
+VOID
+STDCALL
+GetAcceptExSockaddrs(PVOID lpOutputBuffer,DWORD dwReceiveDataLength,DWORD dwLocalAddressLength,DWORD dwRemoteAddressLength,struct sockaddr **LocalSockaddr,LPINT LocalSockaddrLength,struct sockaddr **RemoteSockaddr,LPINT RemoteSockaddrLength);
+INT
+STDCALL
+GetAddressByNameA(DWORD dwNameSpace,LPGUID lpServiceType,LPSTR lpServiceName,LPINT lpiProtocols,DWORD dwResolution,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPVOID lpCsaddrBuffer,LPDWORD lpdwBufferLength,LPSTR lpAliasBuffer,LPDWORD lpdwAliasBufferLength);
+INT
+STDCALL
+GetAddressByNameW(DWORD dwNameSpace,LPGUID lpServiceType,LPWSTR lpServiceName,LPINT lpiProtocols,DWORD dwResolution,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPVOID lpCsaddrBuffer,LPDWORD lpdwBufferLength,LPWSTR lpAliasBuffer,LPDWORD lpdwAliasBufferLength);
+INT
+STDCALL
+GetNameByTypeA(LPGUID lpServiceType,LPSTR lpServiceName,DWORD dwNameLength);
+INT
+STDCALL
+GetNameByTypeW(LPGUID lpServiceType,LPWSTR lpServiceName,DWORD dwNameLength);
+INT
+STDCALL
+GetServiceA(DWORD dwNameSpace,LPGUID lpGuid,LPSTR lpServiceName,DWORD dwProperties,LPVOID lpBuffer,LPDWORD lpdwBufferSize,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
+INT
+STDCALL
+GetServiceW(DWORD dwNameSpace,LPGUID lpGuid,LPWSTR lpServiceName,DWORD dwProperties,LPVOID lpBuffer,LPDWORD lpdwBufferSize,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
+INT
+STDCALL
+GetTypeByNameA(LPSTR lpServiceName,LPGUID lpServiceType);
+INT
+STDCALL
+GetTypeByNameW(LPWSTR lpServiceName,LPGUID lpServiceType);
+INT
+STDCALL
+SetServiceA(DWORD dwNameSpace,DWORD dwOperation,DWORD dwFlags,LPSERVICE_INFOA lpServiceInfo,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPDWORD lpdwStatusFlags);
+INT
+STDCALL
+SetServiceW(DWORD dwNameSpace,DWORD dwOperation,DWORD dwFlags,LPSERVICE_INFOW lpServiceInfo,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPDWORD lpdwStatusFlags);
+WINBOOL
+STDCALL
+TransmitFile(SOCKET hSocket,HANDLE hFile,DWORD nNumberOfBytesToWrite,DWORD nNumberOfBytesPerSend,LPOVERLAPPED lpOverlapped,LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,DWORD dwReserved);
+INT
+STDCALL
+WSARecvEx(SOCKET s,LPSTR buf,INT len,LPINT flags);
+
+struct netent * STDCALL getnetbyname(const char *name);
+void STDCALL s_perror(LPCSTR message);
+UINT STDCALL inet_network(const char *cp);
+BOOL STDCALL WSApSetPostRoutine(PVOID Routine);
+
+typedef  DWORD (* LPFN_NSPAPI) (VOID ) ;
+
+typedef struct _NS_ROUTINE {
+    DWORD        dwFunctionCount;
+    LPFN_NSPAPI *alpfnFunctions;
+    DWORD        dwNameSpace;
+    DWORD        dwPriority;
+} NS_ROUTINE, *PNS_ROUTINE, * FAR LPNS_ROUTINE;
+
+INT
+APIENTRY
+NPLoadNameSpaces (
+    IN OUT LPDWORD         lpdwVersion,
+    IN OUT LPNS_ROUTINE    nsrBuffer,
+    IN OUT LPDWORD         lpdwBufferLength
+    );
+
 #ifdef __cplusplus
 };
 #endif /* __cplusplus */
 
+#endif /* !__USE_W32API */
+
 #endif /* __WINSOCK2_H */
 
 /* EOF */