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. unit JwaWS2spi;
  43. {$WEAKPACKAGEUNIT}
  44. {$HPPEMIT ''}
  45. {$HPPEMIT '#include "ws2spi.h"'}
  46. {$HPPEMIT ''}
  47. {$I jediapilib.inc}
  48. interface
  49. uses
  50. JwaWinType, JwaWinSock2;
  51. (*
  52. * Ensure structures are packed consistently.
  53. *)
  54. {$IFDEF _WIN64}
  55. {$ALIGN OFF}
  56. {$ELSE}
  57. {$ALIGN ON}
  58. {$ENDIF _WIN64}
  59. const
  60. WSPDESCRIPTION_LEN = 255;
  61. {$EXTERNALSYM WSPDESCRIPTION_LEN}
  62. WSS_OPERATION_IN_PROGRESS = $00000103;
  63. {$EXTERNALSYM WSS_OPERATION_IN_PROGRESS}
  64. type
  65. WSPData = record
  66. wVersion: WORD;
  67. wHighVersion: WORD;
  68. szDescription: array [0..WSPDESCRIPTION_LEN] of WCHAR;
  69. end;
  70. {$EXTERNALSYM WSPData}
  71. LPWSPDATA = ^WSPData;
  72. {$EXTERNALSYM LPWSPDATA}
  73. TWSPData = WSPDATA;
  74. PWSPData = LPWSPDATA;
  75. _WSATHREADID = record
  76. ThreadHandle: HANDLE;
  77. Reserved: DWORD;
  78. end;
  79. {$EXTERNALSYM _WSATHREADID}
  80. WSATHREADID = _WSATHREADID;
  81. {$EXTERNALSYM WSATHREADID}
  82. LPWSATHREADID = ^WSATHREADID;
  83. {$EXTERNALSYM LPWSATHREADID}
  84. TWSAThreadID = WSATHREADID;
  85. PWSAThreadID = LPWSATHREADID;
  86. (*
  87. * Pointer to a blocking callback. A pointer to a blocking callback is
  88. * returned from the WPUQueryBlockingCallback() upcall. Note that this
  89. * function's signature is not identical to an application's blocking
  90. * hook function.
  91. *)
  92. type
  93. LPBLOCKINGCALLBACK = function(dwContext: DWORD): BOOL; stdcall;
  94. {$EXTERNALSYM LPBLOCKINGCALLBACK}
  95. TBlockingCallback = LPBLOCKINGCALLBACK;
  96. (*
  97. * Pointer to a user APC function. This is used as a parameter to the
  98. * WPUQueueUserApc() upcall. Note that this function's signature is not
  99. * identical to an application's completion routine.
  100. *)
  101. LPWSAUSERAPC = procedure(dwContext: DWORD); stdcall;
  102. {$EXTERNALSYM LPWSAUSERAPC}
  103. TWsaUserApc = LPWSAUSERAPC;
  104. (*
  105. * Pointers to the individual entries in a service provider's proc table.
  106. *)
  107. LPWSPACCEPT = function(s: TSocket; addr: PSockAddr; addrlen: PINT;
  108. lpfnCondition: LPCONDITIONPROC; dwCallbackData: DWORD; var Errno: Integer): TSocket; stdcall;
  109. {$EXTERNALSYM LPWSPACCEPT}
  110. TWspAccept = LPWSPACCEPT;
  111. LPWSPADDRESSTOSTRING = function(lpsaAddress: LPSOCKADDR; dwAddressLength: DWORD;
  112. lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpszAddressString: LPWSTR;
  113. var lpdwAddressStringLength: DWORD; var lpErrno: Integer): Integer; stdcall;
  114. {$EXTERNALSYM LPWSPADDRESSTOSTRING}
  115. TWspAddressToString = LPWSPADDRESSTOSTRING;
  116. LPWSPASYNCSELECT = function(s: TSocket; hWnd: HWND; wMsg: u_int; lEvent: Longint; var lpErrno: Integer): Integer; stdcall;
  117. {$EXTERNALSYM LPWSPASYNCSELECT}
  118. TWspASyncSelect = LPWSPASYNCSELECT;
  119. LPWSPBIND = function(s: TSocket; var name: sockaddr; namelen: Integer; var lpErrno: Integer): Integer; stdcall;
  120. {$EXTERNALSYM LPWSPBIND}
  121. TWspBind = LPWSPBIND;
  122. LPWSPCANCELBLOCKINGCALL = function(var lpErrno: Integer): Integer; stdcall;
  123. {$EXTERNALSYM LPWSPCANCELBLOCKINGCALL}
  124. TWspCancelBlockingCall = LPWSPCANCELBLOCKINGCALL;
  125. LPWSPCLEANUP = function(var lpErrno: Integer): Integer; stdcall;
  126. {$EXTERNALSYM LPWSPCLEANUP}
  127. TWspCleanup = LPWSPCLEANUP;
  128. LPWSPCLOSESOCKET = function(s: TSocket; var lpErrno: Integer): Integer; stdcall;
  129. {$EXTERNALSYM LPWSPCLOSESOCKET}
  130. TWspCloseSocket = LPWSPCLOSESOCKET;
  131. LPWSPCONNECT = function(s: TSocket; name: PSockAddr; namelen: Integer; lpCallerData: LPWSABUF;
  132. lpCalleeData: LPWSABUF; lpSQOS: LPQOS; lpGQOS: LPQOS; var lpErrno: Integer): Integer; stdcall;
  133. {$EXTERNALSYM LPWSPCONNECT}
  134. TWspConnect = LPWSPCONNECT;
  135. LPWSPDUPLICATESOCKET = function(s: TSocket; dwProcessId: DWORD; lpProtocolInfo: LPWSAPROTOCOL_INFOW; var lpErrno: Integer): Integer; stdcall;
  136. {$EXTERNALSYM LPWSPDUPLICATESOCKET}
  137. TWspDuplicateSocket = LPWSPDUPLICATESOCKET;
  138. LPWSPENUMNETWORKEVENTS = function(s: TSocket; hEventObject: WSAEVENT; lpNetworkEvents: LPWSANETWORKEVENTS; var lpErrno: Integer): Integer; stdcall;
  139. {$EXTERNALSYM LPWSPENUMNETWORKEVENTS}
  140. TWspEnumNetworkEvents = LPWSPENUMNETWORKEVENTS;
  141. LPWSPEVENTSELECT = function(s: TSocket; hEventObject: WSAEVENT; lNetworkEvents: Longint; var lpErrno: Integer): Integer; stdcall;
  142. {$EXTERNALSYM LPWSPEVENTSELECT}
  143. TWspEventSelect = LPWSPEVENTSELECT;
  144. LPWSPGETOVERLAPPEDRESULT = function(s: TSocket; lpOverlapped: LPWSAOVERLAPPED;
  145. var lpcbTransfer: DWORD; fWait: BOOL; lpdwFlags: DWORD; var lpErrno: Integer): BOOL; stdcall;
  146. {$EXTERNALSYM LPWSPGETOVERLAPPEDRESULT}
  147. TWspGetOverlappedResult = LPWSPGETOVERLAPPEDRESULT;
  148. LPWSPGETPEERNAME = function(s: TSocket; var name: sockaddr; var namelen, lpErrno: Integer): Integer; stdcall;
  149. {$EXTERNALSYM LPWSPGETPEERNAME}
  150. TWspGetPeerName = LPWSPGETPEERNAME;
  151. LPWSPGETSOCKNAME = function(s: TSocket; var name: sockaddr; var namelen, lpErrno: Integer): Integer; stdcall;
  152. {$EXTERNALSYM LPWSPGETSOCKNAME}
  153. TWspGetSockName = LPWSPGETSOCKNAME;
  154. LPWSPGETSOCKOPT = function(s: TSocket; level, optname: Integer; optval: PChar; var optlen, lpErrno: Integer): Integer; stdcall;
  155. {$EXTERNALSYM LPWSPGETSOCKOPT}
  156. TWspGetSockOpt = LPWSPGETSOCKOPT;
  157. LPWSPGETQOSBYNAME = function(s: TSocket; var lpQOSName: WSABUF; lpQOS: LPQOS; lpErrno: Integer): BOOL; stdcall;
  158. {$EXTERNALSYM LPWSPGETQOSBYNAME}
  159. TWspGetQosByName = LPWSPGETQOSBYNAME;
  160. LPWSPIOCTL = function(s: TSocket; dwIoControlCode: DWORD; lpvInBuffer: LPVOID; cbInBuffer: DWORD;
  161. lpvOutBuffer: LPVOID; cbOutBuffer: DWORD; var lpcbBytesReturned: DWORD;
  162. lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
  163. lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  164. {$EXTERNALSYM LPWSPIOCTL}
  165. TWspIoctl = LPWSPIOCTL;
  166. LPWSPJOINLEAF = function(s: TSocket; name: sockaddr; namelen: Integer; lpCallerData: LPWSABUF;
  167. lpCalleeData: LPWSABUF; lpSQOS, lpGQOS: LPQOS; dwFlags: DWORD; var lpErrno: Integer): TSocket; stdcall;
  168. {$EXTERNALSYM LPWSPJOINLEAF}
  169. TWspJoinLeaf = LPWSPJOINLEAF;
  170. LPWSPLISTEN = function(s: TSocket; backlog: Integer; var lpErrno: Integer): Integer; stdcall;
  171. {$EXTERNALSYM LPWSPLISTEN}
  172. TWspListen = LPWSPLISTEN;
  173. LPWSPRECV = function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  174. var lpNumberOfBytesRecvd, lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
  175. lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE; lpThreadId: LPWSATHREADID;
  176. var lpErrno: Integer): Integer; stdcall;
  177. {$EXTERNALSYM LPWSPRECV}
  178. TWspRecv = LPWSPRECV;
  179. LPWSPRECVDISCONNECT = function(s: TSocket; lpInboundDisconnectData: LPWSABUF; var lpErrno: Integer): Integer; stdcall;
  180. {$EXTERNALSYM LPWSPRECVDISCONNECT}
  181. TWspRecvDisconnect = LPWSPRECVDISCONNECT;
  182. LPWSPRECVFROM = function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  183. var lpNumberOfBytesRecvd, lpFlags: DWORD; lpFrom: PSockAddr; lpFromlen: PINT;
  184. lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
  185. lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  186. {$EXTERNALSYM LPWSPRECVFROM}
  187. TWspRecvFrom = LPWSPRECVFROM;
  188. LPWSPSELECT = function(nfds: Integer; readfds, writefds, exceptfds: PFdSet; timeout: PTimeVal; var lpErrno: Integer): Integer; stdcall;
  189. {$EXTERNALSYM LPWSPSELECT}
  190. TWspSelect = LPWSPSELECT;
  191. LPWSPSEND = function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  192. var lpNumberOfBytesSent: DWORD; dwFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
  193. lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
  194. lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  195. {$EXTERNALSYM LPWSPSEND}
  196. TWspSend = LPWSPSEND;
  197. LPWSPSENDDISCONNECT = function(s: TSocket; lpOutboundDisconnectData: LPWSABUF; var lpErrno: Integer): Integer; stdcall;
  198. {$EXTERNALSYM LPWSPSENDDISCONNECT}
  199. TWspSendDisconnect = LPWSPSENDDISCONNECT;
  200. LPWSPSENDTO = function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  201. var lpNumberOfBytesSent: DWORD; dwFlags: DWORD; lpTo: PSockAddr; iTolen: Integer;
  202. lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
  203. lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  204. {$EXTERNALSYM LPWSPSENDTO}
  205. TWspSendTo = LPWSPSENDTO;
  206. LPWSPSETSOCKOPT = function(s: TSocket; level, optname: Integer; optval: PChar; optlen: Integer; var lpErrno: Integer): Integer; stdcall;
  207. {$EXTERNALSYM LPWSPSETSOCKOPT}
  208. TWspSetSockOpt = LPWSPSETSOCKOPT;
  209. LPWSPSHUTDOWN = function(s: TSocket; how: Integer; var lpErrno: Integer): Integer; stdcall;
  210. {$EXTERNALSYM LPWSPSHUTDOWN}
  211. TWspShutdown = LPWSPSHUTDOWN;
  212. LPWSPSOCKET = function(af, type_, protocol: Integer; lpProtocolInfo: LPWSAPROTOCOL_INFOW;
  213. g: GROUP; dwFlags: DWORD; var lpErrno: Integer): TSocket; stdcall;
  214. {$EXTERNALSYM LPWSPSOCKET}
  215. TWspSocket = LPWSPSOCKET;
  216. LPWSPSTRINGTOADDRESS = function(AddressString: LPWSTR; AddressFamily: Integer;
  217. lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpAddress: LPSOCKADDR;
  218. var lpAddressLength, lpErrno: Integer): Integer; stdcall;
  219. {$EXTERNALSYM LPWSPSTRINGTOADDRESS}
  220. TWspStringToAddress = LPWSPSTRINGTOADDRESS;
  221. (*
  222. * A service provider proc table. This structure is returned by value
  223. * from the service provider's WSPStartup() entrypoint.
  224. *)
  225. type
  226. _WSPPROC_TABLE = record
  227. lpWSPAccept: LPWSPACCEPT;
  228. lpWSPAddressToString: LPWSPADDRESSTOSTRING;
  229. lpWSPAsyncSelect: LPWSPASYNCSELECT;
  230. lpWSPBind: LPWSPBIND;
  231. lpWSPCancelBlockingCall: LPWSPCANCELBLOCKINGCALL;
  232. lpWSPCleanup: LPWSPCLEANUP;
  233. lpWSPCloseSocket: LPWSPCLOSESOCKET;
  234. lpWSPConnect: LPWSPCONNECT;
  235. lpWSPDuplicateSocket: LPWSPDUPLICATESOCKET;
  236. lpWSPEnumNetworkEvents: LPWSPENUMNETWORKEVENTS;
  237. lpWSPEventSelect: LPWSPEVENTSELECT;
  238. lpWSPGetOverlappedResult: LPWSPGETOVERLAPPEDRESULT;
  239. lpWSPGetPeerName: LPWSPGETPEERNAME;
  240. lpWSPGetSockName: LPWSPGETSOCKNAME;
  241. lpWSPGetSockOpt: LPWSPGETSOCKOPT;
  242. lpWSPGetQOSByName: LPWSPGETQOSBYNAME;
  243. lpWSPIoctl: LPWSPIOCTL;
  244. lpWSPJoinLeaf: LPWSPJOINLEAF;
  245. lpWSPListen: LPWSPLISTEN;
  246. lpWSPRecv: LPWSPRECV;
  247. lpWSPRecvDisconnect: LPWSPRECVDISCONNECT;
  248. lpWSPRecvFrom: LPWSPRECVFROM;
  249. lpWSPSelect: LPWSPSELECT;
  250. lpWSPSend: LPWSPSEND;
  251. lpWSPSendDisconnect: LPWSPSENDDISCONNECT;
  252. lpWSPSendTo: LPWSPSENDTO;
  253. lpWSPSetSockOpt: LPWSPSETSOCKOPT;
  254. lpWSPShutdown: LPWSPSHUTDOWN;
  255. lpWSPSocket: LPWSPSOCKET;
  256. lpWSPStringToAddress: LPWSPSTRINGTOADDRESS;
  257. end;
  258. {$EXTERNALSYM _WSPPROC_TABLE}
  259. WSPPROC_TABLE = _WSPPROC_TABLE;
  260. {$EXTERNALSYM WSPPROC_TABLE}
  261. LPWSPPROC_TABLE = ^WSPPROC_TABLE;
  262. {$EXTERNALSYM LPWSPPROC_TABLE}
  263. TWspProcTable = WSPPROC_TABLE;
  264. PWspProcTable = LPWSPPROC_TABLE;
  265. (*
  266. * Pointers to the individual entries in the upcall table.
  267. *)
  268. type
  269. LPWPUCLOSEEVENT = function(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  270. {$EXTERNALSYM LPWPUCLOSEEVENT}
  271. TWpuCloseEvent = LPWPUCLOSEEVENT;
  272. LPWPUCLOSESOCKETHANDLE = function(s: TSocket; var lpErrno: Integer): Integer; stdcall;
  273. {$EXTERNALSYM LPWPUCLOSESOCKETHANDLE}
  274. TWpuCloseSocketHandle = LPWPUCLOSESOCKETHANDLE;
  275. LPWPUCREATEEVENT = function(var lpErrno: Integer): WSAEVENT; stdcall;
  276. {$EXTERNALSYM LPWPUCREATEEVENT}
  277. TWpuCreateEvent = LPWPUCREATEEVENT;
  278. LPWPUCREATESOCKETHANDLE = function(dwCatalogEntryId, dwContext: DWORD;
  279. var lpErrno: Integer): TSocket; stdcall;
  280. {$EXTERNALSYM LPWPUCREATESOCKETHANDLE}
  281. TWpuCreateSocketHandle = LPWPUCREATESOCKETHANDLE;
  282. LPWPUFDISSET = function(s: TSocket; fdset: PFdSet): Integer; stdcall;
  283. {$EXTERNALSYM LPWPUFDISSET}
  284. TWpuFdIsSet = LPWPUFDISSET;
  285. LPWPUGETPROVIDERPATH = function(const lpProviderId: TGUID;
  286. lpszProviderDllPath: PWCHAR; var lpProviderDllPathLen, lpErrno: Integer): Integer; stdcall;
  287. {$EXTERNALSYM LPWPUGETPROVIDERPATH}
  288. TWpuGetProviderPath = LPWPUGETPROVIDERPATH;
  289. LPWPUMODIFYIFSHANDLE = function(dwCatalogEntryId: DWORD; ProposedHandle: TSocket;
  290. var lpErrno: Integer): TSocket; stdcall;
  291. {$EXTERNALSYM LPWPUMODIFYIFSHANDLE}
  292. TWpuMoifyIfsHandle = LPWPUMODIFYIFSHANDLE;
  293. LPWPUPOSTMESSAGE = function(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
  294. {$EXTERNALSYM LPWPUPOSTMESSAGE}
  295. TWpuPostMessage = LPWPUPOSTMESSAGE;
  296. LPWPUQUERYBLOCKINGCALLBACK = function(dwCatalogEntryId: DWORD; var lplpfnCallback: LPBLOCKINGCALLBACK;
  297. lpdwContext: LPDWORD; var lpErrno: Integer): Integer; stdcall;
  298. {$EXTERNALSYM LPWPUQUERYBLOCKINGCALLBACK}
  299. TWpuQueryBlockingCallback = LPWPUQUERYBLOCKINGCALLBACK;
  300. LPWPUQUERYSOCKETHANDLECONTEXT = function(s: TSocket; lpContext: LPDWORD;
  301. var lpErrno: Integer): Integer; stdcall;
  302. {$EXTERNALSYM LPWPUQUERYSOCKETHANDLECONTEXT}
  303. TWpuQuerySocketHandleContext = LPWPUQUERYSOCKETHANDLECONTEXT;
  304. LPWPUQUEUEAPC = function(lpThreadId: LPWSATHREADID; lpfnUserApc: LPWSAUSERAPC;
  305. dwContext: DWORD; var lpErrno: Integer): Integer; stdcall;
  306. {$EXTERNALSYM LPWPUQUEUEAPC}
  307. TWpuQueueApc = LPWPUQUEUEAPC;
  308. LPWPURESETEVENT = function(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  309. {$EXTERNALSYM LPWPURESETEVENT}
  310. TWpuResetEvent = LPWPURESETEVENT;
  311. LPWPUSETEVENT = function(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  312. {$EXTERNALSYM LPWPUSETEVENT}
  313. TWpuSetEvent = LPWPUSETEVENT;
  314. LPWPUOPENCURRENTTHREAD = function(lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  315. {$EXTERNALSYM LPWPUOPENCURRENTTHREAD}
  316. TWpuOpenCurrentThread = LPWPUOPENCURRENTTHREAD;
  317. LPWPUCLOSETHREAD = function(lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;
  318. {$EXTERNALSYM LPWPUCLOSETHREAD}
  319. TWpuCloseThread = LPWPUCLOSETHREAD;
  320. // Available only directly from ws2_32.dll
  321. LPWPUCOMPLETEOVERLAPPEDREQUEST = function(s: TSocket; lpOverlapped: LPWSAOVERLAPPED;
  322. dwError: DWORD; cbTransferred: DWORD; var lpErrno: Integer): Integer; stdcall;
  323. {$EXTERNALSYM LPWPUCOMPLETEOVERLAPPEDREQUEST}
  324. TWpuCompleteOverlappedRequest = LPWPUCOMPLETEOVERLAPPEDREQUEST;
  325. (*
  326. * The upcall table. This structure is passed by value to the service
  327. * provider's WSPStartup() entrypoint.
  328. *)
  329. _WSPUPCALLTABLE = record
  330. lpWPUCloseEvent: LPWPUCLOSEEVENT;
  331. lpWPUCloseSocketHandle: LPWPUCLOSESOCKETHANDLE;
  332. lpWPUCreateEvent: LPWPUCREATEEVENT;
  333. lpWPUCreateSocketHandle: LPWPUCREATESOCKETHANDLE;
  334. lpWPUFDIsSet: LPWPUFDISSET;
  335. lpWPUGetProviderPath: LPWPUGETPROVIDERPATH;
  336. lpWPUModifyIFSHandle: LPWPUMODIFYIFSHANDLE;
  337. lpWPUPostMessage: LPWPUPOSTMESSAGE;
  338. lpWPUQueryBlockingCallback: LPWPUQUERYBLOCKINGCALLBACK;
  339. lpWPUQuerySocketHandleContext: LPWPUQUERYSOCKETHANDLECONTEXT;
  340. lpWPUQueueApc: LPWPUQUEUEAPC;
  341. lpWPUResetEvent: LPWPURESETEVENT;
  342. lpWPUSetEvent: LPWPUSETEVENT;
  343. lpWPUOpenCurrentThread: LPWPUOPENCURRENTTHREAD;
  344. lpWPUCloseThread: LPWPUCLOSETHREAD;
  345. end;
  346. {$EXTERNALSYM _WSPUPCALLTABLE}
  347. WSPUPCALLTABLE = _WSPUPCALLTABLE;
  348. {$EXTERNALSYM WSPUPCALLTABLE}
  349. LPWSPUPCALLTABLE = ^WSPUPCALLTABLE;
  350. {$EXTERNALSYM LPWSPUPCALLTABLE}
  351. TWspUpCallTable = WSPUPCALLTABLE;
  352. PWspUpCallTable = LPWSPUPCALLTABLE;
  353. (*
  354. * WinSock 2 SPI socket function prototypes
  355. *)
  356. //function WSPStartup(wVersionRequested: WORD; lpWSPData: LPWSPDATA;
  357. // lpProtocolInfo: LPWSAPROTOCOL_INFOW; UpcallTable: WSPUPCALLTABLE;
  358. // lpProcTable: LPWSPPROC_TABLE): Integer; stdcall;
  359. //{$EXTERNALSYM WSPStartup}
  360. type
  361. LPWSPSTARTUP = function(wVersionRequested: WORD; lpWSPData: LPWSPDATA;
  362. lpProtocolInfo: LPWSAPROTOCOL_INFOW; UpcallTable: WSPUPCALLTABLE;
  363. lpProcTable: LPWSPPROC_TABLE): Integer; stdcall;
  364. {$EXTERNALSYM LPWSPSTARTUP}
  365. TWspStartUp = LPWSPSTARTUP;
  366. (*
  367. * Installation and configuration entrypoints.
  368. *)
  369. function WSCEnumProtocols(lpiProtocols: PINT; lpProtocolBuffer: LPWSAPROTOCOL_INFOW;
  370. var lpdwBufferLength: DWORD; var lpErrno: Integer): Integer; stdcall;
  371. {$EXTERNALSYM WSCEnumProtocols}
  372. type
  373. LPWSCENUMPROTOCOLS = function(lpiProtocols: PINT; lpProtocolBuffer: LPWSAPROTOCOL_INFOW;
  374. var lpdwBufferLength: DWORD; var lpErrno: Integer): Integer; stdcall;
  375. {$EXTERNALSYM LPWSCENUMPROTOCOLS}
  376. TWscEnumProtocols = LPWSCENUMPROTOCOLS;
  377. {$IFDEF _WIN64}
  378. //
  379. // 64-bit architectures capable of running 32-bit code have
  380. // separate 64-bit and 32-bit catalogs. API with '32' prefix
  381. // allow 32 bit catalog manipulations by 64 bit process.
  382. //
  383. function WSCEnumProtocols32(lpiProtocols: PINT; lpProtocolBuffer: LPWSAPROTOCOL_INFOW; lpdwBufferLength: LPDWORD; lpErrno: PINT): Integer; stdcall;
  384. {$EXTERNALSYM WSCEnumProtocols32}
  385. {$ENDIF _WIN64}
  386. function WSCDeinstallProvider(const lpProviderId: TGUID; var lpErrno: Integer): Integer; stdcall;
  387. {$EXTERNALSYM WSCDeinstallProvider}
  388. type
  389. LPWSCDEINSTALLPROVIDER = function(const lpProviderId: TGUID; var lpErrno: Integer): Integer; stdcall;
  390. {$EXTERNALSYM LPWSCDEINSTALLPROVIDER}
  391. TWscDeinstallProvider = LPWSCDEINSTALLPROVIDER;
  392. {$IFDEF _WIN64}
  393. function WSCDeinstallProvider32(lpProviderId: PGUID; lpErrno: PINT): Integer; stdcall;
  394. {$EXTERNALSYM WSCDeinstallProvider32}
  395. {$ENDIF _WIN64}
  396. function WSCInstallProvider(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  397. lpProtocolInfoList: LPWSAPROTOCOL_INFOW; dwNumberOfEntries: DWORD; var lpErrno: Integer): Integer; stdcall;
  398. {$EXTERNALSYM WSCInstallProvider}
  399. type
  400. LPWSCINSTALLPROVIDER = function(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  401. lpProtocolInfoList: LPWSAPROTOCOL_INFOW; dwNumberOfEntries: DWORD; var lpErrno: Integer): Integer; stdcall;
  402. {$EXTERNALSYM LPWSCINSTALLPROVIDER}
  403. TWscInstallProvider = LPWSCINSTALLPROVIDER;
  404. {$IFDEF _WIN64}
  405. //
  406. // This API manipulates 64-bit and 32-bit catalogs simulteneously.
  407. // It is needed to guarantee the same catalog IDs for provider catalog
  408. // entries in both 64-bit and 32-bit catalogs.
  409. //
  410. function WSCInstallProvider64_32(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
  411. dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
  412. {$EXTERNALSYM WSCInstallProvider64_32}
  413. {$ENDIF _WIN64}
  414. function WSCGetProviderPath(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  415. var lpProviderDllPathLen, lpErrno: Integer): Integer; stdcall;
  416. {$EXTERNALSYM WSCGetProviderPath}
  417. type
  418. LPWSCGETPROVIDERPATH = function(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  419. var lpProviderDllPathLen, lpErrno: Integer): Integer; stdcall;
  420. {$EXTERNALSYM LPWSCGETPROVIDERPATH}
  421. TWscGetProviderPath = LPWSCGETPROVIDERPATH;
  422. {$IFDEF _WIN64}
  423. function WSCGetProviderPath32(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProviderDllPathLen: PINT; lpErrno: PINT): Integer; stdcall;
  424. {$EXTERNALSYM WSCGetProviderPath32}
  425. {$ENDIF _WIN64}
  426. function WSCUpdateProvider(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
  427. dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
  428. {$EXTERNALSYM WSCUpdateProvider}
  429. type
  430. LPWSCUPDATEPROVIDER = function(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
  431. dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
  432. {$EXTERNALSYM LPWSCUPDATEPROVIDER}
  433. {$IFDEF _WIN64}
  434. function WSCUpdateProvider32(lpProviderId: PGUID; lpszProviderDllPath: PWCHAR; lpProtocolInfoList: LPWSAPROTOCOL_INFOW;
  435. dwNumberOfEntries: DWORD; lpErrno: PINT): Integer; stdcall;
  436. {$EXTERNALSYM WSCUpdateProvider32}
  437. {$ENDIF _WIN64}
  438. function WSCInstallQOSTemplate(const Guid: TGUID; QosName: LPWSABUF; Qos: LPQOS): Integer; stdcall;
  439. {$EXTERNALSYM WSCInstallQOSTemplate}
  440. type
  441. LPWSCINSTALLQOSTEMPLATE = function(const Guid: TGUID; QosName: LPWSABUF; Qos: LPQOS): Integer; stdcall;
  442. {$EXTERNALSYM LPWSCINSTALLQOSTEMPLATE}
  443. TWscInstallQosTemplate = LPWSCINSTALLQOSTEMPLATE;
  444. function WSCRemoveQOSTemplate(const Guid: TGUID; QosName: LPWSABUF): Integer; stdcall;
  445. {$EXTERNALSYM WSCRemoveQOSTemplate}
  446. type
  447. LPWSCREMOVEQOSTEMPLATE = function(const Guid: TGUID; QosName: LPWSABUF): Integer; stdcall;
  448. {$EXTERNALSYM LPWSCREMOVEQOSTEMPLATE}
  449. TWscRemoveQosTemplate = LPWSCREMOVEQOSTEMPLATE;
  450. (*
  451. * The following upcall function prototypes are only used by WinSock 2 DLL and
  452. * should not be used by any service providers.
  453. *
  454. function WPUCloseEvent(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  455. {$EXTERNALSYM WPUCloseEvent}
  456. function WPUCloseSocketHandle(s: TSocket; var lpErrno: Integer): Integer; stdcall;
  457. {$EXTERNALSYM WPUCloseSocketHandle}
  458. function WPUCreateEvent(var lpErrno: Integer): WSAEVENT; stdcall;
  459. {$EXTERNALSYM WPUCreateEvent}
  460. function WPUCreateSocketHandle(dwCatalogEntryId, dwContext: DWORD; var lpErrno: Integer): SOCKET; stdcall;
  461. {$EXTERNALSYM WPUCreateSocketHandle}
  462. function WPUFDIsSet(s: TSocket; const fdset: fd_set): Integer; stdcall;
  463. {$EXTERNALSYM WPUFDIsSet}
  464. function WPUGetProviderPath(const lpProviderId: TGUID; lpszProviderDllPath: PWCHAR;
  465. var lpProviderDllPathLen, lpErrno: : Integer): Integer; stdcall;
  466. {$EXTERNALSYM WPUGetProviderPath}
  467. function WPUModifyIFSHandle(dwCatalogEntryId: DWORD; ProposedHandle: SOCKET; var lpErrno: Integer): SOCKET; stdcall;
  468. {$EXTERNALSYM WPUModifyIFSHandle}
  469. function WPUPostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
  470. {$EXTERNALSYM WPUPostMessage}
  471. function WPUQueryBlockingCallback(dwCatalogEntryId: DWORD; var lplpfnCallback: LPBLOCKINGCALLBACK;
  472. var lpdwContext: DWORD_PTR; var lpErrno: Integer): Integer; stdcall;
  473. {$EXTERNALSYM WPUQueryBlockingCallback}
  474. function WPUQuerySocketHandleContext(s: SOCKET; var lpContext: DWORD_PTR; lpErrno: Integer): Integer; stdcall;
  475. {$EXTERNALSYM WPUQuerySocketHandleContext}
  476. function WPUQueueApc(lpThreadId: LPWSATHREADID; lpfnUserApc: LPWSAUSERAPC;
  477. dwContext: DWORD_PTR; var lpErrno: Integer): Integer; stdcall;
  478. {$EXTERNALSYM WPUQueueApc}
  479. function WPUResetEvent(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stcall;
  480. {$EXTERNALSYM WPUResetEvent}
  481. function WPUSetEvent(hEvent: WSAEVENT; var lpErrno: Integer): BOOL; stdcall;
  482. {$EXTERNALSYM WPUSetEvent}
  483. function WPUCompleteOverlappedRequest(s: SOCKET; lpOverlapped: LPWSAOVERLAPPED;
  484. dwError, cbTransferred: DWORD; var lpErrno: Integer): Integerl stdcall;
  485. {$EXTERNALSYM WPUCompleteOverlappedRequest}
  486. function WPUOpenCurrentThread(lpThreadId: LPWSATHREADID; lpErrno: PINT): Integer; stdcall;
  487. {$EXTERNALSYM WPUOpenCurrentThread}
  488. function WPUCloseThread(lpThreadId: LPWSATHREADID; lpErrno: PINT): Integer; stdcall;
  489. {$EXTERNALSYM WPUCloseThread}
  490. *)
  491. (*
  492. * Installing and uninstalling name space providers.
  493. *)
  494. //
  495. // SPI and API for enumerating name space providers are
  496. // currently equivalent since there is no concept of a hidden
  497. // name space provider
  498. //
  499. //TODO
  500. //#define WSCEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
  501. //#define LPFN_WSCENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
  502. {$IFDEF _WIN64}
  503. function WSCEnumNameSpaceProviders32(lpdwBufferLength: LPDWORD; lpnspBuffer: LPWSANAMESPACE_INFOW): Integer; stdcall;
  504. {$EXTERNALSYM WSCEnumNameSpaceProviders32}
  505. {$ENDIF _WIN64}
  506. function WSCInstallNameSpace(lpszIdentifier, lpszPathName: LPWSTR; dwNameSpace,
  507. dwVersion: DWORD; const lpProviderId: TGUID): Integer; stdcall;
  508. {$EXTERNALSYM WSCInstallNameSpace}
  509. type
  510. LPWSCINSTALLNAMESPACE = function(lpszIdentifier, lpszPathName: LPWSTR;
  511. dwNameSpace, dwVersion: DWORD; const lpProviderId: TGUID): Integer; stdcall;
  512. {$EXTERNALSYM LPWSCINSTALLNAMESPACE}
  513. TWscInstallNamespace = LPWSCINSTALLNAMESPACE;
  514. {$IFDEF _WIN64}
  515. function WSCInstallNameSpace32(lpszIdentifier, lpszPathName: LPWSTR; dwNameSpace, dwVersion: DWORD; lpProviderId: PGUID): Integer; stdcall;
  516. {$EXTERNALSYM WSCInstallNameSpace32}
  517. {$ENDIF _WIN64}
  518. function WSCUnInstallNameSpace(const lpProviderId: TGUID): Integer; stdcall;
  519. {$EXTERNALSYM WSCUnInstallNameSpace}
  520. type
  521. LPWSCUNINSTALLNAMESPACE = function(const lpProviderId: TGUID): Integer; stdcall;
  522. {$EXTERNALSYM LPWSCUNINSTALLNAMESPACE}
  523. TWscUninstallNamespace = LPWSCUNINSTALLNAMESPACE;
  524. {$IFDEF _WIN64}
  525. function WSCUnInstallNameSpace32(lpProviderId: PGUID): Integer; stdcall;
  526. {$EXTERNALSYM WSCUnInstallNameSpace32}
  527. {$ENDIF _WIN64}
  528. function WSCEnableNSProvider(const lpProviderId: TGUID; fEnable: BOOL): Integer; stdcall;
  529. {$EXTERNALSYM WSCEnableNSProvider}
  530. type
  531. LPWSCENABLENSPROVIDER = function(const lpProviderId: TGUID; fEnable: BOOL): Integer; stdcall;
  532. {$EXTERNALSYM LPWSCENABLENSPROVIDER}
  533. TWscEnableNsProvider = LPWSCENABLENSPROVIDER;
  534. {$IFDEF _WIN64}
  535. function WSCEnableNSProvider32(lpProviderId: PGUID; fEnable: BOOL): Integer; stdcall;
  536. {$EXTERNALSYM WSCEnableNSProvider32}
  537. {$ENDIF _WIN64}
  538. (*
  539. * Pointers to the individual entries in the namespace proc table.
  540. *)
  541. type
  542. LPNSPCLEANUP = function(const lpProviderId: TGUID): Integer; stdcall;
  543. {$EXTERNALSYM LPNSPCLEANUP}
  544. TNspCleanup = LPNSPCLEANUP;
  545. LPNSPLOOKUPSERVICEBEGIN = function(const lpProviderId: TGUID;
  546. lpqsRestrictions: LPWSAQUERYSETW; lpServiceClassInfo: LPWSASERVICECLASSINFOW;
  547. dwControlFlags: DWORD; lphLookup: LPHANDLE): Integer; stdcall;
  548. {$EXTERNALSYM LPNSPLOOKUPSERVICEBEGIN}
  549. TNspLookupServiceBegin = LPNSPLOOKUPSERVICEBEGIN;
  550. LPNSPLOOKUPSERVICENEXT = function(hLookup: HANDLE; dwControlFlags: DWORD;
  551. lpdwBufferLength: LPDWORD; lpqsResults: LPWSAQUERYSETW): Integer; stdcall;
  552. {$EXTERNALSYM LPNSPLOOKUPSERVICENEXT}
  553. TNspLookupServiceNext = LPNSPLOOKUPSERVICENEXT;
  554. LPNSPIOCTL = function(hLookup: HANDLE; dwControlCode: DWORD; lpvInBuffer: LPVOID;
  555. cbInBuffer: DWORD; lpvOutBuffer: LPVOID; cbOutBuffer: DWORD; lpcbBytesReturned: LPDWORD;
  556. lpCompletion: LPWSACOMPLETION; lpThreadId: LPWSATHREADID): Integer; stdcall;
  557. {$EXTERNALSYM LPNSPIOCTL}
  558. LPNSPLOOKUPSERVICEEND = function(hLookup: HANDLE): Integer; stdcall;
  559. {$EXTERNALSYM LPNSPLOOKUPSERVICEEND}
  560. TNspLookupServiceEnd = LPNSPLOOKUPSERVICEEND;
  561. LPNSPSETSERVICE = function(const lpProviderId: TGUID;
  562. lpServiceClassInfo: LPWSASERVICECLASSINFOW; lpqsRegInfo: LPWSAQUERYSETW;
  563. essOperation: WSAESETSERVICEOP; dwControlFlags: DWORD): Integer; stdcall;
  564. {$EXTERNALSYM LPNSPSETSERVICE}
  565. TNspSetService = LPNSPSETSERVICE;
  566. LPNSPINSTALLSERVICECLASS = function(const lpProviderId: TGUID;
  567. lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
  568. {$EXTERNALSYM LPNSPINSTALLSERVICECLASS}
  569. TNspInstallServiceClass = LPNSPINSTALLSERVICECLASS;
  570. LPNSPREMOVESERVICECLASS = function(const lpProviderId, lpServiceClassId: TGUID): Integer; stdcall;
  571. {$EXTERNALSYM LPNSPREMOVESERVICECLASS}
  572. TNspRemoveServiceClass = LPNSPREMOVESERVICECLASS;
  573. LPNSPGETSERVICECLASSINFO = function(const lpProviderId: TGUID; lpdwBufSize: LPDWORD;
  574. lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
  575. {$EXTERNALSYM LPNSPGETSERVICECLASSINFO}
  576. TNspGetServiceClassInfo = LPNSPGETSERVICECLASSINFO;
  577. (*
  578. * The name space service provider procedure table.
  579. *)
  580. type
  581. _NSP_ROUTINE = record
  582. (* Structure version information: *)
  583. cbSize: DWORD;
  584. dwMajorVersion: DWORD;
  585. dwMinorVersion: DWORD;
  586. (* Procedure-pointer table: *)
  587. NSPCleanup: LPNSPCLEANUP;
  588. NSPLookupServiceBegin: LPNSPLOOKUPSERVICEBEGIN;
  589. NSPLookupServiceNext: LPNSPLOOKUPSERVICENEXT;
  590. NSPLookupServiceEnd: LPNSPLOOKUPSERVICEEND;
  591. NSPSetService: LPNSPSETSERVICE;
  592. NSPInstallServiceClass: LPNSPINSTALLSERVICECLASS;
  593. NSPRemoveServiceClass: LPNSPREMOVESERVICECLASS;
  594. NSPGetServiceClassInfo: LPNSPGETSERVICECLASSINFO;
  595. // These APIs were added later, so must appear here
  596. // to keep the pointers in the structure in order.
  597. // Namespaces unaware of these APIs will set cbSize
  598. // to match the size of FIELD_OFFSET(NSP_ROUTINE, NSPIoctl).
  599. NSPIoctl: LPNSPIOCTL;
  600. end;
  601. {$EXTERNALSYM _NSP_ROUTINE}
  602. NSP_ROUTINE = _NSP_ROUTINE;
  603. {$EXTERNALSYM NSP_ROUTINE}
  604. LPNSP_ROUTINE = ^NSP_ROUTINE;
  605. {$EXTERNALSYM LPNSP_ROUTINE}
  606. TNspRoutines = NSP_ROUTINE;
  607. PNspRoutines = LPNSP_ROUTINE;
  608. (*
  609. * Startup procedures.
  610. *)
  611. //function NSPStartup(const lpProviderId: TGUID; lpnspRoutines: LPNSP_ROUTINE): Integer; stdcall;
  612. //{$EXTERNALSYM NSPStartup}
  613. type
  614. LPNSPSTARTUP = function(const lpProviderId: TGUID; lpnspRoutines: LPNSP_ROUTINE): Integer; stdcall;
  615. {$EXTERNALSYM LPNSPSTARTUP}
  616. TNspStartup = LPNSPSTARTUP;
  617. implementation
  618. const
  619. ws2_32 = 'ws2_32.dll';
  620. qosname = 'qosname.dll';
  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.