1
{******************************************************************************}
3
{ Winsock2 Service Provider API interface Unit for Object Pascal }
5
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
6
{ Corporation. All Rights Reserved. }
8
{ The original file is: ws2spi.h, released June 2000. The original Pascal }
9
{ code is: WS2spi.pas, released December 2000. The initial developer of the }
10
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
12
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
13
{ Marcel van Brakel. All Rights Reserved. }
15
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
17
{ You may retrieve the latest version of this file at the Project JEDI }
18
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
20
{ The contents of this file are used with permission, subject to the Mozilla }
21
{ Public License Version 1.1 (the "License"); you may not use this file except }
22
{ in compliance with the License. You may obtain a copy of the License at }
23
{ http://www.mozilla.org/MPL/MPL-1.1.html }
25
{ Software distributed under the License is distributed on an "AS IS" basis, }
26
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
27
{ the specific language governing rights and limitations under the License. }
29
{ Alternatively, the contents of this file may be used under the terms of the }
30
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
31
{ provisions of the LGPL License are applicable instead of those above. }
32
{ If you wish to allow use of your version of this file only under the terms }
33
{ of the LGPL License and not to allow others to use your version of this file }
34
{ under the MPL, indicate your decision by deleting the provisions above and }
35
{ replace them with the notice and other provisions required by the LGPL }
36
{ License. If you do not delete the provisions above, a recipient may use }
37
{ your version of this file under either the MPL or the LGPL License. }
39
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
41
{******************************************************************************}
43
// $Id: JwaWS2spi.pas,v 1.9 2005/09/06 16:36:50 marquardt Exp $
50
{$HPPEMIT '#include "ws2spi.h"'}
58
JwaWindows, JwaWinSock2;
61
* Ensure structures are packed consistently.
71
WSPDESCRIPTION_LEN = 255;
72
{$EXTERNALSYM WSPDESCRIPTION_LEN}
74
WSS_OPERATION_IN_PROGRESS = $00000103;
75
{$EXTERNALSYM WSS_OPERATION_IN_PROGRESS}
81
szDescription: array [0..WSPDESCRIPTION_LEN] of WCHAR;
83
{$EXTERNALSYM WSPData}
85
{$EXTERNALSYM LPWSPDATA}
93
{$EXTERNALSYM _WSATHREADID}
94
WSATHREADID = _WSATHREADID;
95
{$EXTERNALSYM WSATHREADID}
96
LPWSATHREADID = ^WSATHREADID;
97
{$EXTERNALSYM LPWSATHREADID}
98
TWSAThreadID = WSATHREADID;
99
PWSAThreadID = LPWSATHREADID;
102
* Pointer to a blocking callback. A pointer to a blocking callback is
103
* returned from the WPUQueryBlockingCallback() upcall. Note that this
104
* function's signature is not identical to an application's blocking
109
LPBLOCKINGCALLBACK = function(dwContext: DWORD): BOOL; stdcall;
110
{$EXTERNALSYM LPBLOCKINGCALLBACK}
111
TBlockingCallback = LPBLOCKINGCALLBACK;
114
* Pointer to a user APC function. This is used as a parameter to the
115
* WPUQueueUserApc() upcall. Note that this function's signature is not
116
* identical to an application's completion routine.
119
LPWSAUSERAPC = procedure(dwContext: DWORD); stdcall;
120
{$EXTERNALSYM LPWSAUSERAPC}
121
TWsaUserApc = LPWSAUSERAPC;
124
* Pointers to the individual entries in a service provider's proc table.
127
LPWSPACCEPT = function(s: TSocket; addr: PSockAddr; addrlen: PINT;
128
lpfnCondition: LPCONDITIONPROC; dwCallbackData: DWORD; var Errno: Integer): TSocket; stdcall;
129
{$EXTERNALSYM LPWSPACCEPT}
130
TWspAccept = LPWSPACCEPT;
132
LPWSPADDRESSTOSTRING = function(lpsaAddress: LPSOCKADDR; dwAddressLength: DWORD;
133
lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpszAddressString: LPWSTR;
134
var lpdwAddressStringLength: DWORD; var lpErrno: Integer): Integer; stdcall;
135
{$EXTERNALSYM LPWSPADDRESSTOSTRING}
136
TWspAddressToString = LPWSPADDRESSTOSTRING;
138
LPWSPASYNCSELECT = function(s: TSocket; hWnd: HWND; wMsg: u_int; lEvent: Longint; var lpErrno: Integer): Integer; stdcall;
139
{$EXTERNALSYM LPWSPASYNCSELECT}
140
TWspASyncSelect = LPWSPASYNCSELECT;
142
LPWSPBIND = function(s: TSocket; var name: sockaddr; namelen: Integer; var lpErrno: Integer): Integer; stdcall;
143
{$EXTERNALSYM LPWSPBIND}
144
TWspBind = LPWSPBIND;
146
LPWSPCANCELBLOCKINGCALL = function(var lpErrno: Integer): Integer; stdcall;
147
{$EXTERNALSYM LPWSPCANCELBLOCKINGCALL}
148
TWspCancelBlockingCall = LPWSPCANCELBLOCKINGCALL;
150
LPWSPCLEANUP = function(var lpErrno: Integer): Integer; stdcall;
151
{$EXTERNALSYM LPWSPCLEANUP}
152
TWspCleanup = LPWSPCLEANUP;
154
LPWSPCLOSESOCKET = function(s: TSocket; var lpErrno: Integer): Integer; stdcall;
155
{$EXTERNALSYM LPWSPCLOSESOCKET}
156
TWspCloseSocket = LPWSPCLOSESOCKET;
158
LPWSPCONNECT = function(s: TSocket; name: PSockAddr; namelen: Integer; lpCallerData: LPWSABUF;
159
lpCalleeData: LPWSABUF; lpSQOS: LPQOS; lpGQOS: LPQOS; var lpErrno: Integer): Integer; stdcall;
160
{$EXTERNALSYM LPWSPCONNECT}
161
TWspConnect = LPWSPCONNECT;
163
LPWSPDUPLICATESOCKET = function(s: TSocket; dwProcessId: DWORD; lpProtocolInfo: LPWSAPROTOCOL_INFOW; var lpErrno: Integer): Integer; stdcall;
164
{$EXTERNALSYM LPWSPDUPLICATESOCKET}
165
TWspDuplicateSocket = LPWSPDUPLICATESOCKET;
167
LPWSPENUMNETWORKEVENTS = function(s: TSocket; hEventObject: WSAEVENT; lpNetworkEvents: LPWSANETWORKEVENTS; var lpErrno: Integer): Integer; stdcall;
168
{$EXTERNALSYM LPWSPENUMNETWORKEVENTS}
169
TWspEnumNetworkEvents = LPWSPENUMNETWORKEVENTS;
171
LPWSPEVENTSELECT = function(s: TSocket; hEventObject: WSAEVENT; lNetworkEvents: Longint; var lpErrno: Integer): Integer; stdcall;
172
{$EXTERNALSYM LPWSPEVENTSELECT}
173
TWspEventSelect = LPWSPEVENTSELECT;
175
LPWSPGETOVERLAPPEDRESULT = function(s: TSocket; lpOverlapped: LPWSAOVERLAPPED;
176
var lpcbTransfer: DWORD; fWait: BOOL; lpdwFlags: DWORD; var lpErrno: Integer): BOOL; stdcall;
177
{$EXTERNALSYM LPWSPGETOVERLAPPEDRESULT}
178
TWspGetOverlappedResult = LPWSPGETOVERLAPPEDRESULT;
180
LPWSPGETPEERNAME = function(s: TSocket; var name: sockaddr; var namelen, lpErrno: Integer): Integer; stdcall;
181
{$EXTERNALSYM LPWSPGETPEERNAME}
182
TWspGetPeerName = LPWSPGETPEERNAME;
184
LPWSPGETSOCKNAME = function(s: TSocket; var name: sockaddr; var namelen, lpErrno: Integer): Integer; stdcall;
185
{$EXTERNALSYM LPWSPGETSOCKNAME}
186
TWspGetSockName = LPWSPGETSOCKNAME;
188
LPWSPGETSOCKOPT = function(s: TSocket; level, optname: Integer; optval: PChar; var optlen, lpErrno: Integer): Integer; stdcall;
189
{$EXTERNALSYM LPWSPGETSOCKOPT}
190
TWspGetSockOpt = LPWSPGETSOCKOPT;
192
LPWSPGETQOSBYNAME = function(s: TSocket; var lpQOSName: WSABUF; lpQOS: LPQOS; lpErrno: Integer): BOOL; stdcall;
193
{$EXTERNALSYM LPWSPGETQOSBYNAME}
194
TWspGetQosByName = LPWSPGETQOSBYNAME;
196
LPWSPIOCTL = function(s: TSocket; dwIoControlCode: DWORD; lpvInBuffer: LPVOID; cbInBuffer: DWORD;
197
lpvOutBuffer: LPVOID; cbOutBuffer: DWORD; var lpcbBytesReturned: DWORD;
198
lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
199
lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
200
{$EXTERNALSYM LPWSPIOCTL}
201
TWspIoctl = LPWSPIOCTL;
203
LPWSPJOINLEAF = function(s: TSocket; name: sockaddr; namelen: Integer; lpCallerData: LPWSABUF;
204
lpCalleeData: LPWSABUF; lpSQOS, lpGQOS: LPQOS; dwFlags: DWORD; var lpErrno: Integer): TSocket; stdcall;
205
{$EXTERNALSYM LPWSPJOINLEAF}
206
TWspJoinLeaf = LPWSPJOINLEAF;
208
LPWSPLISTEN = function(s: TSocket; backlog: Integer; var lpErrno: Integer): Integer; stdcall;
209
{$EXTERNALSYM LPWSPLISTEN}
210
TWspListen = LPWSPLISTEN;
212
LPWSPRECV = function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
213
var lpNumberOfBytesRecvd, lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
214
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE; lpThreadId: LPWSATHREADID;
215
var lpErrno: Integer): Integer; stdcall;
216
{$EXTERNALSYM LPWSPRECV}
217
TWspRecv = LPWSPRECV;
219
LPWSPRECVDISCONNECT = function(s: TSocket; lpInboundDisconnectData: LPWSABUF; var lpErrno: Integer): Integer; stdcall;
220
{$EXTERNALSYM LPWSPRECVDISCONNECT}
221
TWspRecvDisconnect = LPWSPRECVDISCONNECT;
223
LPWSPRECVFROM = function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
224
var lpNumberOfBytesRecvd, lpFlags: DWORD; lpFrom: PSockAddr; lpFromlen: PINT;
225
lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
226
lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
227
{$EXTERNALSYM LPWSPRECVFROM}
228
TWspRecvFrom = LPWSPRECVFROM;
230
LPWSPSELECT = function(nfds: Integer; readfds, writefds, exceptfds: PFdSet; timeout: PTimeVal; var lpErrno: Integer): Integer; stdcall;
231
{$EXTERNALSYM LPWSPSELECT}
232
TWspSelect = LPWSPSELECT;
234
LPWSPSEND = function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
235
var lpNumberOfBytesSent: DWORD; dwFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
236
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
237
lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
238
{$EXTERNALSYM LPWSPSEND}
239
TWspSend = LPWSPSEND;
241
LPWSPSENDDISCONNECT = function(s: TSocket; lpOutboundDisconnectData: LPWSABUF; var lpErrno: Integer): Integer; stdcall;
242
{$EXTERNALSYM LPWSPSENDDISCONNECT}
243
TWspSendDisconnect = LPWSPSENDDISCONNECT;
245
LPWSPSENDTO = function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
246
var lpNumberOfBytesSent: DWORD; dwFlags: DWORD; lpTo: PSockAddr; iTolen: Integer;
247
lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
248
lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
249
{$EXTERNALSYM LPWSPSENDTO}
250
TWspSendTo = LPWSPSENDTO;
252
LPWSPSETSOCKOPT = function(s: TSocket; level, optname: Integer; optval: PChar; optlen: Integer; var lpErrno: Integer): Integer; stdcall;
253
{$EXTERNALSYM LPWSPSETSOCKOPT}
254
TWspSetSockOpt = LPWSPSETSOCKOPT;
256
LPWSPSHUTDOWN = function(s: TSocket; how: Integer; var lpErrno: Integer): Integer; stdcall;
257
{$EXTERNALSYM LPWSPSHUTDOWN}
258
TWspShutdown = LPWSPSHUTDOWN;
260
LPWSPSOCKET = function(af, type_, protocol: Integer; lpProtocolInfo: LPWSAPROTOCOL_INFOW;
261
g: GROUP; dwFlags: DWORD; var lpErrno: Integer): TSocket; stdcall;
262
{$EXTERNALSYM LPWSPSOCKET}
263
TWspSocket = LPWSPSOCKET;
265
LPWSPSTRINGTOADDRESS = function(AddressString: LPWSTR; AddressFamily: Integer;
266
lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpAddress: LPSOCKADDR;
267
var lpAddressLength, lpErrno: Integer): Integer; stdcall;
268
{$EXTERNALSYM LPWSPSTRINGTOADDRESS}
269
TWspStringToAddress = LPWSPSTRINGTOADDRESS;
272
* A service provider proc table. This structure is returned by value
273
* from the service provider's WSPStartup() entrypoint.
277
_WSPPROC_TABLE = record
278
lpWSPAccept: LPWSPACCEPT;
279
lpWSPAddressToString: LPWSPADDRESSTOSTRING;
280
lpWSPAsyncSelect: LPWSPASYNCSELECT;
281
lpWSPBind: LPWSPBIND;
282
lpWSPCancelBlockingCall: LPWSPCANCELBLOCKINGCALL;
283
lpWSPCleanup: LPWSPCLEANUP;
284
lpWSPCloseSocket: LPWSPCLOSESOCKET;
285
lpWSPConnect: LPWSPCONNECT;
286
lpWSPDuplicateSocket: LPWSPDUPLICATESOCKET;
287
lpWSPEnumNetworkEvents: LPWSPENUMNETWORKEVENTS;
288
lpWSPEventSelect: LPWSPEVENTSELECT;
289
lpWSPGetOverlappedResult: LPWSPGETOVERLAPPEDRESULT;
290
lpWSPGetPeerName: LPWSPGETPEERNAME;
291
lpWSPGetSockName: LPWSPGETSOCKNAME;
292
lpWSPGetSockOpt: LPWSPGETSOCKOPT;
293
lpWSPGetQOSByName: LPWSPGETQOSBYNAME;
294
lpWSPIoctl: LPWSPIOCTL;
295
lpWSPJoinLeaf: LPWSPJOINLEAF;
296
lpWSPListen: LPWSPLISTEN;
297
lpWSPRecv: LPWSPRECV;
298
lpWSPRecvDisconnect: LPWSPRECVDISCONNECT;
299
lpWSPRecvFrom: LPWSPRECVFROM;
300
lpWSPSelect: LPWSPSELECT;
301
lpWSPSend: LPWSPSEND;
302
lpWSPSendDisconnect: LPWSPSENDDISCONNECT;
303
lpWSPSendTo: LPWSPSENDTO;
304
lpWSPSetSockOpt: LPWSPSETSOCKOPT;
305
lpWSPShutdown: LPWSPSHUTDOWN;
306
lpWSPSocket: LPWSPSOCKET;
307
lpWSPStringToAddress: LPWSPSTRINGTOADDRESS;
309
{$EXTERNALSYM _WSPPROC_TABLE}
310
WSPPROC_TABLE = _WSPPROC_TABLE;
311
{$EXTERNALSYM WSPPROC_TABLE}
312
LPWSPPROC_TABLE = ^WSPPROC_TABLE;
313
{$EXTERNALSYM LPWSPPROC_TABLE}
314
TWspProcTable = WSPPROC_TABLE;
315
PWspProcTable = LPWSPPROC_TABLE;
318
* Pointers to the individual entries in the upcall table.
322
LPWPUCLOSEEVENT = function(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
323
{$EXTERNALSYM LPWPUCLOSEEVENT}
324
TWpuCloseEvent = LPWPUCLOSEEVENT;
326
LPWPUCLOSESOCKETHANDLE = function(s: TSocket; var lpErrno: Integer): Integer; stdcall;
327
{$EXTERNALSYM LPWPUCLOSESOCKETHANDLE}
328
TWpuCloseSocketHandle = LPWPUCLOSESOCKETHANDLE;
330
LPWPUCREATEEVENT = function(var lpErrno: Integer): WSAEVENT; stdcall;
331
{$EXTERNALSYM LPWPUCREATEEVENT}
332
TWpuCreateEvent = LPWPUCREATEEVENT;
334
LPWPUCREATESOCKETHANDLE = function(dwCatalogEntryId, dwContext: DWORD;
335
var lpErrno: Integer): TSocket; stdcall;
336
{$EXTERNALSYM LPWPUCREATESOCKETHANDLE}
337
TWpuCreateSocketHandle = LPWPUCREATESOCKETHANDLE;
339
LPWPUFDISSET = function(s: TSocket; fdset: PFdSet): Integer; stdcall;
340
{$EXTERNALSYM LPWPUFDISSET}
341
TWpuFdIsSet = LPWPUFDISSET;
343
LPWPUGETPROVIDERPATH = function(const lpProviderId: TGUID;
344
lpszProviderDllPath: PWCHAR; var lpProviderDllPathLen, lpErrno: Integer): Integer; stdcall;
345
{$EXTERNALSYM LPWPUGETPROVIDERPATH}
346
TWpuGetProviderPath = LPWPUGETPROVIDERPATH;
348
LPWPUMODIFYIFSHANDLE = function(dwCatalogEntryId: DWORD; ProposedHandle: TSocket;
349
var lpErrno: Integer): TSocket; stdcall;
350
{$EXTERNALSYM LPWPUMODIFYIFSHANDLE}
351
TWpuMoifyIfsHandle = LPWPUMODIFYIFSHANDLE;
353
LPWPUPOSTMESSAGE = function(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
354
{$EXTERNALSYM LPWPUPOSTMESSAGE}
355
TWpuPostMessage = LPWPUPOSTMESSAGE;
357
LPWPUQUERYBLOCKINGCALLBACK = function(dwCatalogEntryId: DWORD; var lplpfnCallback: LPBLOCKINGCALLBACK;
358
lpdwContext: LPDWORD; var lpErrno: Integer): Integer; stdcall;
359
{$EXTERNALSYM LPWPUQUERYBLOCKINGCALLBACK}
360
TWpuQueryBlockingCallback = LPWPUQUERYBLOCKINGCALLBACK;
362
LPWPUQUERYSOCKETHANDLECONTEXT = function(s: TSocket; lpContext: LPDWORD;
363
var lpErrno: Integer): Integer; stdcall;
364
{$EXTERNALSYM LPWPUQUERYSOCKETHANDLECONTEXT}
365
TWpuQuerySocketHandleContext = LPWPUQUERYSOCKETHANDLECONTEXT;
367
LPWPUQUEUEAPC = function(lpThreadId: LPWSATHREADID; lpfnUserApc: LPWSAUSERAPC;
368
dwContext: DWORD; var lpErrno: Integer): Integer; stdcall;
369
{$EXTERNALSYM LPWPUQUEUEAPC}
370
TWpuQueueApc = LPWPUQUEUEAPC;
372
LPWPURESETEVENT = function(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
373
{$EXTERNALSYM LPWPURESETEVENT}
374
TWpuResetEvent = LPWPURESETEVENT;
376
LPWPUSETEVENT = function(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
377
{$EXTERNALSYM LPWPUSETEVENT}
378
TWpuSetEvent = LPWPUSETEVENT;
380
LPWPUOPENCURRENTTHREAD = function(lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
381
{$EXTERNALSYM LPWPUOPENCURRENTTHREAD}
382
TWpuOpenCurrentThread = LPWPUOPENCURRENTTHREAD;
384
LPWPUCLOSETHREAD = function(lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
385
{$EXTERNALSYM LPWPUCLOSETHREAD}
386
TWpuCloseThread = LPWPUCLOSETHREAD;
388
// Available only directly from ws2_32.dll
390
LPWPUCOMPLETEOVERLAPPEDREQUEST = function(s: TSocket; lpOverlapped: LPWSAOVERLAPPED;
391
dwError: DWORD; cbTransferred: DWORD; var lpErrno: Integer): Integer; stdcall;
392
{$EXTERNALSYM LPWPUCOMPLETEOVERLAPPEDREQUEST}
393
TWpuCompleteOverlappedRequest = LPWPUCOMPLETEOVERLAPPEDREQUEST;
396
* The upcall table. This structure is passed by value to the service
397
* provider's WSPStartup() entrypoint.
400
_WSPUPCALLTABLE = record
401
lpWPUCloseEvent: LPWPUCLOSEEVENT;
402
lpWPUCloseSocketHandle: LPWPUCLOSESOCKETHANDLE;
403
lpWPUCreateEvent: LPWPUCREATEEVENT;
404
lpWPUCreateSocketHandle: LPWPUCREATESOCKETHANDLE;
405
lpWPUFDIsSet: LPWPUFDISSET;
406
lpWPUGetProviderPath: LPWPUGETPROVIDERPATH;
407
lpWPUModifyIFSHandle: LPWPUMODIFYIFSHANDLE;
408
lpWPUPostMessage: LPWPUPOSTMESSAGE;
409
lpWPUQueryBlockingCallback: LPWPUQUERYBLOCKINGCALLBACK;
410
lpWPUQuerySocketHandleContext: LPWPUQUERYSOCKETHANDLECONTEXT;
411
lpWPUQueueApc: LPWPUQUEUEAPC;
412
lpWPUResetEvent: LPWPURESETEVENT;
413
lpWPUSetEvent: LPWPUSETEVENT;
414
lpWPUOpenCurrentThread: LPWPUOPENCURRENTTHREAD;
415
lpWPUCloseThread: LPWPUCLOSETHREAD;
417
{$EXTERNALSYM _WSPUPCALLTABLE}
418
WSPUPCALLTABLE = _WSPUPCALLTABLE;
419
{$EXTERNALSYM WSPUPCALLTABLE}
420
LPWSPUPCALLTABLE = ^WSPUPCALLTABLE;
421
{$EXTERNALSYM LPWSPUPCALLTABLE}
422
TWspUpCallTable = WSPUPCALLTABLE;
423
PWspUpCallTable = LPWSPUPCALLTABLE;
426
* WinSock 2 SPI socket function prototypes
429
//function WSPStartup(wVersionRequested: WORD; lpWSPData: LPWSPDATA;
430
// lpProtocolInfo: LPWSAPROTOCOL_INFOW; UpcallTable: WSPUPCALLTABLE;
431
// lpProcTable: LPWSPPROC_TABLE): Integer; stdcall;
432
//{$EXTERNALSYM WSPStartup}
435
LPWSPSTARTUP = function(wVersionRequested: WORD; lpWSPData: LPWSPDATA;
436
lpProtocolInfo: LPWSAPROTOCOL_INFOW; UpcallTable: WSPUPCALLTABLE;
437
lpProcTable: LPWSPPROC_TABLE): Integer; stdcall;
438
{$EXTERNALSYM LPWSPSTARTUP}
439
TWspStartUp = LPWSPSTARTUP;
442
* Installation and configuration entrypoints.
445
function WSCEnumProtocols(lpiProtocols: PINT; lpProtocolBuffer: LPWSAPROTOCOL_INFOW;
446
var lpdwBufferLength: DWORD; var lpErrno: Integer): Integer; stdcall;
447
{$EXTERNALSYM WSCEnumProtocols}
450
LPWSCENUMPROTOCOLS = function(lpiProtocols: PINT; lpProtocolBuffer: LPWSAPROTOCOL_INFOW;
451
var lpdwBufferLength: DWORD; var lpErrno: Integer): Integer; stdcall;
452
{$EXTERNALSYM LPWSCENUMPROTOCOLS}
453
TWscEnumProtocols = LPWSCENUMPROTOCOLS;
458
// 64-bit architectures capable of running 32-bit code have
459
// separate 64-bit and 32-bit catalogs. API with '32' prefix
460
// allow 32 bit catalog manipulations by 64 bit process.
463
function WSCEnumProtocols32(lpiProtocols: PINT; lpProtocolBuffer: LPWSAPROTOCOL_INFOW; lpdwBufferLength: LPDWORD; lpErrno: PINT): Integer; stdcall;
464
{$EXTERNALSYM WSCEnumProtocols32}
468
function WSCDeinstallProvider(const lpProviderId: TGUID; var lpErrno: Integer): Integer; stdcall;
469
{$EXTERNALSYM WSCDeinstallProvider}
472
LPWSCDEINSTALLPROVIDER = function(const lpProviderId: TGUID; var lpErrno: Integer): Integer; stdcall;
473
{$EXTERNALSYM LPWSCDEINSTALLPROVIDER}
474
TWscDeinstallProvider = LPWSCDEINSTALLPROVIDER;
478
function WSCDeinstallProvider32(lpProviderId: PGUID; lpErrno: PINT): Integer; stdcall;
479
{$EXTERNALSYM WSCDeinstallProvider32}
483
function WSCInstallProvider(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
484
lpProtocolInfoList: LPWSAPROTOCOL_INFOW; dwNumberOfEntries: DWORD; var lpErrno: Integer): Integer; stdcall;
485
{$EXTERNALSYM WSCInstallProvider}
488
LPWSCINSTALLPROVIDER = function(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
489
lpProtocolInfoList: LPWSAPROTOCOL_INFOW; dwNumberOfEntries: DWORD; var lpErrno: Integer): Integer; stdcall;
490
{$EXTERNALSYM LPWSCINSTALLPROVIDER}
491
TWscInstallProvider = LPWSCINSTALLPROVIDER;
496
// This API manipulates 64-bit and 32-bit catalogs simulteneously.
497
// It is needed to guarantee the same catalog IDs for provider catalog
498
// entries in both 64-bit and 32-bit catalogs.
501
function WSCInstallProvider64_32(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
502
dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
503
{$EXTERNALSYM WSCInstallProvider64_32}
507
function WSCGetProviderPath(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
508
var lpProviderDllPathLen, lpErrno: Integer): Integer; stdcall;
509
{$EXTERNALSYM WSCGetProviderPath}
512
LPWSCGETPROVIDERPATH = function(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
513
var lpProviderDllPathLen, lpErrno: Integer): Integer; stdcall;
514
{$EXTERNALSYM LPWSCGETPROVIDERPATH}
515
TWscGetProviderPath = LPWSCGETPROVIDERPATH;
519
function WSCGetProviderPath32(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProviderDllPathLen: PINT; lpErrno: PINT): Integer; stdcall;
520
{$EXTERNALSYM WSCGetProviderPath32}
524
function WSCUpdateProvider(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
525
dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
526
{$EXTERNALSYM WSCUpdateProvider}
529
LPWSCUPDATEPROVIDER = function(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
530
dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
531
{$EXTERNALSYM LPWSCUPDATEPROVIDER}
535
function WSCUpdateProvider32(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
536
dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
537
{$EXTERNALSYM WSCUpdateProvider32}
541
function WSCInstallQOSTemplate(const Guid: TGUID; QosName: LPWSABUF; Qos: LPQOS): Integer; stdcall;
542
{$EXTERNALSYM WSCInstallQOSTemplate}
545
LPWSCINSTALLQOSTEMPLATE = function(const Guid: TGUID; QosName: LPWSABUF; Qos: LPQOS): Integer; stdcall;
546
{$EXTERNALSYM LPWSCINSTALLQOSTEMPLATE}
547
TWscInstallQosTemplate = LPWSCINSTALLQOSTEMPLATE;
549
function WSCRemoveQOSTemplate(const Guid: TGUID; QosName: LPWSABUF): Integer; stdcall;
550
{$EXTERNALSYM WSCRemoveQOSTemplate}
553
LPWSCREMOVEQOSTEMPLATE = function(const Guid: TGUID; QosName: LPWSABUF): Integer; stdcall;
554
{$EXTERNALSYM LPWSCREMOVEQOSTEMPLATE}
555
TWscRemoveQosTemplate = LPWSCREMOVEQOSTEMPLATE;
558
* The following upcall function prototypes are only used by WinSock 2 DLL and
559
* should not be used by any service providers.
562
function WPUCloseEvent(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
563
{$EXTERNALSYM WPUCloseEvent}
565
function WPUCloseSocketHandle(s: TSocket; var lpErrno: Integer): Integer; stdcall;
566
{$EXTERNALSYM WPUCloseSocketHandle}
568
function WPUCreateEvent(var lpErrno: Integer): WSAEVENT; stdcall;
569
{$EXTERNALSYM WPUCreateEvent}
571
function WPUCreateSocketHandle(dwCatalogEntryId, dwContext: DWORD; var lpErrno: Integer): SOCKET; stdcall;
572
{$EXTERNALSYM WPUCreateSocketHandle}
574
function WPUFDIsSet(s: TSocket; const fdset: fd_set): Integer; stdcall;
575
{$EXTERNALSYM WPUFDIsSet}
577
function WPUGetProviderPath(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
578
var lpProviderDllPathLen, lpErrno: : Integer): Integer; stdcall;
579
{$EXTERNALSYM WPUGetProviderPath}
581
function WPUModifyIFSHandle(dwCatalogEntryId: DWORD; ProposedHandle: SOCKET; var lpErrno: Integer): SOCKET; stdcall;
582
{$EXTERNALSYM WPUModifyIFSHandle}
584
function WPUPostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
585
{$EXTERNALSYM WPUPostMessage}
587
function WPUQueryBlockingCallback(dwCatalogEntryId: DWORD; var lplpfnCallback: LPBLOCKINGCALLBACK;
588
var lpdwContext: DWORD_PTR; var lpErrno: Integer): Integer; stdcall;
589
{$EXTERNALSYM WPUQueryBlockingCallback}
591
function WPUQuerySocketHandleContext(s: SOCKET; var lpContext: DWORD_PTR; lpErrno: Integer): Integer; stdcall;
592
{$EXTERNALSYM WPUQuerySocketHandleContext}
594
function WPUQueueApc(lpThreadId: LPWSATHREADID; lpfnUserApc: LPWSAUSERAPC;
595
dwContext: DWORD_PTR; var lpErrno: Integer): Integer; stdcall;
596
{$EXTERNALSYM WPUQueueApc}
598
function WPUResetEvent(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stcall;
599
{$EXTERNALSYM WPUResetEvent}
601
function WPUSetEvent(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
602
{$EXTERNALSYM WPUSetEvent}
604
function WPUCompleteOverlappedRequest(s: SOCKET; lpOverlapped: LPWSAOVERLAPPED;
605
dwError, cbTransferred: DWORD; var lpErrno: Integer): Integerl stdcall;
606
{$EXTERNALSYM WPUCompleteOverlappedRequest}
608
function WPUOpenCurrentThread(lpThreadId: LPWSATHREADID; lpErrno: PINT): Integer; stdcall;
609
{$EXTERNALSYM WPUOpenCurrentThread}
611
function WPUCloseThread(lpThreadId: LPWSATHREADID; lpErrno: PINT): Integer; stdcall;
612
{$EXTERNALSYM WPUCloseThread}
617
* Installing and uninstalling name space providers.
621
// SPI and API for enumerating name space providers are
622
// currently equivalent since there is no concept of a hidden
623
// name space provider
627
//#define WSCEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
628
//#define LPFN_WSCENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
632
function WSCEnumNameSpaceProviders32(lpdwBufferLength: LPDWORD; lpnspBuffer: LPWSANAMESPACE_INFOW): Integer; stdcall;
633
{$EXTERNALSYM WSCEnumNameSpaceProviders32}
637
function WSCInstallNameSpace(lpszIdentifier, lpszPathName: LPWSTR; dwNameSpace,
638
dwVersion: DWORD; const lpProviderId: TGUID): Integer; stdcall;
639
{$EXTERNALSYM WSCInstallNameSpace}
642
LPWSCINSTALLNAMESPACE = function(lpszIdentifier, lpszPathName: LPWSTR;
643
dwNameSpace, dwVersion: DWORD; const lpProviderId: TGUID): Integer; stdcall;
644
{$EXTERNALSYM LPWSCINSTALLNAMESPACE}
645
TWscInstallNamespace = LPWSCINSTALLNAMESPACE;
649
function WSCInstallNameSpace32(lpszIdentifier, lpszPathName: LPWSTR; dwNameSpace, dwVersion: DWORD; lpProviderId: PGUID): Integer; stdcall;
650
{$EXTERNALSYM WSCInstallNameSpace32}
654
function WSCUnInstallNameSpace(const lpProviderId: TGUID): Integer; stdcall;
655
{$EXTERNALSYM WSCUnInstallNameSpace}
658
LPWSCUNINSTALLNAMESPACE = function(const lpProviderId: TGUID): Integer; stdcall;
659
{$EXTERNALSYM LPWSCUNINSTALLNAMESPACE}
660
TWscUninstallNamespace = LPWSCUNINSTALLNAMESPACE;
664
function WSCUnInstallNameSpace32(lpProviderId: PGUID): Integer; stdcall;
665
{$EXTERNALSYM WSCUnInstallNameSpace32}
669
function WSCEnableNSProvider(const lpProviderId: TGUID; fEnable: BOOL): Integer; stdcall;
670
{$EXTERNALSYM WSCEnableNSProvider}
673
LPWSCENABLENSPROVIDER = function(const lpProviderId: TGUID; fEnable: BOOL): Integer; stdcall;
674
{$EXTERNALSYM LPWSCENABLENSPROVIDER}
675
TWscEnableNsProvider = LPWSCENABLENSPROVIDER;
679
function WSCEnableNSProvider32(lpProviderId: PGUID; fEnable: BOOL): Integer; stdcall;
680
{$EXTERNALSYM WSCEnableNSProvider32}
685
* Pointers to the individual entries in the namespace proc table.
689
LPNSPCLEANUP = function(const lpProviderId: TGUID): Integer; stdcall;
690
{$EXTERNALSYM LPNSPCLEANUP}
691
TNspCleanup = LPNSPCLEANUP;
693
LPNSPLOOKUPSERVICEBEGIN = function(const lpProviderId: TGUID;
694
lpqsRestrictions: LPWSAQUERYSETW; lpServiceClassInfo: LPWSASERVICECLASSINFOW;
695
dwControlFlags: DWORD; lphLookup: LPHANDLE): Integer; stdcall;
696
{$EXTERNALSYM LPNSPLOOKUPSERVICEBEGIN}
697
TNspLookupServiceBegin = LPNSPLOOKUPSERVICEBEGIN;
699
LPNSPLOOKUPSERVICENEXT = function(hLookup: HANDLE; dwControlFlags: DWORD;
700
lpdwBufferLength: LPDWORD; lpqsResults: LPWSAQUERYSETW): Integer; stdcall;
701
{$EXTERNALSYM LPNSPLOOKUPSERVICENEXT}
702
TNspLookupServiceNext = LPNSPLOOKUPSERVICENEXT;
704
LPNSPIOCTL = function(hLookup: HANDLE; dwControlCode: DWORD; lpvInBuffer: LPVOID;
705
cbInBuffer: DWORD; lpvOutBuffer: LPVOID; cbOutBuffer: DWORD; lpcbBytesReturned: LPDWORD;
706
lpCompletion: LPWSACOMPLETION; lpThreadId: LPWSATHREADID): Integer; stdcall;
707
{$EXTERNALSYM LPNSPIOCTL}
709
LPNSPLOOKUPSERVICEEND = function(hLookup: HANDLE): Integer; stdcall;
710
{$EXTERNALSYM LPNSPLOOKUPSERVICEEND}
711
TNspLookupServiceEnd = LPNSPLOOKUPSERVICEEND;
713
LPNSPSETSERVICE = function(const lpProviderId: TGUID;
714
lpServiceClassInfo: LPWSASERVICECLASSINFOW; lpqsRegInfo: LPWSAQUERYSETW;
715
essOperation: WSAESETSERVICEOP; dwControlFlags: DWORD): Integer; stdcall;
716
{$EXTERNALSYM LPNSPSETSERVICE}
717
TNspSetService = LPNSPSETSERVICE;
719
LPNSPINSTALLSERVICECLASS = function(const lpProviderId: TGUID;
720
lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
721
{$EXTERNALSYM LPNSPINSTALLSERVICECLASS}
722
TNspInstallServiceClass = LPNSPINSTALLSERVICECLASS;
724
LPNSPREMOVESERVICECLASS = function(const lpProviderId, lpServiceClassId: TGUID): Integer; stdcall;
725
{$EXTERNALSYM LPNSPREMOVESERVICECLASS}
726
TNspRemoveServiceClass = LPNSPREMOVESERVICECLASS;
728
LPNSPGETSERVICECLASSINFO = function(const lpProviderId: TGUID; lpdwBufSize: LPDWORD;
729
lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
730
{$EXTERNALSYM LPNSPGETSERVICECLASSINFO}
731
TNspGetServiceClassInfo = LPNSPGETSERVICECLASSINFO;
734
* The name space service provider procedure table.
738
_NSP_ROUTINE = record
739
(* Structure version information: *)
741
dwMajorVersion: DWORD;
742
dwMinorVersion: DWORD;
743
(* Procedure-pointer table: *)
744
NSPCleanup: LPNSPCLEANUP;
745
NSPLookupServiceBegin: LPNSPLOOKUPSERVICEBEGIN;
746
NSPLookupServiceNext: LPNSPLOOKUPSERVICENEXT;
747
NSPLookupServiceEnd: LPNSPLOOKUPSERVICEEND;
748
NSPSetService: LPNSPSETSERVICE;
749
NSPInstallServiceClass: LPNSPINSTALLSERVICECLASS;
750
NSPRemoveServiceClass: LPNSPREMOVESERVICECLASS;
751
NSPGetServiceClassInfo: LPNSPGETSERVICECLASSINFO;
752
// These APIs were added later, so must appear here
753
// to keep the pointers in the structure in order.
754
// Namespaces unaware of these APIs will set cbSize
755
// to match the size of FIELD_OFFSET(NSP_ROUTINE, NSPIoctl).
756
NSPIoctl: LPNSPIOCTL;
758
{$EXTERNALSYM _NSP_ROUTINE}
759
NSP_ROUTINE = _NSP_ROUTINE;
760
{$EXTERNALSYM NSP_ROUTINE}
761
LPNSP_ROUTINE = ^NSP_ROUTINE;
762
{$EXTERNALSYM LPNSP_ROUTINE}
763
TNspRoutines = NSP_ROUTINE;
764
PNspRoutines = LPNSP_ROUTINE;
767
* Startup procedures.
770
//function NSPStartup(const lpProviderId: TGUID; lpnspRoutines: LPNSP_ROUTINE): Integer; stdcall;
771
//{$EXTERNALSYM NSPStartup}
774
LPNSPSTARTUP = function(const lpProviderId: TGUID; lpnspRoutines: LPNSP_ROUTINE): Integer; stdcall;
775
{$EXTERNALSYM LPNSPSTARTUP}
776
TNspStartup = LPNSPSTARTUP;
783
{$IFDEF DYNAMIC_LINK}
786
_WSCEnumProtocols: Pointer;
788
function WSCEnumProtocols;
790
GetProcedureAddress(_WSCEnumProtocols, ws2_32, 'WSCEnumProtocols');
794
JMP [_WSCEnumProtocols]
801
_WSCEnumProtocols32: Pointer;
803
function WSCEnumProtocols32;
805
GetProcedureAddress(_WSCEnumProtocols32, ws2_32, 'WSCEnumProtocols32');
809
JMP [_WSCEnumProtocols32]
816
_WSCDeinstallProvider: Pointer;
818
function WSCDeinstallProvider;
820
GetProcedureAddress(_WSCDeinstallProvider, ws2_32, 'WSCDeinstallProvider');
824
JMP [_WSCDeinstallProvider]
831
_WSCDeinstallProvider32: Pointer;
833
function WSCDeinstallProvider32;
835
GetProcedureAddress(_WSCDeinstallProvider32, ws2_32, 'WSCDeinstallProvider32');
839
JMP [_WSCDeinstallProvider32]
846
_WSCInstallProvider: Pointer;
848
function WSCInstallProvider;
850
GetProcedureAddress(_WSCInstallProvider, ws2_32, 'WSCInstallProvider');
854
JMP [_WSCInstallProvider]
861
_WSCInstallProvider64_32: Pointer;
863
function WSCInstallProvider64_32;
865
GetProcedureAddress(_WSCInstallProvider64_32, ws2_32, 'WSCInstallProvider64_32');
869
JMP [_WSCInstallProvider64_32]
876
_WSCGetProviderPath: Pointer;
878
function WSCGetProviderPath;
880
GetProcedureAddress(_WSCGetProviderPath, ws2_32, 'WSCGetProviderPath');
884
JMP [_WSCGetProviderPath]
891
_WSCGetProviderPath32: Pointer;
893
function WSCGetProviderPath32;
895
GetProcedureAddress(_WSCGetProviderPath32, ws2_32, 'WSCGetProviderPath32');
899
JMP [_WSCGetProviderPath32]
906
_WSCUpdateProvider: Pointer;
908
function WSCUpdateProvider;
910
GetProcedureAddress(_WSCUpdateProvider, ws2_32, 'WSCUpdateProvider');
914
JMP [_WSCUpdateProvider]
921
_WSCUpdateProvider32: Pointer;
923
function WSCUpdateProvider32;
925
GetProcedureAddress(_WSCUpdateProvider32, ws2_32, 'WSCUpdateProvider32');
929
JMP [_WSCUpdateProvider32]
936
_WSCInstallQOSTemplate: Pointer;
938
function WSCInstallQOSTemplate;
940
GetProcedureAddress(_WSCInstallQOSTemplate, JwaWs2spi.qosname, 'WSCInstallQOSTemplate');
944
JMP [_WSCInstallQOSTemplate]
949
_WSCRemoveQOSTemplate: Pointer;
951
function WSCRemoveQOSTemplate;
953
GetProcedureAddress(_WSCRemoveQOSTemplate, JwaWs2spi.qosname, 'WSCRemoveQOSTemplate');
957
JMP [_WSCRemoveQOSTemplate]
964
_WSCEnumNameSpaceProviders32: Pointer;
966
function WSCEnumNameSpaceProviders32;
968
GetProcedureAddress(_WSCEnumNameSpaceProviders32, ws2_32, 'WSCEnumNameSpaceProviders32');
972
JMP [_WSCEnumNameSpaceProviders32]
979
_WSCInstallNameSpace: Pointer;
981
function WSCInstallNameSpace;
983
GetProcedureAddress(_WSCInstallNameSpace, ws2_32, 'WSCInstallNameSpace');
987
JMP [_WSCInstallNameSpace]
994
_WSCInstallNameSpace32: Pointer;
996
function WSCInstallNameSpace32;
998
GetProcedureAddress(_WSCInstallNameSpace32, ws2_32, 'WSCInstallNameSpace32');
1002
JMP [_WSCInstallNameSpace32]
1009
_WSCUnInstallNameSpace: Pointer;
1011
function WSCUnInstallNameSpace;
1013
GetProcedureAddress(_WSCUnInstallNameSpace, ws2_32, 'WSCUnInstallNameSpace');
1017
JMP [_WSCUnInstallNameSpace]
1024
_WSCUnInstallNameSpace32: Pointer;
1026
function WSCUnInstallNameSpace32;
1028
GetProcedureAddress(_WSCUnInstallNameSpace32, ws2_32, 'WSCUnInstallNameSpace32');
1032
JMP [_WSCUnInstallNameSpace32]
1039
_WSCEnableNSProvider: Pointer;
1041
function WSCEnableNSProvider;
1043
GetProcedureAddress(_WSCEnableNSProvider, ws2_32, 'WSCEnableNSProvider');
1047
JMP [_WSCEnableNSProvider]
1054
_WSCEnableNSProvider32: Pointer;
1056
function WSCEnableNSProvider32;
1058
GetProcedureAddress(_WSCEnableNSProvider32, ws2_32, 'WSCEnableNSProvider32');
1062
JMP [_WSCEnableNSProvider32]
1070
function WSCEnumProtocols; external ws2_32 name 'WSCEnumProtocols';
1071
function WSCDeinstallProvider; external ws2_32 name 'WSCDeinstallProvider';
1072
function WSCInstallProvider; external ws2_32 name 'WSCInstallProvider';
1073
function WSCGetProviderPath; external ws2_32 name 'WSCGetProviderPath';
1074
function WSCUpdateProvider; external ws2_32 name 'WSCUpdateProvider';
1075
function WSCInstallQOSTemplate; external qosname name 'WSCInstallQOSTemplate';
1076
function WSCRemoveQOSTemplate; external qosname name 'WSCRemoveQOSTemplate';
1077
function WSCInstallNameSpace; external ws2_32 name 'WSCInstallNameSpace';
1078
function WSCUnInstallNameSpace; external ws2_32 name 'WSCUnInstallNameSpace';
1079
function WSCEnableNSProvider; external ws2_32 name 'WSCEnableNSProvider';
1081
function WSCEnumProtocols32; external ws2_32 name 'WSCEnumProtocols32';
1082
function WSCDeinstallProvider32; external ws2_32 name 'WSCDeinstallProvider32';
1083
function WSCInstallProvider64_32; external ws2_32 name 'WSCInstallProvider64_32';
1084
function WSCGetProviderPath32; external ws2_32 name 'WSCGetProviderPath32';
1085
function WSCUpdateProvider32; external ws2_32 name 'WSCUpdateProvider32';
1086
function WSCEnumNameSpaceProviders32; external ws2_32 name 'WSCEnumNameSpaceProviders32';
1087
function WSCInstallNameSpace32; external ws2_32 name 'WSCInstallNameSpace32';
1088
function WSCUnInstallNameSpace32; external ws2_32 name 'WSCUnInstallNameSpace32';
1089
function WSCEnableNSProvider32; external ws2_32 name 'WSCEnableNSProvider32';
1092
{$ENDIF DYNAMIC_LINK}