jwaws2spi.pas 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094
  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 att chello dott 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 }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  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 }
  24. { }
  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. }
  28. { }
  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. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. // $Id: JwaWS2spi.pas,v 1.9 2005/09/06 16:36:50 marquardt Exp $
  43. unit JwaWS2spi;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "ws2spi.h"'}
  47. {$HPPEMIT ''}
  48. {$I jediapilib.inc}
  49. interface
  50. uses
  51. JwaWindows, JwaWinSock2;
  52. (*
  53. * Ensure structures are packed consistently.
  54. *)
  55. {$IFDEF _WIN64}
  56. {$ALIGN OFF}
  57. {$ELSE}
  58. {$ALIGN ON}
  59. {$ENDIF _WIN64}
  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. uses
  620. JwaWinDLLNames;
  621. {$IFDEF DYNAMIC_LINK}
  622. var
  623. _WSCEnumProtocols: Pointer;
  624. function WSCEnumProtocols;
  625. begin
  626. GetProcedureAddress(_WSCEnumProtocols, ws2_32, 'WSCEnumProtocols');
  627. asm
  628. MOV ESP, EBP
  629. POP EBP
  630. JMP [_WSCEnumProtocols]
  631. end;
  632. end;
  633. {$IFDEF _WIN64}
  634. var
  635. _WSCEnumProtocols32: Pointer;
  636. function WSCEnumProtocols32;
  637. begin
  638. GetProcedureAddress(_WSCEnumProtocols32, ws2_32, 'WSCEnumProtocols32');
  639. asm
  640. MOV ESP, EBP
  641. POP EBP
  642. JMP [_WSCEnumProtocols32]
  643. end;
  644. end;
  645. {$ENDIF _WIN64}
  646. var
  647. _WSCDeinstallProvider: Pointer;
  648. function WSCDeinstallProvider;
  649. begin
  650. GetProcedureAddress(_WSCDeinstallProvider, ws2_32, 'WSCDeinstallProvider');
  651. asm
  652. MOV ESP, EBP
  653. POP EBP
  654. JMP [_WSCDeinstallProvider]
  655. end;
  656. end;
  657. {$IFDEF _WIN64}
  658. var
  659. _WSCDeinstallProvider32: Pointer;
  660. function WSCDeinstallProvider32;
  661. begin
  662. GetProcedureAddress(_WSCDeinstallProvider32, ws2_32, 'WSCDeinstallProvider32');
  663. asm
  664. MOV ESP, EBP
  665. POP EBP
  666. JMP [_WSCDeinstallProvider32]
  667. end;
  668. end;
  669. {$ENDIF _WIN64}
  670. var
  671. _WSCInstallProvider: Pointer;
  672. function WSCInstallProvider;
  673. begin
  674. GetProcedureAddress(_WSCInstallProvider, ws2_32, 'WSCInstallProvider');
  675. asm
  676. MOV ESP, EBP
  677. POP EBP
  678. JMP [_WSCInstallProvider]
  679. end;
  680. end;
  681. {$IFDEF _WIN64}
  682. var
  683. _WSCInstallProvider64_32: Pointer;
  684. function WSCInstallProvider64_32;
  685. begin
  686. GetProcedureAddress(_WSCInstallProvider64_32, ws2_32, 'WSCInstallProvider64_32');
  687. asm
  688. MOV ESP, EBP
  689. POP EBP
  690. JMP [_WSCInstallProvider64_32]
  691. end;
  692. end;
  693. {$ENDIF _WIN64}
  694. var
  695. _WSCGetProviderPath: Pointer;
  696. function WSCGetProviderPath;
  697. begin
  698. GetProcedureAddress(_WSCGetProviderPath, ws2_32, 'WSCGetProviderPath');
  699. asm
  700. MOV ESP, EBP
  701. POP EBP
  702. JMP [_WSCGetProviderPath]
  703. end;
  704. end;
  705. {$IFDEF _WIN64}
  706. var
  707. _WSCGetProviderPath32: Pointer;
  708. function WSCGetProviderPath32;
  709. begin
  710. GetProcedureAddress(_WSCGetProviderPath32, ws2_32, 'WSCGetProviderPath32');
  711. asm
  712. MOV ESP, EBP
  713. POP EBP
  714. JMP [_WSCGetProviderPath32]
  715. end;
  716. end;
  717. {$ENDIF _WIN64}
  718. var
  719. _WSCUpdateProvider: Pointer;
  720. function WSCUpdateProvider;
  721. begin
  722. GetProcedureAddress(_WSCUpdateProvider, ws2_32, 'WSCUpdateProvider');
  723. asm
  724. MOV ESP, EBP
  725. POP EBP
  726. JMP [_WSCUpdateProvider]
  727. end;
  728. end;
  729. {$IFDEF _WIN64}
  730. var
  731. _WSCUpdateProvider32: Pointer;
  732. function WSCUpdateProvider32;
  733. begin
  734. GetProcedureAddress(_WSCUpdateProvider32, ws2_32, 'WSCUpdateProvider32');
  735. asm
  736. MOV ESP, EBP
  737. POP EBP
  738. JMP [_WSCUpdateProvider32]
  739. end;
  740. end;
  741. {$ENDIF _WIN64}
  742. var
  743. _WSCInstallQOSTemplate: Pointer;
  744. function WSCInstallQOSTemplate;
  745. begin
  746. GetProcedureAddress(_WSCInstallQOSTemplate, JwaWs2spi.qosname, 'WSCInstallQOSTemplate');
  747. asm
  748. MOV ESP, EBP
  749. POP EBP
  750. JMP [_WSCInstallQOSTemplate]
  751. end;
  752. end;
  753. var
  754. _WSCRemoveQOSTemplate: Pointer;
  755. function WSCRemoveQOSTemplate;
  756. begin
  757. GetProcedureAddress(_WSCRemoveQOSTemplate, JwaWs2spi.qosname, 'WSCRemoveQOSTemplate');
  758. asm
  759. MOV ESP, EBP
  760. POP EBP
  761. JMP [_WSCRemoveQOSTemplate]
  762. end;
  763. end;
  764. {$IFDEF _WIN64}
  765. var
  766. _WSCEnumNameSpaceProviders32: Pointer;
  767. function WSCEnumNameSpaceProviders32;
  768. begin
  769. GetProcedureAddress(_WSCEnumNameSpaceProviders32, ws2_32, 'WSCEnumNameSpaceProviders32');
  770. asm
  771. MOV ESP, EBP
  772. POP EBP
  773. JMP [_WSCEnumNameSpaceProviders32]
  774. end;
  775. end;
  776. {$ENDIF _WIN64}
  777. var
  778. _WSCInstallNameSpace: Pointer;
  779. function WSCInstallNameSpace;
  780. begin
  781. GetProcedureAddress(_WSCInstallNameSpace, ws2_32, 'WSCInstallNameSpace');
  782. asm
  783. MOV ESP, EBP
  784. POP EBP
  785. JMP [_WSCInstallNameSpace]
  786. end;
  787. end;
  788. {$IFDEF _WIN64}
  789. var
  790. _WSCInstallNameSpace32: Pointer;
  791. function WSCInstallNameSpace32;
  792. begin
  793. GetProcedureAddress(_WSCInstallNameSpace32, ws2_32, 'WSCInstallNameSpace32');
  794. asm
  795. MOV ESP, EBP
  796. POP EBP
  797. JMP [_WSCInstallNameSpace32]
  798. end;
  799. end;
  800. {$ENDIF _WIN64}
  801. var
  802. _WSCUnInstallNameSpace: Pointer;
  803. function WSCUnInstallNameSpace;
  804. begin
  805. GetProcedureAddress(_WSCUnInstallNameSpace, ws2_32, 'WSCUnInstallNameSpace');
  806. asm
  807. MOV ESP, EBP
  808. POP EBP
  809. JMP [_WSCUnInstallNameSpace]
  810. end;
  811. end;
  812. {$IFDEF _WIN64}
  813. var
  814. _WSCUnInstallNameSpace32: Pointer;
  815. function WSCUnInstallNameSpace32;
  816. begin
  817. GetProcedureAddress(_WSCUnInstallNameSpace32, ws2_32, 'WSCUnInstallNameSpace32');
  818. asm
  819. MOV ESP, EBP
  820. POP EBP
  821. JMP [_WSCUnInstallNameSpace32]
  822. end;
  823. end;
  824. {$ENDIF _WIN64}
  825. var
  826. _WSCEnableNSProvider: Pointer;
  827. function WSCEnableNSProvider;
  828. begin
  829. GetProcedureAddress(_WSCEnableNSProvider, ws2_32, 'WSCEnableNSProvider');
  830. asm
  831. MOV ESP, EBP
  832. POP EBP
  833. JMP [_WSCEnableNSProvider]
  834. end;
  835. end;
  836. {$IFDEF _WIN64}
  837. var
  838. _WSCEnableNSProvider32: Pointer;
  839. function WSCEnableNSProvider32;
  840. begin
  841. GetProcedureAddress(_WSCEnableNSProvider32, ws2_32, 'WSCEnableNSProvider32');
  842. asm
  843. MOV ESP, EBP
  844. POP EBP
  845. JMP [_WSCEnableNSProvider32]
  846. end;
  847. end;
  848. {$ENDIF _WIN64}
  849. {$ELSE}
  850. function WSCEnumProtocols; external ws2_32 name 'WSCEnumProtocols';
  851. function WSCDeinstallProvider; external ws2_32 name 'WSCDeinstallProvider';
  852. function WSCInstallProvider; external ws2_32 name 'WSCInstallProvider';
  853. function WSCGetProviderPath; external ws2_32 name 'WSCGetProviderPath';
  854. function WSCUpdateProvider; external ws2_32 name 'WSCUpdateProvider';
  855. function WSCInstallQOSTemplate; external qosname name 'WSCInstallQOSTemplate';
  856. function WSCRemoveQOSTemplate; external qosname name 'WSCRemoveQOSTemplate';
  857. function WSCInstallNameSpace; external ws2_32 name 'WSCInstallNameSpace';
  858. function WSCUnInstallNameSpace; external ws2_32 name 'WSCUnInstallNameSpace';
  859. function WSCEnableNSProvider; external ws2_32 name 'WSCEnableNSProvider';
  860. {$IFDEF _WIN64}
  861. function WSCEnumProtocols32; external ws2_32 name 'WSCEnumProtocols32';
  862. function WSCDeinstallProvider32; external ws2_32 name 'WSCDeinstallProvider32';
  863. function WSCInstallProvider64_32; external ws2_32 name 'WSCInstallProvider64_32';
  864. function WSCGetProviderPath32; external ws2_32 name 'WSCGetProviderPath32';
  865. function WSCUpdateProvider32; external ws2_32 name 'WSCUpdateProvider32';
  866. function WSCEnumNameSpaceProviders32; external ws2_32 name 'WSCEnumNameSpaceProviders32';
  867. function WSCInstallNameSpace32; external ws2_32 name 'WSCInstallNameSpace32';
  868. function WSCUnInstallNameSpace32; external ws2_32 name 'WSCUnInstallNameSpace32';
  869. function WSCEnableNSProvider32; external ws2_32 name 'WSCEnableNSProvider32';
  870. {$ENDIF _WIN64}
  871. {$ENDIF DYNAMIC_LINK}
  872. end.