JwaWS2spi.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:38k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Winsock2 Service Provider API interface Unit for Object Pascal               }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  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@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  16. {                }
  17. { You may retrieve the latest version of this file at the Project JEDI home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaWS2spi;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "ws2spi.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaWinType, JwaWinSock2;
  52. (*
  53.  * Ensure structures are packed consistently.
  54.  *)
  55. {$IFNDEF _WIN64}
  56. {$ALIGN ON}
  57. {$ELSE}
  58. {$ALIGN OFF}
  59. {$ENDIF}
  60. const
  61.   WSPDESCRIPTION_LEN = 255;
  62.   {$EXTERNALSYM WSPDESCRIPTION_LEN}
  63.   WSS_OPERATION_IN_PROGRESS = $00000103;
  64.   {$EXTERNALSYM WSS_OPERATION_IN_PROGRESS}
  65. type
  66.   WSPData = record
  67.     wVersion: WORD;
  68.     wHighVersion: WORD;
  69.     szDescription: array [0..WSPDESCRIPTION_LEN] of WCHAR;
  70.   end;
  71.   {$EXTERNALSYM WSPData}
  72.   LPWSPDATA = ^WSPData;
  73.   {$EXTERNALSYM LPWSPDATA}
  74.   TWSPData = WSPDATA;
  75.   PWSPData = LPWSPDATA;
  76.   _WSATHREADID = record
  77.     ThreadHandle: HANDLE;
  78.     Reserved: DWORD;
  79.   end;
  80.   {$EXTERNALSYM _WSATHREADID}
  81.   WSATHREADID = _WSATHREADID;
  82.   {$EXTERNALSYM WSATHREADID}
  83.   LPWSATHREADID = ^WSATHREADID;
  84.   {$EXTERNALSYM LPWSATHREADID}
  85.   TWSAThreadID = WSATHREADID;
  86.   PWSAThreadID = LPWSATHREADID;
  87. (*
  88.  * Pointer to a blocking callback. A pointer to a blocking callback is
  89.  * returned from the WPUQueryBlockingCallback() upcall. Note that this
  90.  * function's signature is not identical to an application's blocking
  91.  * hook function.
  92.  *)
  93. type
  94.   LPBLOCKINGCALLBACK = function (dwContext: DWORD): BOOL; stdcall;
  95.   {$EXTERNALSYM LPBLOCKINGCALLBACK}
  96.   TBlockingCallback = LPBLOCKINGCALLBACK;
  97. (*
  98.  * Pointer to a user APC function. This is used as a parameter to the
  99.  * WPUQueueUserApc() upcall. Note that this function's signature is not
  100.  * identical to an application's completion routine.
  101.  *)
  102.   LPWSAUSERAPC = procedure (dwContext: DWORD); stdcall;
  103.   {$EXTERNALSYM LPWSAUSERAPC}
  104.   TWsaUserApc = LPWSAUSERAPC;
  105. (*
  106.  * Pointers to the individual entries in a service provider's proc table.
  107.  *)
  108.   LPWSPACCEPT = function (s: TSocket; addr: PSockAddr; addrlen: PINT;
  109.     lpfnCondition: LPCONDITIONPROC; dwCallbackData: DWORD; var Errno: Integer): TSocket; stdcall;
  110.   {$EXTERNALSYM LPWSPACCEPT}
  111.   TWspAccept = LPWSPACCEPT;
  112.   LPWSPADDRESSTOSTRING = function (lpsaAddress: LPSOCKADDR; dwAddressLength: DWORD;
  113.     lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpszAddressString: LPWSTR;
  114.     var lpdwAddressStringLength: DWORD; var lpErrno: Integer): Integer; stdcall;
  115.   {$EXTERNALSYM LPWSPADDRESSTOSTRING}
  116.   TWspAddressToString = LPWSPADDRESSTOSTRING;
  117.   LPWSPASYNCSELECT = function (s: TSocket; hWnd: HWND; wMsg: u_int; lEvent: Longint; var lpErrno: Integer): Integer; stdcall;
  118.   {$EXTERNALSYM LPWSPASYNCSELECT}
  119.   TWspASyncSelect = LPWSPASYNCSELECT;
  120.   LPWSPBIND = function (s: TSocket; var name: sockaddr; namelen: Integer; var lpErrno: Integer): Integer; stdcall;
  121.   {$EXTERNALSYM LPWSPBIND}
  122.   TWspBind = LPWSPBIND;
  123.   LPWSPCANCELBLOCKINGCALL = function (var lpErrno: Integer): Integer; stdcall;
  124.   {$EXTERNALSYM LPWSPCANCELBLOCKINGCALL}
  125.   TWspCancelBlockingCall = LPWSPCANCELBLOCKINGCALL;
  126.   LPWSPCLEANUP = function (var lpErrno: Integer): Integer; stdcall;
  127.   {$EXTERNALSYM LPWSPCLEANUP}
  128.   TWspCleanup = LPWSPCLEANUP;
  129.   LPWSPCLOSESOCKET = function (s: TSocket; var lpErrno: Integer): Integer; stdcall;
  130.   {$EXTERNALSYM LPWSPCLOSESOCKET}
  131.   TWspCloseSocket = LPWSPCLOSESOCKET;
  132.   LPWSPCONNECT = function (s: TSocket; name: PSockAddr; namelen: Integer; lpCallerData: LPWSABUF;
  133.     lpCalleeData: LPWSABUF; lpSQOS: LPQOS; lpGQOS: LPQOS; var lpErrno: Integer): Integer; stdcall;
  134.   {$EXTERNALSYM LPWSPCONNECT}
  135.   TWspConnect = LPWSPCONNECT;
  136.   LPWSPDUPLICATESOCKET = function (s: TSocket; dwProcessId: DWORD; lpProtocolInfo: LPWSAPROTOCOL_INFOW; var lpErrno: Integer): Integer; stdcall;
  137.   {$EXTERNALSYM LPWSPDUPLICATESOCKET}
  138.   TWspDuplicateSocket = LPWSPDUPLICATESOCKET;
  139.   LPWSPENUMNETWORKEVENTS = function (s: TSocket; hEventObject: WSAEVENT; lpNetworkEvents: LPWSANETWORKEVENTS; var lpErrno: Integer): Integer; stdcall;
  140.   {$EXTERNALSYM LPWSPENUMNETWORKEVENTS}
  141.   TWspEnumNetworkEvents = LPWSPENUMNETWORKEVENTS;
  142.   LPWSPEVENTSELECT = function (s: TSocket; hEventObject: WSAEVENT; lNetworkEvents: Longint; var lpErrno: Integer): Integer; stdcall;
  143.   {$EXTERNALSYM LPWSPEVENTSELECT}
  144.   TWspEventSelect = LPWSPEVENTSELECT;
  145.   LPWSPGETOVERLAPPEDRESULT = function (s: TSocket; lpOverlapped: LPWSAOVERLAPPED;
  146.     var lpcbTransfer: DWORD; fWait: BOOL; lpdwFlags: DWORD; var lpErrno: Integer): BOOL; stdcall;
  147.   {$EXTERNALSYM LPWSPGETOVERLAPPEDRESULT}
  148.   TWspGetOverlappedResult = LPWSPGETOVERLAPPEDRESULT;
  149.   LPWSPGETPEERNAME = function (s: TSocket; var name: sockaddr; var namelen, lpErrno: Integer): Integer; stdcall;
  150.   {$EXTERNALSYM LPWSPGETPEERNAME}
  151.   TWspGetPeerName = LPWSPGETPEERNAME;
  152.   LPWSPGETSOCKNAME = function (s: TSocket; var name: sockaddr; var namelen, lpErrno: Integer): Integer; stdcall;
  153.   {$EXTERNALSYM LPWSPGETSOCKNAME}
  154.   TWspGetSockName = LPWSPGETSOCKNAME;
  155.   LPWSPGETSOCKOPT = function (s: TSocket; level, optname: Integer; optval: PChar; var optlen, lpErrno: Integer): Integer; stdcall;
  156.   {$EXTERNALSYM LPWSPGETSOCKOPT}
  157.   TWspGetSockOpt = LPWSPGETSOCKOPT;
  158.   LPWSPGETQOSBYNAME = function (s: TSocket; var lpQOSName: WSABUF; lpQOS: LPQOS; lpErrno: Integer): BOOL; stdcall;
  159.   {$EXTERNALSYM LPWSPGETQOSBYNAME}
  160.   TWspGetQosByName = LPWSPGETQOSBYNAME;
  161.   LPWSPIOCTL = function (s: TSocket; dwIoControlCode: DWORD; lpvInBuffer: LPVOID; cbInBuffer: DWORD;
  162.     lpvOutBuffer: LPVOID; cbOutBuffer: DWORD; var lpcbBytesReturned: DWORD;
  163.     lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
  164.     lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  165.   {$EXTERNALSYM LPWSPIOCTL}
  166.   TWspIoctl = LPWSPIOCTL;
  167.   LPWSPJOINLEAF = function (s: TSocket; name: sockaddr; namelen: Integer; lpCallerData: LPWSABUF;
  168.     lpCalleeData: LPWSABUF; lpSQOS, lpGQOS: LPQOS; dwFlags: DWORD; var lpErrno: Integer): TSocket; stdcall;
  169.   {$EXTERNALSYM LPWSPJOINLEAF}
  170.   TWspJoinLeaf = LPWSPJOINLEAF;
  171.   LPWSPLISTEN = function (s: TSocket; backlog: Integer; var lpErrno: Integer): Integer; stdcall;
  172.   {$EXTERNALSYM LPWSPLISTEN}
  173.   TWspListen = LPWSPLISTEN;
  174.   LPWSPRECV = function (s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  175.     var lpNumberOfBytesRecvd, lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
  176.     lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE; lpThreadId: LPWSATHREADID;
  177.     var lpErrno: Integer): Integer; stdcall;
  178.   {$EXTERNALSYM LPWSPRECV}
  179.   TWspRecv = LPWSPRECV;
  180.   LPWSPRECVDISCONNECT = function (s: TSocket; lpInboundDisconnectData: LPWSABUF; var lpErrno: Integer): Integer; stdcall;
  181.   {$EXTERNALSYM LPWSPRECVDISCONNECT}
  182.   TWspRecvDisconnect = LPWSPRECVDISCONNECT;
  183.   LPWSPRECVFROM = function (s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  184.     var lpNumberOfBytesRecvd, lpFlags: DWORD; lpFrom: PSockAddr; lpFromlen: PINT;
  185.     lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
  186.     lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  187.   {$EXTERNALSYM LPWSPRECVFROM}
  188.   TWspRecvFrom = LPWSPRECVFROM;
  189.   LPWSPSELECT = function (nfds: Integer; readfds, writefds, exceptfds: PFdSet; timeout: PTimeVal; var lpErrno: Integer): Integer; stdcall;
  190.   {$EXTERNALSYM LPWSPSELECT}
  191.   TWspSelect = LPWSPSELECT;
  192.   LPWSPSEND = function (s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  193.     var lpNumberOfBytesSent: DWORD; dwFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
  194.     lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
  195.     lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  196.   {$EXTERNALSYM LPWSPSEND}
  197.   TWspSend = LPWSPSEND;
  198.   LPWSPSENDDISCONNECT = function (s: TSocket; lpOutboundDisconnectData: LPWSABUF; var lpErrno: Integer): Integer; stdcall;
  199.   {$EXTERNALSYM LPWSPSENDDISCONNECT}
  200.   TWspSendDisconnect = LPWSPSENDDISCONNECT;
  201.   LPWSPSENDTO = function (s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  202.     var lpNumberOfBytesSent: DWORD; dwFlags: DWORD; lpTo: PSockAddr; iTolen: Integer;
  203.     lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
  204.     lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  205.   {$EXTERNALSYM LPWSPSENDTO}
  206.   TWspSendTo = LPWSPSENDTO;
  207.   LPWSPSETSOCKOPT = function (s: TSocket; level, optname: Integer; optval: PChar; optlen: Integer; var lpErrno: Integer): Integer; stdcall;
  208.   {$EXTERNALSYM LPWSPSETSOCKOPT}
  209.   TWspSetSockOpt = LPWSPSETSOCKOPT;
  210.   LPWSPSHUTDOWN = function (s: TSocket; how: Integer; var lpErrno: Integer): Integer; stdcall;
  211.   {$EXTERNALSYM LPWSPSHUTDOWN}
  212.   TWspShutdown = LPWSPSHUTDOWN;
  213.   LPWSPSOCKET = function (af, type_, protocol: Integer; lpProtocolInfo: LPWSAPROTOCOL_INFOW;
  214.     g: GROUP; dwFlags: DWORD; var lpErrno: Integer): TSocket; stdcall;
  215.   {$EXTERNALSYM LPWSPSOCKET}
  216.   TWspSocket = LPWSPSOCKET;
  217.   LPWSPSTRINGTOADDRESS = function (AddressString: LPWSTR; AddressFamily: Integer;
  218.     lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpAddress: LPSOCKADDR;
  219.     var lpAddressLength, lpErrno: Integer): Integer; stdcall;
  220.   {$EXTERNALSYM LPWSPSTRINGTOADDRESS}
  221.   TWspStringToAddress = LPWSPSTRINGTOADDRESS;
  222. (*
  223.  * A service provider proc table. This structure is returned by value
  224.  * from the service provider's WSPStartup() entrypoint.
  225.  *)
  226. type
  227.   _WSPPROC_TABLE = record
  228.     lpWSPAccept: LPWSPACCEPT;
  229.     lpWSPAddressToString: LPWSPADDRESSTOSTRING;
  230.     lpWSPAsyncSelect: LPWSPASYNCSELECT;
  231.     lpWSPBind: LPWSPBIND;
  232.     lpWSPCancelBlockingCall: LPWSPCANCELBLOCKINGCALL;
  233.     lpWSPCleanup: LPWSPCLEANUP;
  234.     lpWSPCloseSocket: LPWSPCLOSESOCKET;
  235.     lpWSPConnect: LPWSPCONNECT;
  236.     lpWSPDuplicateSocket: LPWSPDUPLICATESOCKET;
  237.     lpWSPEnumNetworkEvents: LPWSPENUMNETWORKEVENTS;
  238.     lpWSPEventSelect: LPWSPEVENTSELECT;
  239.     lpWSPGetOverlappedResult: LPWSPGETOVERLAPPEDRESULT;
  240.     lpWSPGetPeerName: LPWSPGETPEERNAME;
  241.     lpWSPGetSockName: LPWSPGETSOCKNAME;
  242.     lpWSPGetSockOpt: LPWSPGETSOCKOPT;
  243.     lpWSPGetQOSByName: LPWSPGETQOSBYNAME;
  244.     lpWSPIoctl: LPWSPIOCTL;
  245.     lpWSPJoinLeaf: LPWSPJOINLEAF;
  246.     lpWSPListen: LPWSPLISTEN;
  247.     lpWSPRecv: LPWSPRECV;
  248.     lpWSPRecvDisconnect: LPWSPRECVDISCONNECT;
  249.     lpWSPRecvFrom: LPWSPRECVFROM;
  250.     lpWSPSelect: LPWSPSELECT;
  251.     lpWSPSend: LPWSPSEND;
  252.     lpWSPSendDisconnect: LPWSPSENDDISCONNECT;
  253.     lpWSPSendTo: LPWSPSENDTO;
  254.     lpWSPSetSockOpt: LPWSPSETSOCKOPT;
  255.     lpWSPShutdown: LPWSPSHUTDOWN;
  256.     lpWSPSocket: LPWSPSOCKET;
  257.     lpWSPStringToAddress: LPWSPSTRINGTOADDRESS;
  258.   end;
  259.   {$EXTERNALSYM _WSPPROC_TABLE}
  260.   WSPPROC_TABLE = _WSPPROC_TABLE;
  261.   {$EXTERNALSYM WSPPROC_TABLE}
  262.   LPWSPPROC_TABLE = ^WSPPROC_TABLE;
  263.   {$EXTERNALSYM LPWSPPROC_TABLE}
  264.   TWspProcTable = WSPPROC_TABLE;
  265.   PWspProcTable = LPWSPPROC_TABLE;
  266. (*
  267.  * Pointers to the individual entries in the upcall table.
  268.  *)
  269. type
  270.   LPWPUCLOSEEVENT = function (hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  271.   {$EXTERNALSYM LPWPUCLOSEEVENT}
  272.   TWpuCloseEvent = LPWPUCLOSEEVENT;
  273.   LPWPUCLOSESOCKETHANDLE = function (s: TSocket; var lpErrno: Integer): Integer; stdcall;
  274.   {$EXTERNALSYM LPWPUCLOSESOCKETHANDLE}
  275.   TWpuCloseSocketHandle = LPWPUCLOSESOCKETHANDLE;
  276.   LPWPUCREATEEVENT = function (var lpErrno: Integer): WSAEVENT; stdcall;
  277.   {$EXTERNALSYM LPWPUCREATEEVENT}
  278.   TWpuCreateEvent = LPWPUCREATEEVENT;
  279.   LPWPUCREATESOCKETHANDLE = function (dwCatalogEntryId, dwContext: DWORD;
  280.     var lpErrno: Integer): TSocket; stdcall;
  281.   {$EXTERNALSYM LPWPUCREATESOCKETHANDLE}
  282.   TWpuCreateSocketHandle = LPWPUCREATESOCKETHANDLE;
  283.   LPWPUFDISSET = function (s: TSocket; fdset: PFdSet): Integer; stdcall;
  284.   {$EXTERNALSYM LPWPUFDISSET}
  285.   TWpuFdIsSet = LPWPUFDISSET;
  286.   LPWPUGETPROVIDERPATH = function (const lpProviderId: TGUID;
  287.     lpszProviderDllPath: PWCHAR; var lpProviderDllPathLen, lpErrno: Integer): Integer; stdcall;
  288.   {$EXTERNALSYM LPWPUGETPROVIDERPATH}
  289.   TWpuGetProviderPath = LPWPUGETPROVIDERPATH;
  290.   LPWPUMODIFYIFSHANDLE = function (dwCatalogEntryId: DWORD; ProposedHandle: TSocket;
  291.     var lpErrno: Integer): TSocket; stdcall;
  292.   {$EXTERNALSYM LPWPUMODIFYIFSHANDLE}
  293.   TWpuMoifyIfsHandle = LPWPUMODIFYIFSHANDLE;
  294.   LPWPUPOSTMESSAGE = function (hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
  295.   {$EXTERNALSYM LPWPUPOSTMESSAGE}
  296.   TWpuPostMessage = LPWPUPOSTMESSAGE;
  297.   LPWPUQUERYBLOCKINGCALLBACK = function (dwCatalogEntryId: DWORD; var lplpfnCallback: LPBLOCKINGCALLBACK;
  298.     lpdwContext: LPDWORD; var lpErrno: Integer): Integer; stdcall;
  299.   {$EXTERNALSYM LPWPUQUERYBLOCKINGCALLBACK}
  300.   TWpuQueryBlockingCallback = LPWPUQUERYBLOCKINGCALLBACK;
  301.   LPWPUQUERYSOCKETHANDLECONTEXT = function (s: TSocket; lpContext: LPDWORD;
  302.     var lpErrno: Integer): Integer; stdcall;
  303.   {$EXTERNALSYM LPWPUQUERYSOCKETHANDLECONTEXT}
  304.   TWpuQuerySocketHandleContext = LPWPUQUERYSOCKETHANDLECONTEXT;
  305.   LPWPUQUEUEAPC = function (lpThreadId: LPWSATHREADID; lpfnUserApc: LPWSAUSERAPC;
  306.     dwContext: DWORD; var lpErrno: Integer): Integer; stdcall;
  307.   {$EXTERNALSYM LPWPUQUEUEAPC}
  308.   TWpuQueueApc = LPWPUQUEUEAPC;
  309.   LPWPURESETEVENT = function (hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  310.   {$EXTERNALSYM LPWPURESETEVENT}
  311.   TWpuResetEvent = LPWPURESETEVENT;
  312.   LPWPUSETEVENT = function (hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  313.   {$EXTERNALSYM LPWPUSETEVENT}
  314.   TWpuSetEvent = LPWPUSETEVENT;
  315.   LPWPUOPENCURRENTTHREAD = function (lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  316.   {$EXTERNALSYM LPWPUOPENCURRENTTHREAD}
  317.   TWpuOpenCurrentThread = LPWPUOPENCURRENTTHREAD;
  318.   LPWPUCLOSETHREAD = function (lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  319.   {$EXTERNALSYM LPWPUCLOSETHREAD}
  320.   TWpuCloseThread = LPWPUCLOSETHREAD;
  321. // Available only directly from ws2_32.dll
  322.   LPWPUCOMPLETEOVERLAPPEDREQUEST = function (s: TSocket; lpOverlapped: LPWSAOVERLAPPED;
  323.     dwError: DWORD; cbTransferred: DWORD; var lpErrno: Integer): Integer; stdcall;
  324.   {$EXTERNALSYM LPWPUCOMPLETEOVERLAPPEDREQUEST}
  325.   TWpuCompleteOverlappedRequest = LPWPUCOMPLETEOVERLAPPEDREQUEST;
  326. (*
  327.  * The upcall table. This structure is passed by value to the service
  328.  * provider's WSPStartup() entrypoint.
  329.  *)
  330.   _WSPUPCALLTABLE = record
  331.     lpWPUCloseEvent: LPWPUCLOSEEVENT;
  332.     lpWPUCloseSocketHandle: LPWPUCLOSESOCKETHANDLE;
  333.     lpWPUCreateEvent: LPWPUCREATEEVENT;
  334.     lpWPUCreateSocketHandle: LPWPUCREATESOCKETHANDLE;
  335.     lpWPUFDIsSet: LPWPUFDISSET;
  336.     lpWPUGetProviderPath: LPWPUGETPROVIDERPATH;
  337.     lpWPUModifyIFSHandle: LPWPUMODIFYIFSHANDLE;
  338.     lpWPUPostMessage: LPWPUPOSTMESSAGE;
  339.     lpWPUQueryBlockingCallback: LPWPUQUERYBLOCKINGCALLBACK;
  340.     lpWPUQuerySocketHandleContext: LPWPUQUERYSOCKETHANDLECONTEXT;
  341.     lpWPUQueueApc: LPWPUQUEUEAPC;
  342.     lpWPUResetEvent: LPWPURESETEVENT;
  343.     lpWPUSetEvent: LPWPUSETEVENT;
  344.     lpWPUOpenCurrentThread: LPWPUOPENCURRENTTHREAD;
  345.     lpWPUCloseThread: LPWPUCLOSETHREAD;
  346.   end;
  347.   {$EXTERNALSYM _WSPUPCALLTABLE}
  348.   WSPUPCALLTABLE = _WSPUPCALLTABLE;
  349.   {$EXTERNALSYM WSPUPCALLTABLE}
  350.   LPWSPUPCALLTABLE = ^WSPUPCALLTABLE;
  351.   {$EXTERNALSYM LPWSPUPCALLTABLE}
  352.   TWspUpCallTable = WSPUPCALLTABLE;
  353.   PWspUpCallTable = LPWSPUPCALLTABLE;  
  354. (*
  355.  *  WinSock 2 SPI socket function prototypes
  356.  *)
  357. //function WSPStartup(wVersionRequested: WORD; lpWSPData: LPWSPDATA;
  358. //  lpProtocolInfo: LPWSAPROTOCOL_INFOW; UpcallTable: WSPUPCALLTABLE;
  359. //  lpProcTable: LPWSPPROC_TABLE): Integer; stdcall;
  360. //{$EXTERNALSYM WSPStartup}
  361. type
  362.   LPWSPSTARTUP = function (wVersionRequested: WORD; lpWSPData: LPWSPDATA;
  363.     lpProtocolInfo: LPWSAPROTOCOL_INFOW; UpcallTable: WSPUPCALLTABLE;
  364.     lpProcTable: LPWSPPROC_TABLE): Integer; stdcall;
  365.   {$EXTERNALSYM LPWSPSTARTUP}
  366.   TWspStartUp = LPWSPSTARTUP;
  367. (*
  368.  * Installation and configuration entrypoints.
  369.  *)
  370. function WSCEnumProtocols(lpiProtocols: PINT; lpProtocolBuffer: LPWSAPROTOCOL_INFOW;
  371.   var lpdwBufferLength: DWORD; var lpErrno: Integer): Integer; stdcall;
  372. {$EXTERNALSYM WSCEnumProtocols}
  373. type
  374.   LPWSCENUMPROTOCOLS = function (lpiProtocols: PINT; lpProtocolBuffer: LPWSAPROTOCOL_INFOW;
  375.     var lpdwBufferLength: DWORD; var lpErrno: Integer): Integer; stdcall;
  376.   {$EXTERNALSYM LPWSCENUMPROTOCOLS}
  377.   TWscEnumProtocols = LPWSCENUMPROTOCOLS;
  378. {$IFDEF _WIN64}
  379. //
  380. // 64-bit architectures capable of running 32-bit code have
  381. // separate 64-bit and 32-bit catalogs.  API with '32' prefix
  382. // allow 32 bit catalog manipulations by 64 bit process.
  383. //
  384. function WSCEnumProtocols32(lpiProtocols: PINT; lpProtocolBuffer: LPWSAPROTOCOL_INFOW; lpdwBufferLength: LPDWORD; lpErrno: PINT): Integer; stdcall;
  385. {$EXTERNALSYM WSCEnumProtocols32}
  386. {$ENDIF _WIN64}
  387. function WSCDeinstallProvider(const lpProviderId: TGUID; var lpErrno: Integer): Integer; stdcall;
  388. {$EXTERNALSYM WSCDeinstallProvider}
  389. type
  390.   LPWSCDEINSTALLPROVIDER = function (const lpProviderId: TGUID; var lpErrno: Integer): Integer; stdcall;
  391.   {$EXTERNALSYM LPWSCDEINSTALLPROVIDER}
  392.   TWscDeinstallProvider = LPWSCDEINSTALLPROVIDER;
  393. {$IFDEF _WIN64}
  394. function WSCDeinstallProvider32(lpProviderId: PGUID; lpErrno: PINT): Integer; stdcall;
  395. {$EXTERNALSYM WSCDeinstallProvider32}
  396. {$ENDIF _WIN64}
  397. function WSCInstallProvider(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  398.   lpProtocolInfoList: LPWSAPROTOCOL_INFOW; dwNumberOfEntries: DWORD; var lpErrno: Integer): Integer; stdcall;
  399. {$EXTERNALSYM WSCInstallProvider}
  400. type
  401.   LPWSCINSTALLPROVIDER = function (const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  402.     lpProtocolInfoList: LPWSAPROTOCOL_INFOW; dwNumberOfEntries: DWORD; var lpErrno: Integer): Integer; stdcall;
  403.   {$EXTERNALSYM LPWSCINSTALLPROVIDER}
  404.   TWscInstallProvider = LPWSCINSTALLPROVIDER;
  405. {$IFDEF _WIN64}
  406. //
  407. // This API manipulates 64-bit and 32-bit catalogs simulteneously.
  408. // It is needed to guarantee the same catalog IDs for provider catalog
  409. // entries in both 64-bit and 32-bit catalogs.
  410. //
  411. function WSCInstallProvider64_32(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
  412.   dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
  413. {$EXTERNALSYM WSCInstallProvider64_32}
  414. {$ENDIF _WIN64}
  415. function WSCGetProviderPath(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  416.   var lpProviderDllPathLen, lpErrno: Integer): Integer; stdcall;
  417. {$EXTERNALSYM WSCGetProviderPath}
  418. type
  419.   LPWSCGETPROVIDERPATH = function (const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  420.   var lpProviderDllPathLen, lpErrno: Integer): Integer; stdcall;
  421.   {$EXTERNALSYM LPWSCGETPROVIDERPATH}
  422.   TWscGetProviderPath = LPWSCGETPROVIDERPATH;
  423. {$IFDEF _WIN64}
  424. function WSCGetProviderPath32(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProviderDllPathLen: PINT; lpErrno: PINT): Integer; stdcall;
  425. {$EXTERNALSYM WSCGetProviderPath32}
  426. {$ENDIF _WIN64}
  427. function WSCUpdateProvider(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
  428.   dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
  429. {$EXTERNALSYM WSCUpdateProvider}
  430. type
  431.   LPWSCUPDATEPROVIDER = function (lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
  432.     dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
  433.   {$EXTERNALSYM LPWSCUPDATEPROVIDER}
  434. {$IFDEF _WIN64}
  435. function WSCUpdateProvider32(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
  436.   dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
  437. {$EXTERNALSYM WSCUpdateProvider32}
  438. {$ENDIF _WIN64}
  439. function WSCInstallQOSTemplate(const Guid: TGUID; QosName: LPWSABUF; Qos: LPQOS): Integer; stdcall;
  440. {$EXTERNALSYM WSCInstallQOSTemplate}
  441. type
  442.   LPWSCINSTALLQOSTEMPLATE = function (const Guid: TGUID; QosName: LPWSABUF; Qos: LPQOS): Integer; stdcall;
  443.   {$EXTERNALSYM LPWSCINSTALLQOSTEMPLATE}
  444.   TWscInstallQosTemplate = LPWSCINSTALLQOSTEMPLATE;
  445. function WSCRemoveQOSTemplate(const Guid: TGUID; QosName: LPWSABUF): Integer; stdcall;
  446. {$EXTERNALSYM WSCRemoveQOSTemplate}
  447. type
  448.   LPWSCREMOVEQOSTEMPLATE = function (const Guid: TGUID; QosName: LPWSABUF): Integer; stdcall;
  449.   {$EXTERNALSYM LPWSCREMOVEQOSTEMPLATE}
  450.   TWscRemoveQosTemplate = LPWSCREMOVEQOSTEMPLATE;
  451. (*
  452.  *  The following upcall function prototypes are only used by WinSock 2 DLL and
  453.  *  should not be used by any service providers.
  454.  *
  455. function WPUCloseEvent(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  456. {$EXTERNALSYM WPUCloseEvent}
  457. function WPUCloseSocketHandle(s: TSocket; var lpErrno: Integer): Integer; stdcall;
  458. {$EXTERNALSYM WPUCloseSocketHandle}
  459. function WPUCreateEvent(var lpErrno: Integer): WSAEVENT; stdcall;
  460. {$EXTERNALSYM WPUCreateEvent}
  461. function WPUCreateSocketHandle(dwCatalogEntryId, dwContext: DWORD; var lpErrno: Integer): SOCKET; stdcall;
  462. {$EXTERNALSYM WPUCreateSocketHandle}
  463. function WPUFDIsSet(s: TSocket; const fdset: fd_set): Integer; stdcall;
  464. {$EXTERNALSYM WPUFDIsSet}
  465. function WPUGetProviderPath(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  466.   var lpProviderDllPathLen, lpErrno: : Integer): Integer; stdcall;
  467. {$EXTERNALSYM WPUGetProviderPath}
  468. function WPUModifyIFSHandle(dwCatalogEntryId: DWORD; ProposedHandle: SOCKET; var lpErrno: Integer): SOCKET; stdcall;
  469. {$EXTERNALSYM WPUModifyIFSHandle}
  470. function WPUPostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
  471. {$EXTERNALSYM WPUPostMessage}
  472. function WPUQueryBlockingCallback(dwCatalogEntryId: DWORD; var lplpfnCallback: LPBLOCKINGCALLBACK;
  473.   var lpdwContext: DWORD_PTR; var lpErrno: Integer): Integer; stdcall;
  474. {$EXTERNALSYM WPUQueryBlockingCallback}
  475. function WPUQuerySocketHandleContext(s: SOCKET; var lpContext: DWORD_PTR; lpErrno: Integer): Integer; stdcall;
  476. {$EXTERNALSYM WPUQuerySocketHandleContext}
  477. function WPUQueueApc(lpThreadId: LPWSATHREADID; lpfnUserApc: LPWSAUSERAPC;
  478.   dwContext: DWORD_PTR; var lpErrno: Integer): Integer; stdcall;
  479. {$EXTERNALSYM WPUQueueApc}
  480. function WPUResetEvent(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stcall;
  481. {$EXTERNALSYM WPUResetEvent}
  482. function WPUSetEvent(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  483. {$EXTERNALSYM WPUSetEvent}
  484. function WPUCompleteOverlappedRequest(s: SOCKET; lpOverlapped: LPWSAOVERLAPPED;
  485.   dwError, cbTransferred: DWORD; var lpErrno: Integer): Integerl stdcall;
  486. {$EXTERNALSYM WPUCompleteOverlappedRequest}
  487. function WPUOpenCurrentThread(lpThreadId: LPWSATHREADID; lpErrno: PINT): Integer; stdcall;
  488. {$EXTERNALSYM WPUOpenCurrentThread}
  489. function WPUCloseThread(lpThreadId: LPWSATHREADID; lpErrno: PINT): Integer; stdcall;
  490. {$EXTERNALSYM WPUCloseThread}
  491. *)
  492. (*
  493.  * Installing and uninstalling name space providers.
  494.  *)
  495. //
  496. // SPI and API for enumerating name space providers are
  497. // currently equivalent since there is no concept of a hidden
  498. // name space provider
  499. //
  500. //TODO
  501. //#define WSCEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
  502. //#define LPFN_WSCENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
  503. {$IFDEF _WIN64}
  504. function WSCEnumNameSpaceProviders32(lpdwBufferLength: LPDWORD; lpnspBuffer: LPWSANAMESPACE_INFOW): Integer; stdcall;
  505. {$EXTERNALSYM WSCEnumNameSpaceProviders32}
  506. {$ENDIF _WIN64}
  507. function WSCInstallNameSpace(lpszIdentifier, lpszPathName: LPWSTR; dwNameSpace,
  508.   dwVersion: DWORD; const lpProviderId: TGUID): Integer; stdcall;
  509. {$EXTERNALSYM WSCInstallNameSpace}
  510. type
  511.   LPWSCINSTALLNAMESPACE = function (lpszIdentifier, lpszPathName: LPWSTR;
  512.     dwNameSpace, dwVersion: DWORD; const lpProviderId: TGUID): Integer; stdcall;
  513.   {$EXTERNALSYM LPWSCINSTALLNAMESPACE}
  514.   TWscInstallNamespace = LPWSCINSTALLNAMESPACE;
  515. {$IFDEF _WIN64}
  516. function WSCInstallNameSpace32(lpszIdentifier, lpszPathName: LPWSTR; dwNameSpace, dwVersion: DWORD; lpProviderId: PGUID): Integer; stdcall;
  517. {$EXTERNALSYM WSCInstallNameSpace32}
  518. {$ENDIF _WIN64}
  519. function WSCUnInstallNameSpace(const lpProviderId: TGUID): Integer; stdcall;
  520. {$EXTERNALSYM WSCUnInstallNameSpace}
  521. type
  522.   LPWSCUNINSTALLNAMESPACE = function (const lpProviderId: TGUID): Integer; stdcall;
  523.   {$EXTERNALSYM LPWSCUNINSTALLNAMESPACE}
  524.   TWscUninstallNamespace = LPWSCUNINSTALLNAMESPACE;
  525. {$IFDEF _WIN64}
  526. function WSCUnInstallNameSpace32(lpProviderId: PGUID): Integer; stdcall;
  527. {$EXTERNALSYM WSCUnInstallNameSpace32}
  528. {$ENDIF _WIN64}
  529. function WSCEnableNSProvider(const lpProviderId: TGUID; fEnable: BOOL): Integer; stdcall;
  530. {$EXTERNALSYM WSCEnableNSProvider}
  531. type
  532.   LPWSCENABLENSPROVIDER = function (const lpProviderId: TGUID; fEnable: BOOL): Integer; stdcall;
  533.   {$EXTERNALSYM LPWSCENABLENSPROVIDER}
  534.   TWscEnableNsProvider = LPWSCENABLENSPROVIDER;
  535. {$IFDEF _WIN64}
  536. function WSCEnableNSProvider32(lpProviderId: PGUID; fEnable: BOOL): Integer; stdcall;
  537. {$EXTERNALSYM WSCEnableNSProvider32}
  538. {$ENDIF _WIN64}
  539. (*
  540.  * Pointers to the individual entries in the namespace proc table.
  541.  *)
  542. type
  543.   LPNSPCLEANUP = function (const lpProviderId: TGUID): Integer; stdcall;
  544.   {$EXTERNALSYM LPNSPCLEANUP}
  545.   TNspCleanup = LPNSPCLEANUP;
  546.   LPNSPLOOKUPSERVICEBEGIN = function (const lpProviderId: TGUID;
  547.     lpqsRestrictions: LPWSAQUERYSETW; lpServiceClassInfo: LPWSASERVICECLASSINFOW;
  548.     dwControlFlags: DWORD; lphLookup: LPHANDLE): Integer; stdcall;
  549.   {$EXTERNALSYM LPNSPLOOKUPSERVICEBEGIN}
  550.   TNspLookupServiceBegin = LPNSPLOOKUPSERVICEBEGIN;
  551.   LPNSPLOOKUPSERVICENEXT = function (hLookup: HANDLE; dwControlFlags: DWORD;
  552.     lpdwBufferLength: LPDWORD; lpqsResults: LPWSAQUERYSETW): Integer; stdcall;
  553.   {$EXTERNALSYM LPNSPLOOKUPSERVICENEXT}
  554.   TNspLookupServiceNext = LPNSPLOOKUPSERVICENEXT;
  555.   LPNSPIOCTL = function (hLookup: HANDLE; dwControlCode: DWORD; lpvInBuffer: LPVOID;
  556.     cbInBuffer: DWORD; lpvOutBuffer: LPVOID; cbOutBuffer: DWORD; lpcbBytesReturned: LPDWORD;
  557.     lpCompletion: LPWSACOMPLETION; lpThreadId: LPWSATHREADID): Integer; stdcall;
  558.   {$EXTERNALSYM LPNSPIOCTL}
  559.   LPNSPLOOKUPSERVICEEND = function (hLookup: HANDLE): Integer; stdcall;
  560.   {$EXTERNALSYM LPNSPLOOKUPSERVICEEND}
  561.   TNspLookupServiceEnd = LPNSPLOOKUPSERVICEEND;
  562.   LPNSPSETSERVICE = function (const lpProviderId: TGUID;
  563.     lpServiceClassInfo: LPWSASERVICECLASSINFOW; lpqsRegInfo: LPWSAQUERYSETW;
  564.     essOperation: WSAESETSERVICEOP; dwControlFlags: DWORD): Integer; stdcall;
  565.   {$EXTERNALSYM LPNSPSETSERVICE}
  566.   TNspSetService = LPNSPSETSERVICE;
  567.   LPNSPINSTALLSERVICECLASS = function (const lpProviderId: TGUID;
  568.     lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
  569.   {$EXTERNALSYM LPNSPINSTALLSERVICECLASS}
  570.   TNspInstallServiceClass = LPNSPINSTALLSERVICECLASS;
  571.   LPNSPREMOVESERVICECLASS = function (const lpProviderId, lpServiceClassId: TGUID): Integer; stdcall;
  572.   {$EXTERNALSYM LPNSPREMOVESERVICECLASS}
  573.   TNspRemoveServiceClass = LPNSPREMOVESERVICECLASS;
  574.   LPNSPGETSERVICECLASSINFO = function (const lpProviderId: TGUID; lpdwBufSize: LPDWORD;
  575.     lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
  576.   {$EXTERNALSYM LPNSPGETSERVICECLASSINFO}
  577.   TNspGetServiceClassInfo = LPNSPGETSERVICECLASSINFO;
  578. (*
  579.  * The name space service provider procedure table.
  580.  *)
  581. type
  582.   _NSP_ROUTINE = record
  583.     (* Structure version information: *)
  584.     cbSize: DWORD;
  585.     dwMajorVersion: DWORD;
  586.     dwMinorVersion: DWORD;
  587.     (* Procedure-pointer table: *)
  588.     NSPCleanup: LPNSPCLEANUP;
  589.     NSPLookupServiceBegin: LPNSPLOOKUPSERVICEBEGIN;
  590.     NSPLookupServiceNext: LPNSPLOOKUPSERVICENEXT;
  591.     NSPLookupServiceEnd: LPNSPLOOKUPSERVICEEND;
  592.     NSPSetService: LPNSPSETSERVICE;
  593.     NSPInstallServiceClass: LPNSPINSTALLSERVICECLASS;
  594.     NSPRemoveServiceClass: LPNSPREMOVESERVICECLASS;
  595.     NSPGetServiceClassInfo: LPNSPGETSERVICECLASSINFO;
  596.     // These APIs were added later, so must appear here
  597.     // to keep the pointers in the structure in order.
  598.     // Namespaces unaware of these APIs will set cbSize
  599.     // to match the size of FIELD_OFFSET(NSP_ROUTINE, NSPIoctl).
  600.     NSPIoctl: LPNSPIOCTL;
  601.   end;
  602.   {$EXTERNALSYM _NSP_ROUTINE}
  603.   NSP_ROUTINE = _NSP_ROUTINE;
  604.   {$EXTERNALSYM NSP_ROUTINE}
  605.   LPNSP_ROUTINE = ^NSP_ROUTINE;
  606.   {$EXTERNALSYM LPNSP_ROUTINE}
  607.   TNspRoutines = NSP_ROUTINE;
  608.   PNspRoutines = LPNSP_ROUTINE;
  609. (*
  610.  * Startup procedures.
  611.  *)
  612. //function NSPStartup(const lpProviderId: TGUID; lpnspRoutines:  LPNSP_ROUTINE): Integer; stdcall;
  613. //{$EXTERNALSYM NSPStartup}
  614. type
  615.   LPNSPSTARTUP = function (const lpProviderId: TGUID; lpnspRoutines:  LPNSP_ROUTINE): Integer; stdcall;
  616.   {$EXTERNALSYM LPNSPSTARTUP}
  617.   TNspStartup = LPNSPSTARTUP;
  618. implementation
  619. const
  620.   ws2_32 = 'ws2_32.dll';
  621.   qosname = 'qosname.dll';
  622. {$IFDEF DYNAMIC_LINK}
  623. var
  624.   _WSCEnumProtocols: Pointer;
  625. function WSCEnumProtocols;
  626. begin
  627.   GetProcedureAddress(_WSCEnumProtocols, ws2_32, 'WSCEnumProtocols');
  628.   asm
  629.     mov esp, ebp
  630.     pop ebp
  631.     jmp [_WSCEnumProtocols]
  632.   end;
  633. end;
  634. {$ELSE}
  635. function WSCEnumProtocols; external ws2_32 name 'WSCEnumProtocols';
  636. {$ENDIF DYNAMIC_LINK}
  637. {$IFDEF _WIN64}
  638. {$IFDEF DYNAMIC_LINK}
  639. var
  640.   _WSCEnumProtocols32: Pointer;
  641. function WSCEnumProtocols32;
  642. begin
  643.   GetProcedureAddress(_WSCEnumProtocols32, ws2_32, 'WSCEnumProtocols32');
  644.   asm
  645.     mov esp, ebp
  646.     pop ebp
  647.     jmp [_WSCEnumProtocols32]
  648.   end;
  649. end;
  650. {$ELSE}
  651. function WSCEnumProtocols32; external ws2_32 name 'WSCEnumProtocols32';
  652. {$ENDIF DYNAMIC_LINK}
  653. {$ENDIF}
  654. {$IFDEF DYNAMIC_LINK}
  655. var
  656.   _WSCDeinstallProvider: Pointer;
  657. function WSCDeinstallProvider;
  658. begin
  659.   GetProcedureAddress(_WSCDeinstallProvider, ws2_32, 'WSCDeinstallProvider');
  660.   asm
  661.     mov esp, ebp
  662.     pop ebp
  663.     jmp [_WSCDeinstallProvider]
  664.   end;
  665. end;
  666. {$ELSE}
  667. function WSCDeinstallProvider; external ws2_32 name 'WSCDeinstallProvider';
  668. {$ENDIF DYNAMIC_LINK}
  669. {$IFDEF _WIN64}
  670. {$IFDEF DYNAMIC_LINK}
  671. var
  672.   _WSCDeinstallProvider32: Pointer;
  673. function WSCDeinstallProvider32;
  674. begin
  675.   GetProcedureAddress(_WSCDeinstallProvider32, ws2_32, 'WSCDeinstallProvider32');
  676.   asm
  677.     mov esp, ebp
  678.     pop ebp
  679.     jmp [_WSCDeinstallProvider32]
  680.   end;
  681. end;
  682. {$ELSE}
  683. function WSCDeinstallProvider32; external ws2_32 name 'WSCDeinstallProvider32';
  684. {$ENDIF DYNAMIC_LINK}
  685. {$ENDIF _WIN64}
  686. {$IFDEF DYNAMIC_LINK}
  687. var
  688.   _WSCInstallProvider: Pointer;
  689. function WSCInstallProvider;
  690. begin
  691.   GetProcedureAddress(_WSCInstallProvider, ws2_32, 'WSCInstallProvider');
  692.   asm
  693.     mov esp, ebp
  694.     pop ebp
  695.     jmp [_WSCInstallProvider]
  696.   end;
  697. end;
  698. {$ELSE}
  699. function WSCInstallProvider; external ws2_32 name 'WSCInstallProvider';
  700. {$ENDIF DYNAMIC_LINK}
  701. {$IFDEF _WIN64}
  702. {$IFDEF DYNAMIC_LINK}
  703. var
  704.   _WSCInstallProvider64_32: Pointer;
  705. function WSCInstallProvider64_32;
  706. begin
  707.   GetProcedureAddress(_WSCInstallProvider64_32, ws2_32, 'WSCInstallProvider64_32');
  708.   asm
  709.     mov esp, ebp
  710.     pop ebp
  711.     jmp [_WSCInstallProvider64_32]
  712.   end;
  713. end;
  714. {$ELSE}
  715. function WSCInstallProvider64_32; external ws2_32 name 'WSCInstallProvider64_32';
  716. {$ENDIF DYNAMIC_LINK}
  717. {$ENDIF _WIN64}
  718. {$IFDEF DYNAMIC_LINK}
  719. var
  720.   _WSCGetProviderPath: Pointer;
  721. function WSCGetProviderPath;
  722. begin
  723.   GetProcedureAddress(_WSCGetProviderPath, ws2_32, 'WSCGetProviderPath');
  724.   asm
  725.     mov esp, ebp
  726.     pop ebp
  727.     jmp [_WSCGetProviderPath]
  728.   end;
  729. end;
  730. {$ELSE}
  731. function WSCGetProviderPath; external ws2_32 name 'WSCGetProviderPath';
  732. {$ENDIF DYNAMIC_LINK}
  733. {$IFDEF _WIN64}
  734. {$IFDEF DYNAMIC_LINK}
  735. var
  736.   _WSCGetProviderPath32: Pointer;
  737. function WSCGetProviderPath32;
  738. begin
  739.   GetProcedureAddress(_WSCGetProviderPath32, ws2_32, 'WSCGetProviderPath32');
  740.   asm
  741.     mov esp, ebp
  742.     pop ebp
  743.     jmp [_WSCGetProviderPath32]
  744.   end;
  745. end;
  746. {$ELSE}
  747. function WSCGetProviderPath32; external ws2_32 name 'WSCGetProviderPath32';
  748. {$ENDIF DYNAMIC_LINK}
  749. {$ENDIF _WIN64}
  750. {$IFDEF DYNAMIC_LINK}
  751. var
  752.   _WSCUpdateProvider: Pointer;
  753. function WSCUpdateProvider;
  754. begin
  755.   GetProcedureAddress(_WSCUpdateProvider, ws2_32, 'WSCUpdateProvider');
  756.   asm
  757.     mov esp, ebp
  758.     pop ebp
  759.     jmp [_WSCUpdateProvider]
  760.   end;
  761. end;
  762. {$ELSE}
  763. function WSCUpdateProvider; external ws2_32 name 'WSCUpdateProvider';
  764. {$ENDIF DYNAMIC_LINK}
  765. {$IFDEF _WIN64}
  766. {$IFDEF DYNAMIC_LINK}
  767. var
  768.   _WSCUpdateProvider32: Pointer;
  769. function WSCUpdateProvider32;
  770. begin
  771.   GetProcedureAddress(_WSCUpdateProvider32, ws2_32, 'WSCUpdateProvider32');
  772.   asm
  773.     mov esp, ebp
  774.     pop ebp
  775.     jmp [_WSCUpdateProvider32]
  776.   end;
  777. end;
  778. {$ELSE}
  779. function WSCUpdateProvider32; external ws2_32 name 'WSCUpdateProvider32';
  780. {$ENDIF DYNAMIC_LINK}
  781. {$ENDIF _WIN64}
  782. {$IFDEF DYNAMIC_LINK}
  783. var
  784.   _WSCInstallQOSTemplate: Pointer;
  785. function WSCInstallQOSTemplate;
  786. begin
  787.   GetProcedureAddress(_WSCInstallQOSTemplate, JwaWs2spi.qosname, 'WSCInstallQOSTemplate');
  788.   asm
  789.     mov esp, ebp
  790.     pop ebp
  791.     jmp [_WSCInstallQOSTemplate]
  792.   end;
  793. end;
  794. {$ELSE}
  795. function WSCInstallQOSTemplate; external qosname name 'WSCInstallQOSTemplate';
  796. {$ENDIF DYNAMIC_LINK}
  797. {$IFDEF DYNAMIC_LINK}
  798. var
  799.   _WSCRemoveQOSTemplate: Pointer;
  800. function WSCRemoveQOSTemplate;
  801. begin
  802.   GetProcedureAddress(_WSCRemoveQOSTemplate, JwaWs2spi.qosname, 'WSCRemoveQOSTemplate');
  803.   asm
  804.     mov esp, ebp
  805.     pop ebp
  806.     jmp [_WSCRemoveQOSTemplate]
  807.   end;
  808. end;
  809. {$ELSE}
  810. function WSCRemoveQOSTemplate; external qosname name 'WSCRemoveQOSTemplate';
  811. {$ENDIF DYNAMIC_LINK}
  812. {$IFDEF _WIN64}
  813. {$IFDEF DYNAMIC_LINK}
  814. var
  815.   _WSCEnumNameSpaceProviders32: Pointer;
  816. function WSCEnumNameSpaceProviders32;
  817. begin
  818.   GetProcedureAddress(_WSCEnumNameSpaceProviders32, ws2_32, 'WSCEnumNameSpaceProviders32');
  819.   asm
  820.     mov esp, ebp
  821.     pop ebp
  822.     jmp [_WSCEnumNameSpaceProviders32]
  823.   end;
  824. end;
  825. {$ELSE}
  826. function WSCEnumNameSpaceProviders32; external ws2_32 name 'WSCEnumNameSpaceProviders32';
  827. {$ENDIF DYNAMIC_LINK}
  828. {$ENDIF _WIN64}
  829. {$IFDEF DYNAMIC_LINK}
  830. var
  831.   _WSCInstallNameSpace: Pointer;
  832. function WSCInstallNameSpace;
  833. begin
  834.   GetProcedureAddress(_WSCInstallNameSpace, ws2_32, 'WSCInstallNameSpace');
  835.   asm
  836.     mov esp, ebp
  837.     pop ebp
  838.     jmp [_WSCInstallNameSpace]
  839.   end;
  840. end;
  841. {$ELSE}
  842. function WSCInstallNameSpace; external ws2_32 name 'WSCInstallNameSpace';
  843. {$ENDIF DYNAMIC_LINK}
  844. {$IFDEF _WIN64}
  845. {$IFDEF DYNAMIC_LINK}
  846. var
  847.   _WSCInstallNameSpace32: Pointer;
  848. function WSCInstallNameSpace32;
  849. begin
  850.   GetProcedureAddress(_WSCInstallNameSpace32, ws2_32, 'WSCInstallNameSpace32');
  851.   asm
  852.     mov esp, ebp
  853.     pop ebp
  854.     jmp [_WSCInstallNameSpace32]
  855.   end;
  856. end;
  857. {$ELSE}
  858. function WSCInstallNameSpace32; external ws2_32 name 'WSCInstallNameSpace32';
  859. {$ENDIF DYNAMIC_LINK}
  860. {$ENDIF _WIN64}
  861. {$IFDEF DYNAMIC_LINK}
  862. var
  863.   _WSCUnInstallNameSpace: Pointer;
  864. function WSCUnInstallNameSpace;
  865. begin
  866.   GetProcedureAddress(_WSCUnInstallNameSpace, ws2_32, 'WSCUnInstallNameSpace');
  867.   asm
  868.     mov esp, ebp
  869.     pop ebp
  870.     jmp [_WSCUnInstallNameSpace]
  871.   end;
  872. end;
  873. {$ELSE}
  874. function WSCUnInstallNameSpace; external ws2_32 name 'WSCUnInstallNameSpace';
  875. {$ENDIF DYNAMIC_LINK}
  876. {$IFDEF _WIN64}
  877. {$IFDEF DYNAMIC_LINK}
  878. var
  879.   _WSCUnInstallNameSpace32: Pointer;
  880. function WSCUnInstallNameSpace32;
  881. begin
  882.   GetProcedureAddress(_WSCUnInstallNameSpace32, ws2_32, 'WSCUnInstallNameSpace32');
  883.   asm
  884.     mov esp, ebp
  885.     pop ebp
  886.     jmp [_WSCUnInstallNameSpace32]
  887.   end;
  888. end;
  889. {$ELSE}
  890. function WSCUnInstallNameSpace32; external ws2_32 name 'WSCUnInstallNameSpace32';
  891. {$ENDIF DYNAMIC_LINK}
  892. {$ENDIF _WIN64}
  893. {$IFDEF DYNAMIC_LINK}
  894. var
  895.   _WSCEnableNSProvider: Pointer;
  896. function WSCEnableNSProvider;
  897. begin
  898.   GetProcedureAddress(_WSCEnableNSProvider, ws2_32, 'WSCEnableNSProvider');
  899.   asm
  900.     mov esp, ebp
  901.     pop ebp
  902.     jmp [_WSCEnableNSProvider]
  903.   end;
  904. end;
  905. {$ELSE}
  906. function WSCEnableNSProvider; external ws2_32 name 'WSCEnableNSProvider';
  907. {$ENDIF DYNAMIC_LINK}
  908. {$IFDEF _WIN64}
  909. {$IFDEF DYNAMIC_LINK}
  910. var
  911.   _WSCEnableNSProvider32: Pointer;
  912. function WSCEnableNSProvider32;
  913. begin
  914.   GetProcedureAddress(_WSCEnableNSProvider32, ws2_32, 'WSCEnableNSProvider32');
  915.   asm
  916.     mov esp, ebp
  917.     pop ebp
  918.     jmp [_WSCEnableNSProvider32]
  919.   end;
  920. end;
  921. {$ELSE}
  922. function WSCEnableNSProvider32; external ws2_32 name 'WSCEnableNSProvider32';
  923. {$ENDIF DYNAMIC_LINK}
  924. {$ENDIF _WIN64}
  925. end.