master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6#ifndef _WINSOCK2SPI_
  7#define _WINSOCK2SPI_
  8
  9#ifndef _WIN64
 10#include <pshpack4.h>
 11#endif
 12
 13#include <winsock2.h>
 14
 15#define WSPDESCRIPTION_LEN 255
 16
 17#define WSS_OPERATION_IN_PROGRESS __MSABI_LONG(0x00000103)
 18
 19typedef struct WSPData {
 20  WORD wVersion;
 21  WORD wHighVersion;
 22  WCHAR szDescription[WSPDESCRIPTION_LEN+1];
 23} WSPDATA,*LPWSPDATA;
 24
 25typedef struct _WSATHREADID {
 26  HANDLE ThreadHandle;
 27  DWORD_PTR Reserved;
 28} WSATHREADID,*LPWSATHREADID;
 29
 30#define WSPAPI WSAAPI
 31
 32#ifdef __cplusplus
 33extern "C" {
 34#endif
 35
 36  typedef WINBOOL (CALLBACK *LPBLOCKINGCALLBACK)(DWORD_PTR dwContext);
 37  typedef VOID (CALLBACK *LPWSAUSERAPC)(DWORD_PTR dwContext);
 38  typedef SOCKET (WSPAPI *LPWSPACCEPT)(SOCKET s,struct sockaddr *addr,LPINT addrlen,LPCONDITIONPROC lpfnCondition,DWORD_PTR dwCallbackData,LPINT lpErrno);
 39  typedef INT (WSPAPI *LPWSPADDRESSTOSTRING)(LPSOCKADDR lpsaAddress,DWORD dwAddressLength,LPWSAPROTOCOL_INFOW lpProtocolInfo,LPWSTR lpszAddressString,LPDWORD lpdwAddressStringLength,LPINT lpErrno);
 40  typedef int (WSPAPI *LPWSPASYNCSELECT)(SOCKET s,HWND hWnd,unsigned int wMsg,__LONG32 lEvent,LPINT lpErrno);
 41  typedef int (WSPAPI *LPWSPBIND)(SOCKET s,const struct sockaddr *name,int namelen,LPINT lpErrno);
 42  typedef int (WSPAPI *LPWSPCANCELBLOCKINGCALL)(LPINT lpErrno);
 43  typedef int (WSPAPI *LPWSPCLEANUP)(LPINT lpErrno);
 44  typedef int (WSPAPI *LPWSPCLOSESOCKET)(SOCKET s,LPINT lpErrno);
 45  typedef int (WSPAPI *LPWSPCONNECT)(SOCKET s,const struct sockaddr *name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS,LPINT lpErrno);
 46  typedef int (WSPAPI *LPWSPDUPLICATESOCKET)(SOCKET s,DWORD dwProcessId,LPWSAPROTOCOL_INFOW lpProtocolInfo,LPINT lpErrno);
 47  typedef int (WSPAPI *LPWSPENUMNETWORKEVENTS)(SOCKET s,WSAEVENT hEventObject,LPWSANETWORKEVENTS lpNetworkEvents,LPINT lpErrno);
 48  typedef int (WSPAPI *LPWSPEVENTSELECT)(SOCKET s,WSAEVENT hEventObject,__LONG32 lNetworkEvents,LPINT lpErrno);
 49  typedef WINBOOL (WSPAPI *LPWSPGETOVERLAPPEDRESULT)(SOCKET s,LPWSAOVERLAPPED lpOverlapped,LPDWORD lpcbTransfer,WINBOOL fWait,LPDWORD lpdwFlags,LPINT lpErrno);
 50  typedef int (WSPAPI *LPWSPGETPEERNAME)(SOCKET s,struct sockaddr *name,LPINT namelen,LPINT lpErrno);
 51  typedef int (WSPAPI *LPWSPGETSOCKNAME)(SOCKET s,struct sockaddr *name,LPINT namelen,LPINT lpErrno);
 52  typedef int (WSPAPI *LPWSPGETSOCKOPT)(SOCKET s,int level,int optname,char *optval,LPINT optlen,LPINT lpErrno);
 53  typedef WINBOOL (WSPAPI *LPWSPGETQOSBYNAME)(SOCKET s,LPWSABUF lpQOSName,LPQOS lpQOS,LPINT lpErrno);
 54  typedef int (WSPAPI *LPWSPIOCTL)(SOCKET s,DWORD dwIoControlCode,LPVOID lpvInBuffer,DWORD cbInBuffer,LPVOID lpvOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbBytesReturned,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,LPWSATHREADID lpThreadId,LPINT lpErrno);
 55  typedef SOCKET (WSPAPI *LPWSPJOINLEAF)(SOCKET s,const struct sockaddr *name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS,DWORD dwFlags,LPINT lpErrno);
 56  typedef int (WSPAPI *LPWSPLISTEN)(SOCKET s,int backlog,LPINT lpErrno);
 57  typedef int (WSPAPI *LPWSPRECV)(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,LPWSATHREADID lpThreadId,LPINT lpErrno);
 58  typedef int (WSPAPI *LPWSPRECVDISCONNECT)(SOCKET s,LPWSABUF lpInboundDisconnectData,LPINT lpErrno);
 59  typedef int (WSPAPI *LPWSPRECVFROM)(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,struct sockaddr *lpFrom,LPINT lpFromlen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,LPWSATHREADID lpThreadId,LPINT lpErrno);
 60  typedef int (WSPAPI *LPWSPSELECT)(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,const TIMEVAL *timeout,LPINT lpErrno);
 61  typedef int (WSPAPI *LPWSPSEND)(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,LPWSATHREADID lpThreadId,LPINT lpErrno);
 62  typedef int (WSPAPI *LPWSPSENDDISCONNECT)(SOCKET s,LPWSABUF lpOutboundDisconnectData,LPINT lpErrno);
 63  typedef int (WSPAPI *LPWSPSENDTO)(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,const struct sockaddr *lpTo,int iTolen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,LPWSATHREADID lpThreadId,LPINT lpErrno);
 64  typedef int (WSPAPI *LPWSPSETSOCKOPT)(SOCKET s,int level,int optname,const char *optval,int optlen,LPINT lpErrno);
 65  typedef int (WSPAPI *LPWSPSHUTDOWN)(SOCKET s,int how,LPINT lpErrno);
 66  typedef SOCKET (WSPAPI *LPWSPSOCKET)(int af,int type,int protocol,LPWSAPROTOCOL_INFOW lpProtocolInfo,GROUP g,DWORD dwFlags,LPINT lpErrno);
 67  typedef INT (WSPAPI *LPWSPSTRINGTOADDRESS)(LPWSTR AddressString,INT AddressFamily,LPWSAPROTOCOL_INFOW lpProtocolInfo,LPSOCKADDR lpAddress,LPINT lpAddressLength,LPINT lpErrno);
 68
 69  typedef struct _WSPPROC_TABLE {
 70
 71    LPWSPACCEPT lpWSPAccept;
 72    LPWSPADDRESSTOSTRING lpWSPAddressToString;
 73    LPWSPASYNCSELECT lpWSPAsyncSelect;
 74    LPWSPBIND lpWSPBind;
 75    LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
 76    LPWSPCLEANUP lpWSPCleanup;
 77    LPWSPCLOSESOCKET lpWSPCloseSocket;
 78    LPWSPCONNECT lpWSPConnect;
 79    LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
 80    LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
 81    LPWSPEVENTSELECT lpWSPEventSelect;
 82    LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
 83    LPWSPGETPEERNAME lpWSPGetPeerName;
 84    LPWSPGETSOCKNAME lpWSPGetSockName;
 85    LPWSPGETSOCKOPT lpWSPGetSockOpt;
 86    LPWSPGETQOSBYNAME lpWSPGetQOSByName;
 87    LPWSPIOCTL lpWSPIoctl;
 88    LPWSPJOINLEAF lpWSPJoinLeaf;
 89    LPWSPLISTEN lpWSPListen;
 90    LPWSPRECV lpWSPRecv;
 91    LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
 92    LPWSPRECVFROM lpWSPRecvFrom;
 93    LPWSPSELECT lpWSPSelect;
 94    LPWSPSEND lpWSPSend;
 95    LPWSPSENDDISCONNECT lpWSPSendDisconnect;
 96    LPWSPSENDTO lpWSPSendTo;
 97    LPWSPSETSOCKOPT lpWSPSetSockOpt;
 98    LPWSPSHUTDOWN lpWSPShutdown;
 99    LPWSPSOCKET lpWSPSocket;
100    LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
101  } WSPPROC_TABLE,*LPWSPPROC_TABLE;
102
103  typedef WINBOOL (WSPAPI *LPWPUCLOSEEVENT)(WSAEVENT hEvent,LPINT lpErrno);
104  typedef int (WSPAPI *LPWPUCLOSESOCKETHANDLE)(SOCKET s,LPINT lpErrno);
105  typedef WSAEVENT (WSPAPI *LPWPUCREATEEVENT)(LPINT lpErrno);
106  typedef SOCKET (WSPAPI *LPWPUCREATESOCKETHANDLE)(DWORD dwCatalogEntryId,DWORD_PTR dwContext,LPINT lpErrno);
107  typedef int (WSPAPI *LPWPUFDISSET)(SOCKET s,fd_set *fdset);
108  typedef int (WSPAPI *LPWPUGETPROVIDERPATH)(LPGUID lpProviderId,WCHAR *lpszProviderDllPath,LPINT lpProviderDllPathLen,LPINT lpErrno);
109  typedef SOCKET (WSPAPI *LPWPUMODIFYIFSHANDLE)(DWORD dwCatalogEntryId,SOCKET ProposedHandle,LPINT lpErrno);
110  typedef WINBOOL (WSPAPI *LPWPUPOSTMESSAGE)(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
111  typedef int (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)(DWORD dwCatalogEntryId,LPBLOCKINGCALLBACK *lplpfnCallback,PDWORD_PTR lpdwContext,LPINT lpErrno);
112  typedef int (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT)(SOCKET s,PDWORD_PTR lpContext,LPINT lpErrno);
113  typedef int (WSPAPI *LPWPUQUEUEAPC)(LPWSATHREADID lpThreadId,LPWSAUSERAPC lpfnUserApc,DWORD_PTR dwContext,LPINT lpErrno);
114  typedef WINBOOL (WSPAPI *LPWPURESETEVENT)(WSAEVENT hEvent,LPINT lpErrno);
115  typedef WINBOOL (WSPAPI *LPWPUSETEVENT)(WSAEVENT hEvent,LPINT lpErrno);
116  typedef int (WSPAPI *LPWPUOPENCURRENTTHREAD)(LPWSATHREADID lpThreadId,LPINT lpErrno);
117  typedef int (WSPAPI *LPWPUCLOSETHREAD)(LPWSATHREADID lpThreadId,LPINT lpErrno);
118  typedef int (WSPAPI *LPWPUCOMPLETEOVERLAPPEDREQUEST)(SOCKET s,LPWSAOVERLAPPED lpOverlapped,DWORD dwError,DWORD cbTransferred,LPINT lpErrno);
119
120  typedef struct _WSPUPCALLTABLE {
121    LPWPUCLOSEEVENT lpWPUCloseEvent;
122    LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
123    LPWPUCREATEEVENT lpWPUCreateEvent;
124    LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
125    LPWPUFDISSET lpWPUFDIsSet;
126    LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
127    LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
128    LPWPUPOSTMESSAGE lpWPUPostMessage;
129    LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
130    LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
131    LPWPUQUEUEAPC lpWPUQueueApc;
132    LPWPURESETEVENT lpWPUResetEvent;
133    LPWPUSETEVENT lpWPUSetEvent;
134    LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
135    LPWPUCLOSETHREAD lpWPUCloseThread;
136  } WSPUPCALLTABLE,*LPWSPUPCALLTABLE;
137
138  typedef int (WSPAPI *LPWSPSTARTUP)(WORD wVersionRequested,LPWSPDATA lpWSPData,LPWSAPROTOCOL_INFOW lpProtocolInfo,WSPUPCALLTABLE UpcallTable,LPWSPPROC_TABLE lpProcTable);
139  typedef int (WSPAPI *LPWSCENUMPROTOCOLS)(LPINT lpiProtocols,LPWSAPROTOCOL_INFOW lpProtocolBuffer,LPDWORD lpdwBufferLength,LPINT lpErrno);
140  typedef int (WSPAPI *LPWSCDEINSTALLPROVIDER)(LPGUID lpProviderId,LPINT lpErrno);
141  typedef int (WSPAPI *LPWSCINSTALLPROVIDER)(LPGUID lpProviderId,const WCHAR *lpszProviderDllPath,const LPWSAPROTOCOL_INFOW lpProtocolInfoList,DWORD dwNumberOfEntries,LPINT lpErrno);
142  typedef int (WSPAPI *LPWSCGETPROVIDERPATH)(LPGUID lpProviderId,WCHAR *lpszProviderDllPath,LPINT lpProviderDllPathLen,LPINT lpErrno);
143  typedef int (WSPAPI *LPWSCUPDATEPROVIDER)(LPGUID lpProviderId,const WCHAR *lpszProviderDllPath,const LPWSAPROTOCOL_INFOW lpProtocolInfoList,DWORD dwNumberOfEntries,LPINT lpErrno);
144  typedef int (WSPAPI *LPWSCINSTALLQOSTEMPLATE)(const LPGUID Guid,LPWSABUF QosName,LPQOS Qos);
145  typedef int (WSPAPI *LPWSCREMOVEQOSTEMPLATE)(const LPGUID Guid,LPWSABUF QosName);
146
147  int WSPAPI WSPStartup(WORD wVersionRequested,LPWSPDATA lpWSPData,LPWSAPROTOCOL_INFOW lpProtocolInfo,WSPUPCALLTABLE UpcallTable,LPWSPPROC_TABLE lpProcTable);
148  int WSPAPI WSCEnumProtocols(LPINT lpiProtocols,LPWSAPROTOCOL_INFOW lpProtocolBuffer,LPDWORD lpdwBufferLength,LPINT lpErrno);
149  int WSPAPI WSCDeinstallProvider(LPGUID lpProviderId,LPINT lpErrno);
150  int WSPAPI WSCInstallProvider(LPGUID lpProviderId,const WCHAR *lpszProviderDllPath,const LPWSAPROTOCOL_INFOW lpProtocolInfoList,DWORD dwNumberOfEntries,LPINT lpErrno);
151  int WSPAPI WSCGetProviderPath(LPGUID lpProviderId,WCHAR *lpszProviderDllPath,LPINT lpProviderDllPathLen,LPINT lpErrno);
152  int WSPAPI WSCUpdateProvider(LPGUID lpProviderId,const WCHAR *lpszProviderDllPath,const LPWSAPROTOCOL_INFOW lpProtocolInfoList,DWORD dwNumberOfEntries,LPINT lpErrno);
153  int WSPAPI WSCInstallQOSTemplate (const LPGUID Guid,LPWSABUF QosName,LPQOS Qos);
154  int WSPAPI WSCRemoveQOSTemplate (const LPGUID Guid,LPWSABUF QosName);
155
156#ifdef _WIN64
157  int WSPAPI WSCEnumProtocols32(LPINT lpiProtocols,LPWSAPROTOCOL_INFOW lpProtocolBuffer,LPDWORD lpdwBufferLength,LPINT lpErrno);
158  int WSPAPI WSCDeinstallProvider32(LPGUID lpProviderId,LPINT lpErrno);
159  int WSPAPI WSCInstallProvider64_32(LPGUID lpProviderId,const WCHAR *lpszProviderDllPath,const LPWSAPROTOCOL_INFOW lpProtocolInfoList,DWORD dwNumberOfEntries,LPINT lpErrno);
160  int WSPAPI WSCGetProviderPath32(LPGUID lpProviderId,WCHAR *lpszProviderDllPath,LPINT lpProviderDllPathLen,LPINT lpErrno);
161  int WSPAPI WSCUpdateProvider32(LPGUID lpProviderId,const WCHAR *lpszProviderDllPath,const LPWSAPROTOCOL_INFOW lpProtocolInfoList,DWORD dwNumberOfEntries,LPINT lpErrno);
162#endif
163
164  WINBOOL WSPAPI WPUCloseEvent(WSAEVENT hEvent,LPINT lpErrno);
165  int WSPAPI WPUCloseSocketHandle(SOCKET s,LPINT lpErrno);
166  WSAEVENT WSPAPI WPUCreateEvent(LPINT lpErrno);
167  SOCKET WSPAPI WPUCreateSocketHandle(DWORD dwCatalogEntryId,DWORD_PTR dwContext,LPINT lpErrno);
168  int WSPAPI WPUFDIsSet(SOCKET s,fd_set *fdset);
169  int WSPAPI WPUGetProviderPath(LPGUID lpProviderId,WCHAR *lpszProviderDllPath,LPINT lpProviderDllPathLen,LPINT lpErrno);
170  SOCKET WSPAPI WPUModifyIFSHandle(DWORD dwCatalogEntryId,SOCKET ProposedHandle,LPINT lpErrno);
171  WINBOOL WSPAPI WPUPostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
172  int WSPAPI WPUQueryBlockingCallback(DWORD dwCatalogEntryId,LPBLOCKINGCALLBACK *lplpfnCallback,PDWORD_PTR lpdwContext,LPINT lpErrno);
173  int WSPAPI WPUQuerySocketHandleContext(SOCKET s,PDWORD_PTR lpContext,LPINT lpErrno);
174  int WSPAPI WPUQueueApc(LPWSATHREADID lpThreadId,LPWSAUSERAPC lpfnUserApc,DWORD_PTR dwContext,LPINT lpErrno);
175  WINBOOL WSPAPI WPUResetEvent(WSAEVENT hEvent,LPINT lpErrno);
176  WINBOOL WSPAPI WPUSetEvent(WSAEVENT hEvent,LPINT lpErrno);
177  int WSPAPI WPUCompleteOverlappedRequest (SOCKET s,LPWSAOVERLAPPED lpOverlapped,DWORD dwError,DWORD cbTransferred,LPINT lpErrno);
178  int WSPAPI WPUOpenCurrentThread(LPWSATHREADID lpThreadId,LPINT lpErrno);
179  int WSPAPI WPUCloseThread(LPWSATHREADID lpThreadId,LPINT lpErrno);
180#define WSCEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
181#define LPFN_WSCENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
182
183#ifdef _WIN64
184  INT WSAAPI WSCEnumNameSpaceProviders32(LPDWORD lpdwBufferLength,LPWSANAMESPACE_INFOW lpnspBuffer);
185#endif
186
187  typedef INT (WSPAPI *LPWSCINSTALLNAMESPACE)(LPWSTR lpszIdentifier,LPWSTR lpszPathName,DWORD dwNameSpace,DWORD dwVersion,LPGUID lpProviderId);
188  typedef INT (WSPAPI *LPWSCUNINSTALLNAMESPACE)(LPGUID lpProviderId);
189  typedef INT (WSPAPI *LPWSCENABLENSPROVIDER)(LPGUID lpProviderId,WINBOOL fEnable);
190
191  INT WSPAPI WSCInstallNameSpace (LPWSTR lpszIdentifier,LPWSTR lpszPathName,DWORD dwNameSpace,DWORD dwVersion,LPGUID lpProviderId);
192  INT WSPAPI WSCUnInstallNameSpace (LPGUID lpProviderId);
193  INT WSPAPI WSCEnableNSProvider (LPGUID lpProviderId,WINBOOL fEnable);
194
195#ifdef _WIN64
196  INT WSPAPI WSCInstallNameSpace32 (LPWSTR lpszIdentifier,LPWSTR lpszPathName,DWORD dwNameSpace,DWORD dwVersion,LPGUID lpProviderId);
197  INT WSPAPI WSCUnInstallNameSpace32 (LPGUID lpProviderId);
198  INT WSPAPI WSCEnableNSProvider32 (LPGUID lpProviderId,WINBOOL fEnable);
199#endif
200
201  typedef INT (WSAAPI *LPNSPCLEANUP)(LPGUID lpProviderId);
202  typedef INT (WSAAPI *LPNSPLOOKUPSERVICEBEGIN)(LPGUID lpProviderId,LPWSAQUERYSETW lpqsRestrictions,LPWSASERVICECLASSINFOW lpServiceClassInfo,DWORD dwControlFlags,LPHANDLE lphLookup);
203  typedef INT (WSAAPI *LPNSPLOOKUPSERVICENEXT)(HANDLE hLookup,DWORD dwControlFlags,LPDWORD lpdwBufferLength,LPWSAQUERYSETW lpqsResults);
204  typedef INT (WSAAPI *LPNSPIOCTL)(HANDLE hLookup,DWORD dwControlCode,LPVOID lpvInBuffer,DWORD cbInBuffer,LPVOID lpvOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbBytesReturned,LPWSACOMPLETION lpCompletion,LPWSATHREADID lpThreadId);
205  typedef INT (WSAAPI *LPNSPLOOKUPSERVICEEND)(HANDLE hLookup);
206  typedef INT (WSAAPI *LPNSPSETSERVICE)(LPGUID lpProviderId,LPWSASERVICECLASSINFOW lpServiceClassInfo,LPWSAQUERYSETW lpqsRegInfo,WSAESETSERVICEOP essOperation,DWORD dwControlFlags);
207  typedef INT (WSAAPI *LPNSPINSTALLSERVICECLASS)(LPGUID lpProviderId,LPWSASERVICECLASSINFOW lpServiceClassInfo);
208  typedef INT (WSAAPI *LPNSPREMOVESERVICECLASS)(LPGUID lpProviderId,LPGUID lpServiceClassId);
209  typedef INT (WSAAPI *LPNSPGETSERVICECLASSINFO)(LPGUID lpProviderId,LPDWORD lpdwBufSize,LPWSASERVICECLASSINFOW lpServiceClassInfo);
210
211  typedef struct _NSP_ROUTINE {
212    DWORD cbSize;
213    DWORD dwMajorVersion;
214    DWORD dwMinorVersion;
215    LPNSPCLEANUP NSPCleanup;
216    LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
217    LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
218    LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
219    LPNSPSETSERVICE NSPSetService;
220    LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
221    LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
222    LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
223    LPNSPIOCTL NSPIoctl;
224  } NSP_ROUTINE,*LPNSP_ROUTINE;
225
226  typedef INT (WSAAPI *LPNSPSTARTUP)(LPGUID lpProviderId,LPNSP_ROUTINE lpnspRoutines);
227
228  INT WSAAPI NSPStartup(LPGUID lpProviderId,LPNSP_ROUTINE lpnspRoutines);
229
230#if (_WIN32_WINNT >= 0x0600)
231
232typedef int (WSAAPI *LPNSPV2CLEANUP)(
233  LPGUID lpProviderId,
234  LPVOID pvClientSessionArg
235);
236
237typedef int (WSAAPI *LPNSPV2CLIENTSESSIONRUNDOWN)(
238  LPGUID lpProviderId,
239  LPVOID pvClientSessionArg
240);
241
242typedef int (WSAAPI *LPNSPV2LOOKUPSERVICEBEGIN)(
243  LPGUID lpProviderId,
244  LPWSAQUERYSET2W lpqsRestrictions,
245  DWORD dwControlFlags,
246  LPVOID lpvClientSessionArg,
247  LPHANDLE lphLookup
248);
249
250typedef int (WSAAPI *LPNSPV2LOOKUPSERVICEEND)(
251  HANDLE hLookup
252);
253
254typedef int (WSAAPI *LPNSPV2LOOKUPSERVICENEXTEX)(
255  HANDLE hAsyncCall,
256  HANDLE hLookup,
257  DWORD dwControlFlags,
258  LPDWORD lpdwBufferLength,
259  LPWSAQUERYSET2W lpqsResults
260);
261
262typedef int (WSAAPI *LPNSPV2SETSERVICEEX)(
263  HANDLE hAsyncCall,
264  LPGUID lpProviderId,
265  LPWSAQUERYSET2W lpqsRegInfo,
266  WSAESETSERVICEOP essOperation,
267  DWORD dwControlFlags,
268  LPVOID lpvClientSessionArg
269);
270
271typedef int (WSAAPI *LPNSPV2STARTUP)(
272  LPGUID lpProviderId,
273  LPVOID *ppvClientSessionArg
274);
275
276typedef struct _NSPV2_ROUTINE {
277  DWORD                       cbSize;
278  DWORD                       dwMajorVersion;
279  DWORD                       dwMinorVersion;
280  LPNSPV2STARTUP              NSPv2Startup;
281  LPNSPV2CLEANUP              NSPv2Cleanup;
282  LPNSPV2LOOKUPSERVICEBEGIN   NSPv2LookupServiceBegin;
283  LPNSPV2LOOKUPSERVICENEXTEX  NSPv2LookupServiceNextEx;
284  LPNSPV2LOOKUPSERVICEEND     NSPv2LookupServiceEnd;
285  LPNSPV2SETSERVICEEX         NSPv2SetServiceEx;
286  LPNSPV2CLIENTSESSIONRUNDOWN NSPv2ClientSessionRundown;
287} NSPV2_ROUTINE, *PNSPV2_ROUTINE, *LPCNSPV2_ROUTINE;
288
289#define LSP_SYSTEM          0x80000000
290#define LSP_INSPECTOR       0x00000001
291#define LSP_REDIRECTOR      0x00000002
292#define LSP_PROXY           0x00000004
293#define LSP_FIREWALL        0x00000008
294#define LSP_INBOUND_MODIFY  0x00000010
295#define LSP_OUTBOUND_MODIFY 0x00000020
296#define LSP_CRYPTO_COMPRESS 0x00000040
297#define LSP_LOCAL_CACHE     0x00000080
298
299typedef enum _WSC_PROVIDER_INFO_TYPE {
300  ProviderInfoLspCategories = 0,
301  ProviderInfoAudit
302} WSC_PROVIDER_INFO_TYPE;
303
304typedef struct _WSC_PROVIDER_AUDIT_INFO {
305  DWORD RecordSize;
306  PVOID Reserved;
307} WSC_PROVIDER_AUDIT_INFO, *PWSC_PROVIDER_AUDIT_INFO;
308
309INT WSAAPI WSAAdvertiseProvider(
310  const GUID *puuidProviderId,
311  const LPCNSPV2_ROUTINE *pNSPv2Routine
312);
313
314INT WSPAPI WSAProviderCompleteAsyncCall(
315  HANDLE hAsyncCall,
316  INT iRetCode
317);
318
319INT WSPAPI WSAUnadvertiseProvider(
320  const GUID *puuidProviderId
321);
322
323int WSPAPI WSCGetApplicationCategory(
324  LPCWSTR Path,
325  DWORD PathLength,
326  LPCWSTR Extra,
327  DWORD ExtraLength,
328  DWORD *pPermittedLspCategories,
329  LPINT lpErrno
330);
331
332int WSPAPI WSCGetProviderInfo(
333  LPGUID lpProviderId,
334  WSC_PROVIDER_INFO_TYPE InfoType,
335  PBYTE Info,
336  size_t *InfoSize,
337  DWORD Flags,
338  LPINT lpErrno
339);
340
341#ifndef _WIN64
342int WSPAPI WSCInstallProviderAndChains(
343  const LPGUID lpProviderId,
344  const LPWSTR lpszProviderDllPath,
345  const LPWSTR lpszLspName,
346  DWORD dwServiceFlags,
347  const LPWSAPROTOCOL_INFO lpProtocolInfoList,
348  DWORD dwNumberOfEntries,
349  LPDWORD lpdwCatalogEntryId,
350  LPINT lpErrno
351);
352#endif /* !_WIN64 */
353
354int WSPAPI WSCSetApplicationCategory(
355  LPCWSTR Path,
356  DWORD PathLength,
357  LPCWSTR Extra,
358  DWORD ExtraLength,
359  DWORD PermittedLspCategories,
360  DWORD *pPrevPermLspCat,
361  LPINT lpErrno
362);
363
364int WSPAPI WSCSetProviderInfo(
365  LPGUID lpProviderId,
366  WSC_PROVIDER_INFO_TYPE InfoType,
367  PBYTE Info,
368  size_t InfoSize,
369  DWORD Flags,
370  LPINT lpErrno
371);
372
373int WSAAPI WSCInstallNameSpaceEx(
374  LPWSTR lpszIdentifier,
375  LPWSTR lpszPathName,
376  DWORD dwNameSpace,
377  DWORD dwVersion,
378  LPGUID lpProviderId,
379  LPBLOB lpProviderInfo
380);
381
382#define WSCEnumNameSpaceProvidersEx WSAEnumNameSpaceProvidersExW
383#define LPFN_WSCENUMNAMESPACEPROVIDERSEX LPFN_WSAENUMNAMESPACEPROVIDERSEXW
384
385#ifdef _WIN64
386INT WSPAPI WSCEnumNameSpaceProvidersEx32(
387  LPDWORD lpdwBufferLength,
388  LPWSANAMESPACE_INFOEXW lpnspBuffer
389);
390
391int WSPAPI WSCGetProviderInfo32(
392  LPGUID lpProviderId,
393  WSC_PROVIDER_INFO_TYPE InfoType,
394  PBYTE Info,
395  size_t *InfoSize,
396  DWORD Flags,
397  LPINT lpErrno
398);
399
400int WSAAPI WSCInstallNameSpaceEx32(
401  LPWSTR lpszIdentifier,
402  LPWSTR lpszPathName,
403  DWORD dwNameSpace,
404  DWORD dwVersion,
405  LPGUID lpProviderId,
406  LPBLOB lpProviderInfo
407);
408
409int WSPAPI WSCInstallProviderAndChains64_32(
410  const LPGUID lpProviderId,
411  const LPWSTR lpszProviderDllPath,
412  const LPWSTR lpszProviderDllPath32,
413  const LPWSTR lpszLspName,
414  DWORD dwServiceFlags,
415  const LPWSAPROTOCOL_INFO lpProtocolInfoList,
416  DWORD dwNumberOfEntries,
417  LPDWORD lpdwCatalogEntryId,
418  LPINT lpErrno
419);
420
421int WSPAPI WSCSetProviderInfo32(
422  LPGUID lpProviderId,
423  WSC_PROVIDER_INFO_TYPE InfoType,
424  PBYTE Info,
425  size_t InfoSize,
426  DWORD Flags,
427  LPINT lpErrno
428);
429
430#endif /* _WIN64*/
431
432#endif /*(_WIN32_WINNT >= 0x0600)*/
433
434#ifdef __cplusplus
435}
436#endif
437
438#if !defined(_WIN64)
439#include <poppack.h>
440#endif
441#endif