jwanspapi.pas 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199
  1. {******************************************************************************}
  2. { }
  3. { Winsock2 Namespace 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: nspapi.h, released June 2000. The original Pascal }
  9. { code is: NspApi.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: JwaNspApi.pas,v 1.10 2005/09/06 16:36:50 marquardt Exp $
  43. unit JwaNspAPI;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "nspapi.h"'}
  47. {$HPPEMIT ''}
  48. {$I jediapilib.inc}
  49. interface
  50. uses
  51. JwaWindows, JwaWinSock2;
  52. //
  53. // Service categories
  54. //
  55. const
  56. SERVICE_RESOURCE = $00000001;
  57. {$EXTERNALSYM SERVICE_RESOURCE}
  58. SERVICE_SERVICE = $00000002;
  59. {$EXTERNALSYM SERVICE_SERVICE}
  60. SERVICE_LOCAL = $00000004;
  61. {$EXTERNALSYM SERVICE_LOCAL}
  62. //
  63. // Operation used when calling SetService()
  64. //
  65. SERVICE_REGISTER = $00000001;
  66. {$EXTERNALSYM SERVICE_REGISTER}
  67. SERVICE_DEREGISTER = $00000002;
  68. {$EXTERNALSYM SERVICE_DEREGISTER}
  69. SERVICE_FLUSH = $00000003;
  70. {$EXTERNALSYM SERVICE_FLUSH}
  71. SERVICE_ADD_TYPE = $00000004;
  72. {$EXTERNALSYM SERVICE_ADD_TYPE}
  73. SERVICE_DELETE_TYPE = $00000005;
  74. {$EXTERNALSYM SERVICE_DELETE_TYPE}
  75. //
  76. // Flags that affect the operations above
  77. //
  78. SERVICE_FLAG_DEFER = $00000001;
  79. {$EXTERNALSYM SERVICE_FLAG_DEFER}
  80. SERVICE_FLAG_HARD = $00000002;
  81. {$EXTERNALSYM SERVICE_FLAG_HARD}
  82. //
  83. // Used as input to GetService() for setting the dwProps parameter
  84. //
  85. PROP_COMMENT = $00000001;
  86. {$EXTERNALSYM PROP_COMMENT}
  87. PROP_LOCALE = $00000002;
  88. {$EXTERNALSYM PROP_LOCALE}
  89. PROP_DISPLAY_HINT = $00000004;
  90. {$EXTERNALSYM PROP_DISPLAY_HINT}
  91. PROP_VERSION = $00000008;
  92. {$EXTERNALSYM PROP_VERSION}
  93. PROP_START_TIME = $00000010;
  94. {$EXTERNALSYM PROP_START_TIME}
  95. PROP_MACHINE = $00000020;
  96. {$EXTERNALSYM PROP_MACHINE}
  97. PROP_ADDRESSES = $00000100;
  98. {$EXTERNALSYM PROP_ADDRESSES}
  99. PROP_SD = $00000200;
  100. {$EXTERNALSYM PROP_SD}
  101. PROP_ALL = DWORD($80000000);
  102. {$EXTERNALSYM PROP_ALL}
  103. //
  104. // Flags that describe attributes of Service Addresses
  105. //
  106. SERVICE_ADDRESS_FLAG_RPC_CN = $00000001;
  107. {$EXTERNALSYM SERVICE_ADDRESS_FLAG_RPC_CN}
  108. SERVICE_ADDRESS_FLAG_RPC_DG = $00000002;
  109. {$EXTERNALSYM SERVICE_ADDRESS_FLAG_RPC_DG}
  110. SERVICE_ADDRESS_FLAG_RPC_NB = $00000004;
  111. {$EXTERNALSYM SERVICE_ADDRESS_FLAG_RPC_NB}
  112. //
  113. // Name Spaces
  114. //
  115. NS_DEFAULT = 0;
  116. {$EXTERNALSYM NS_DEFAULT}
  117. NS_SAP = 1;
  118. {$EXTERNALSYM NS_SAP}
  119. NS_NDS = 2;
  120. {$EXTERNALSYM NS_NDS}
  121. NS_PEER_BROWSE = 3;
  122. {$EXTERNALSYM NS_PEER_BROWSE}
  123. NS_TCPIP_LOCAL = 10;
  124. {$EXTERNALSYM NS_TCPIP_LOCAL}
  125. NS_TCPIP_HOSTS = 11;
  126. {$EXTERNALSYM NS_TCPIP_HOSTS}
  127. NS_DNS = 12;
  128. {$EXTERNALSYM NS_DNS}
  129. NS_NETBT = 13;
  130. {$EXTERNALSYM NS_NETBT}
  131. NS_WINS = 14;
  132. {$EXTERNALSYM NS_WINS}
  133. NS_NBP = 20;
  134. {$EXTERNALSYM NS_NBP}
  135. NS_MS = 30;
  136. {$EXTERNALSYM NS_MS}
  137. NS_STDA = 31;
  138. {$EXTERNALSYM NS_STDA}
  139. NS_NTDS = 32;
  140. {$EXTERNALSYM NS_NTDS}
  141. NS_X500 = 40;
  142. {$EXTERNALSYM NS_X500}
  143. NS_NIS = 41;
  144. {$EXTERNALSYM NS_NIS}
  145. NS_VNS = 50;
  146. {$EXTERNALSYM NS_VNS}
  147. //
  148. // Name space attributes.
  149. //
  150. NSTYPE_HIERARCHICAL = $00000001;
  151. {$EXTERNALSYM NSTYPE_HIERARCHICAL}
  152. NSTYPE_DYNAMIC = $00000002;
  153. {$EXTERNALSYM NSTYPE_DYNAMIC}
  154. NSTYPE_ENUMERABLE = $00000004;
  155. {$EXTERNALSYM NSTYPE_ENUMERABLE}
  156. NSTYPE_WORKGROUP = $00000008;
  157. {$EXTERNALSYM NSTYPE_WORKGROUP}
  158. //
  159. // Transport attributes.
  160. //
  161. XP_CONNECTIONLESS = $00000001;
  162. {$EXTERNALSYM XP_CONNECTIONLESS}
  163. XP_GUARANTEED_DELIVERY = $00000002;
  164. {$EXTERNALSYM XP_GUARANTEED_DELIVERY}
  165. XP_GUARANTEED_ORDER = $00000004;
  166. {$EXTERNALSYM XP_GUARANTEED_ORDER}
  167. XP_MESSAGE_ORIENTED = $00000008;
  168. {$EXTERNALSYM XP_MESSAGE_ORIENTED}
  169. XP_PSEUDO_STREAM = $00000010;
  170. {$EXTERNALSYM XP_PSEUDO_STREAM}
  171. XP_GRACEFUL_CLOSE = $00000020;
  172. {$EXTERNALSYM XP_GRACEFUL_CLOSE}
  173. XP_EXPEDITED_DATA = $00000040;
  174. {$EXTERNALSYM XP_EXPEDITED_DATA}
  175. XP_CONNECT_DATA = $00000080;
  176. {$EXTERNALSYM XP_CONNECT_DATA}
  177. XP_DISCONNECT_DATA = $00000100;
  178. {$EXTERNALSYM XP_DISCONNECT_DATA}
  179. XP_SUPPORTS_BROADCAST = $00000200;
  180. {$EXTERNALSYM XP_SUPPORTS_BROADCAST}
  181. XP_SUPPORTS_MULTICAST = $00000400;
  182. {$EXTERNALSYM XP_SUPPORTS_MULTICAST}
  183. XP_BANDWIDTH_ALLOCATION = $00000800;
  184. {$EXTERNALSYM XP_BANDWIDTH_ALLOCATION}
  185. XP_FRAGMENTATION = $00001000;
  186. {$EXTERNALSYM XP_FRAGMENTATION}
  187. XP_ENCRYPTS = $00002000;
  188. {$EXTERNALSYM XP_ENCRYPTS}
  189. //
  190. // Resolution flags for GetAddressByName().
  191. //
  192. RES_SOFT_SEARCH = $00000001;
  193. {$EXTERNALSYM RES_SOFT_SEARCH}
  194. RES_FIND_MULTIPLE = $00000002;
  195. {$EXTERNALSYM RES_FIND_MULTIPLE}
  196. RES_SERVICE = $00000004;
  197. {$EXTERNALSYM RES_SERVICE}
  198. //
  199. // Well known value names for Service Types
  200. //
  201. SERVICE_TYPE_VALUE_SAPIDA = 'SapId';
  202. {$EXTERNALSYM SERVICE_TYPE_VALUE_SAPIDA}
  203. SERVICE_TYPE_VALUE_SAPIDW = WideString('SapId');
  204. {$EXTERNALSYM SERVICE_TYPE_VALUE_SAPIDW}
  205. SERVICE_TYPE_VALUE_CONNA = 'ConnectionOriented';
  206. {$EXTERNALSYM SERVICE_TYPE_VALUE_CONNA}
  207. SERVICE_TYPE_VALUE_CONNW = WideString('ConnectionOriented');
  208. {$EXTERNALSYM SERVICE_TYPE_VALUE_CONNW}
  209. SERVICE_TYPE_VALUE_TCPPORTA = 'TcpPort';
  210. {$EXTERNALSYM SERVICE_TYPE_VALUE_TCPPORTA}
  211. SERVICE_TYPE_VALUE_TCPPORTW = WideString('TcpPort');
  212. {$EXTERNALSYM SERVICE_TYPE_VALUE_TCPPORTW}
  213. SERVICE_TYPE_VALUE_UDPPORTA = 'UdpPort';
  214. {$EXTERNALSYM SERVICE_TYPE_VALUE_UDPPORTA}
  215. SERVICE_TYPE_VALUE_UDPPORTW = WideString('UdpPort');
  216. {$EXTERNALSYM SERVICE_TYPE_VALUE_UDPPORTW}
  217. {$IFDEF UNICODE}
  218. SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDW;
  219. {$EXTERNALSYM SERVICE_TYPE_VALUE_SAPID}
  220. SERVICE_TYPE_VALUE_CONN = SERVICE_TYPE_VALUE_CONNW;
  221. {$EXTERNALSYM SERVICE_TYPE_VALUE_CONN}
  222. SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTW;
  223. {$EXTERNALSYM SERVICE_TYPE_VALUE_TCPPORT}
  224. SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTW;
  225. {$EXTERNALSYM SERVICE_TYPE_VALUE_UDPPORT}
  226. {$ELSE}
  227. SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDA;
  228. {$EXTERNALSYM SERVICE_TYPE_VALUE_SAPID}
  229. SERVICE_TYPE_VALUE_CONN = SERVICE_TYPE_VALUE_CONNA;
  230. {$EXTERNALSYM SERVICE_TYPE_VALUE_CONN}
  231. SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTA;
  232. {$EXTERNALSYM SERVICE_TYPE_VALUE_TCPPORT}
  233. SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTA;
  234. {$EXTERNALSYM SERVICE_TYPE_VALUE_UDPPORT}
  235. {$ENDIF UNICODE}
  236. //
  237. // status flags returned by SetService
  238. //
  239. SET_SERVICE_PARTIAL_SUCCESS = $00000001;
  240. {$EXTERNALSYM SET_SERVICE_PARTIAL_SUCCESS}
  241. //
  242. // Name Space Information
  243. //
  244. type
  245. _NS_INFOA = record
  246. dwNameSpace: DWORD;
  247. dwNameSpaceFlags: DWORD;
  248. lpNameSpace: LPSTR;
  249. end;
  250. {$EXTERNALSYM _NS_INFOA}
  251. NS_INFOA = _NS_INFOA;
  252. {$EXTERNALSYM NS_INFOA}
  253. PNS_INFOA = ^NS_INFOA;
  254. {$EXTERNALSYM PNS_INFOA}
  255. LPNS_INFOA = ^NS_INFOA;
  256. {$EXTERNALSYM LPNS_INFOA}
  257. TNsInfoA = NS_INFOA;
  258. PNsInfoA = LPNS_INFOA;
  259. //
  260. // Name Space Information
  261. //
  262. _NS_INFOW = record
  263. dwNameSpace: DWORD;
  264. dwNameSpaceFlags: DWORD;
  265. lpNameSpace: LPWSTR;
  266. end;
  267. {$EXTERNALSYM _NS_INFOW}
  268. NS_INFOW = _NS_INFOW;
  269. {$EXTERNALSYM NS_INFOW}
  270. PNS_INFOW = ^NS_INFOW;
  271. {$EXTERNALSYM PNS_INFOW}
  272. LPNS_INFOW = ^NS_INFOW;
  273. {$EXTERNALSYM LPNS_INFOW}
  274. TNsInfoW = NS_INFOW;
  275. PNsInfoW = LPNS_INFOW;
  276. {$IFDEF UNICODE}
  277. NS_INFO = NS_INFOW;
  278. {$EXTERNALSYM NS_INFO}
  279. PNS_INFO = PNS_INFOW;
  280. {$EXTERNALSYM PNS_INFO}
  281. LPNS_INFO = LPNS_INFOW;
  282. {$EXTERNALSYM LPNS_INFO}
  283. TNsInfo = TNsInfoW;
  284. PNsInfo = PNsInfoW;
  285. {$ELSE}
  286. NS_INFO = NS_INFOA;
  287. {$EXTERNALSYM NS_INFO}
  288. PNS_INFO = PNS_INFOA;
  289. {$EXTERNALSYM PNS_INFO}
  290. LPNS_INFO = LPNS_INFOA;
  291. {$EXTERNALSYM LPNS_INFO}
  292. TNsInfo = TNsInfoA;
  293. PNsInfo = PNsInfoA;
  294. {$ENDIF UNICODE}
  295. //
  296. // Service Type Values. The structures are used to define named Service
  297. // Type specific values. This structure is self relative and has no pointers.
  298. //
  299. LPSERVICE_TYPE_VALUE = ^SERVICE_TYPE_VALUE;
  300. {$EXTERNALSYM LPSERVICE_TYPE_VALUE}
  301. PSERVICE_TYPE_VALUE = ^SERVICE_TYPE_VALUE;
  302. {$EXTERNALSYM PSERVICE_TYPE_VALUE}
  303. _SERVICE_TYPE_VALUE = record
  304. dwNameSpace: DWORD;
  305. dwValueType: DWORD;
  306. dwValueSize: DWORD;
  307. dwValueNameOffset: DWORD;
  308. dwValueOffset: DWORD;
  309. end;
  310. {$EXTERNALSYM _SERVICE_TYPE_VALUE}
  311. SERVICE_TYPE_VALUE = _SERVICE_TYPE_VALUE;
  312. {$EXTERNALSYM SERVICE_TYPE_VALUE}
  313. TServiceTypeValue = SERVICE_TYPE_VALUE;
  314. PServiceTypeValue = LPSERVICE_TYPE_VALUE;
  315. //
  316. // An absolute version of above. This structure does contain pointers.
  317. //
  318. LPSERVICE_TYPE_VALUE_ABSA = ^SERVICE_TYPE_VALUE_ABSA;
  319. {$EXTERNALSYM LPSERVICE_TYPE_VALUE_ABSA}
  320. PSERVICE_TYPE_VALUE_ABSA = ^SERVICE_TYPE_VALUE_ABSA;
  321. {$EXTERNALSYM PSERVICE_TYPE_VALUE_ABSA}
  322. _SERVICE_TYPE_VALUE_ABSA = record
  323. dwNameSpace: DWORD;
  324. dwValueType: DWORD;
  325. dwValueSize: DWORD;
  326. lpValueName: LPSTR;
  327. lpValue: LPVOID;
  328. end;
  329. {$EXTERNALSYM _SERVICE_TYPE_VALUE_ABSA}
  330. SERVICE_TYPE_VALUE_ABSA = _SERVICE_TYPE_VALUE_ABSA;
  331. {$EXTERNALSYM SERVICE_TYPE_VALUE_ABSA}
  332. TServiceTypeValueAbsA = SERVICE_TYPE_VALUE_ABSA;
  333. PServiceTypeValueAbsA = LPSERVICE_TYPE_VALUE_ABSA;
  334. //
  335. // An absolute version of above. This structure does contain pointers.
  336. //
  337. LPSERVICE_TYPE_VALUE_ABSW = ^SERVICE_TYPE_VALUE_ABSW;
  338. {$EXTERNALSYM LPSERVICE_TYPE_VALUE_ABSW}
  339. PSERVICE_TYPE_VALUE_ABSW = ^SERVICE_TYPE_VALUE_ABSW;
  340. {$EXTERNALSYM PSERVICE_TYPE_VALUE_ABSW}
  341. _SERVICE_TYPE_VALUE_ABSW = record
  342. dwNameSpace: DWORD;
  343. dwValueType: DWORD;
  344. dwValueSize: DWORD;
  345. lpValueName: LPWSTR;
  346. lpValue: LPVOID;
  347. end;
  348. {$EXTERNALSYM _SERVICE_TYPE_VALUE_ABSW}
  349. SERVICE_TYPE_VALUE_ABSW = _SERVICE_TYPE_VALUE_ABSW;
  350. {$EXTERNALSYM SERVICE_TYPE_VALUE_ABSW}
  351. TServiceTypeValueAbsW = SERVICE_TYPE_VALUE_ABSW;
  352. PServiceTypeValueAbsW = LPSERVICE_TYPE_VALUE_ABSW;
  353. {$IFDEF UNICODE}
  354. SERVICE_TYPE_VALUE_ABS = SERVICE_TYPE_VALUE_ABSW;
  355. {$EXTERNALSYM SERVICE_TYPE_VALUE_ABS}
  356. PSERVICE_TYPE_VALUE_ABS = PSERVICE_TYPE_VALUE_ABSW;
  357. {$EXTERNALSYM PSERVICE_TYPE_VALUE_ABS}
  358. LPSERVICE_TYPE_VALUE_ABS = LPSERVICE_TYPE_VALUE_ABSW;
  359. {$EXTERNALSYM LPSERVICE_TYPE_VALUE_ABS}
  360. TServiceTypeValueAbs = TServiceTypeValueAbsW;
  361. PServiceTypeValueAbs = PServiceTypeValueAbsW;
  362. {$ELSE}
  363. SERVICE_TYPE_VALUE_ABS = SERVICE_TYPE_VALUE_ABSA;
  364. {$EXTERNALSYM SERVICE_TYPE_VALUE_ABS}
  365. PSERVICE_TYPE_VALUE_ABS = PSERVICE_TYPE_VALUE_ABSA;
  366. {$EXTERNALSYM PSERVICE_TYPE_VALUE_ABS}
  367. LPSERVICE_TYPE_VALUE_ABS = LPSERVICE_TYPE_VALUE_ABSA;
  368. {$EXTERNALSYM LPSERVICE_TYPE_VALUE_ABS}
  369. TServiceTypeValueAbs = TServiceTypeValueAbsA;
  370. PServiceTypeValueAbs = PServiceTypeValueAbsA;
  371. {$ENDIF UNICODE}
  372. //
  373. // Service Type Information. Contains the name of the Service Type and
  374. // and an array of SERVICE_NS_TYPE_VALUE structures. This structure is self
  375. // relative and has no pointers in it.
  376. //
  377. LPSERVICE_TYPE_INFO = ^SERVICE_TYPE_INFO;
  378. {$EXTERNALSYM LPSERVICE_TYPE_INFO}
  379. PSERVICE_TYPE_INFO = ^SERVICE_TYPE_INFO;
  380. {$EXTERNALSYM PSERVICE_TYPE_INFO}
  381. _SERVICE_TYPE_INFO = record
  382. dwTypeNameOffset: DWORD;
  383. dwValueCount: DWORD;
  384. Values: array [0..0] of SERVICE_TYPE_VALUE;
  385. end;
  386. {$EXTERNALSYM _SERVICE_TYPE_INFO}
  387. SERVICE_TYPE_INFO = _SERVICE_TYPE_INFO;
  388. {$EXTERNALSYM SERVICE_TYPE_INFO}
  389. TServiceTypeInfo = SERVICE_TYPE_INFO;
  390. PServiceTypeInfo = LPSERVICE_TYPE_INFO;
  391. LPSERVICE_TYPE_INFO_ABSA = ^SERVICE_TYPE_INFO_ABSA;
  392. {$EXTERNALSYM LPSERVICE_TYPE_INFO_ABSA}
  393. PSERVICE_TYPE_INFO_ABSA = ^SERVICE_TYPE_INFO_ABSA;
  394. {$EXTERNALSYM PSERVICE_TYPE_INFO_ABSA}
  395. _SERVICE_TYPE_INFO_ABSA = record
  396. lpTypeName: LPSTR;
  397. dwValueCount: DWORD;
  398. Values: array [0..0] of SERVICE_TYPE_VALUE_ABSA;
  399. end;
  400. {$EXTERNALSYM _SERVICE_TYPE_INFO_ABSA}
  401. SERVICE_TYPE_INFO_ABSA = _SERVICE_TYPE_INFO_ABSA;
  402. {$EXTERNALSYM SERVICE_TYPE_INFO_ABSA}
  403. TServiceTypeInfoAbsA = SERVICE_TYPE_INFO_ABSA;
  404. PServiceTypeInfoAbsA = PSERVICE_TYPE_INFO_ABSA;
  405. LPSERVICE_TYPE_INFO_ABSW = ^SERVICE_TYPE_INFO_ABSW;
  406. {$EXTERNALSYM LPSERVICE_TYPE_INFO_ABSW}
  407. PSERVICE_TYPE_INFO_ABSW = ^SERVICE_TYPE_INFO_ABSW;
  408. {$EXTERNALSYM PSERVICE_TYPE_INFO_ABSW}
  409. _SERVICE_TYPE_INFO_ABSW = record
  410. lpTypeName: LPWSTR;
  411. dwValueCount: DWORD;
  412. Values: array [0..0] of SERVICE_TYPE_VALUE_ABSW;
  413. end;
  414. {$EXTERNALSYM _SERVICE_TYPE_INFO_ABSW}
  415. SERVICE_TYPE_INFO_ABSW = _SERVICE_TYPE_INFO_ABSW;
  416. {$EXTERNALSYM SERVICE_TYPE_INFO_ABSW}
  417. TServiceTypeInfoAbsW = SERVICE_TYPE_INFO_ABSW;
  418. PServiceTypeInfoAbsW = LPSERVICE_TYPE_INFO_ABSW;
  419. {$IFDEF UNICODE}
  420. SERVICE_TYPE_INFO_ABS = SERVICE_TYPE_INFO_ABSW;
  421. {$EXTERNALSYM SERVICE_TYPE_INFO_ABS}
  422. PSERVICE_TYPE_INFO_ABS = PSERVICE_TYPE_INFO_ABSW;
  423. {$EXTERNALSYM PSERVICE_TYPE_INFO_ABS}
  424. LPSERVICE_TYPE_INFO_ABS = LPSERVICE_TYPE_INFO_ABSW;
  425. {$EXTERNALSYM LPSERVICE_TYPE_INFO_ABS}
  426. TServiceTypeInfoAbs = TServiceTypeInfoAbsW;
  427. PServiceTypeInfoAbs = PServiceTypeInfoAbsW;
  428. {$ELSE}
  429. SERVICE_TYPE_INFO_ABS = SERVICE_TYPE_INFO_ABSA;
  430. {$EXTERNALSYM SERVICE_TYPE_INFO_ABS}
  431. PSERVICE_TYPE_INFO_ABS = PSERVICE_TYPE_INFO_ABSA;
  432. {$EXTERNALSYM PSERVICE_TYPE_INFO_ABS}
  433. LPSERVICE_TYPE_INFO_ABS = LPSERVICE_TYPE_INFO_ABSA;
  434. {$EXTERNALSYM LPSERVICE_TYPE_INFO_ABS}
  435. TServiceTypeInfoAbs = TServiceTypeInfoAbsA;
  436. PServiceTypeInfoAbs = PServiceTypeInfoAbsA;
  437. {$ENDIF UNICODE}
  438. //
  439. // A Single Address definition.
  440. //
  441. LPSERVICE_ADDRESS = ^SERVICE_ADDRESS;
  442. {$EXTERNALSYM LPSERVICE_ADDRESS}
  443. PSERVICE_ADDRESS = ^SERVICE_ADDRESS;
  444. {$EXTERNALSYM PSERVICE_ADDRESS}
  445. _SERVICE_ADDRESS = record
  446. dwAddressType: DWORD;
  447. dwAddressFlags: DWORD;
  448. dwAddressLength: DWORD;
  449. dwPrincipalLength: DWORD;
  450. lpAddress: LPBYTE;
  451. lpPrincipal: LPBYTE;
  452. end;
  453. {$EXTERNALSYM _SERVICE_ADDRESS}
  454. SERVICE_ADDRESS = _SERVICE_ADDRESS;
  455. {$EXTERNALSYM SERVICE_ADDRESS}
  456. TServiceAddress = SERVICE_ADDRESS;
  457. PServiceAddress = LPSERVICE_ADDRESS;
  458. //
  459. // Addresses used by the service. Contains array of SERVICE_ADDRESS.
  460. //
  461. LPSERVICE_ADDRESSES = ^SERVICE_ADDRESSES;
  462. {$EXTERNALSYM LPSERVICE_ADDRESSES}
  463. PSERVICE_ADDRESSES = ^SERVICE_ADDRESSES;
  464. {$EXTERNALSYM PSERVICE_ADDRESSES}
  465. _SERVICE_ADDRESSES = record
  466. dwAddressCount: DWORD;
  467. Addresses: array [0..0] of SERVICE_ADDRESS;
  468. end;
  469. {$EXTERNALSYM _SERVICE_ADDRESSES}
  470. SERVICE_ADDRESSES = _SERVICE_ADDRESSES;
  471. {$EXTERNALSYM SERVICE_ADDRESSES}
  472. TServiceAddresses = SERVICE_ADDRESSES;
  473. PServiceAddresses = PSERVICE_ADDRESSES;
  474. //
  475. // Service Information.
  476. //
  477. LPSERVICE_INFOA = ^SERVICE_INFOA;
  478. {$EXTERNALSYM LPSERVICE_INFOA}
  479. PSERVICE_INFOA = ^SERVICE_INFOA;
  480. {$EXTERNALSYM PSERVICE_INFOA}
  481. _SERVICE_INFOA = record
  482. lpServiceType: PGUID;
  483. lpServiceName: LPSTR;
  484. lpComment: LPSTR;
  485. lpLocale: LPSTR;
  486. dwDisplayHint: DWORD;
  487. dwVersion: DWORD;
  488. dwTime: DWORD;
  489. lpMachineName: LPSTR;
  490. lpServiceAddress: LPSERVICE_ADDRESSES;
  491. ServiceSpecificInfo: BLOB;
  492. end;
  493. {$EXTERNALSYM _SERVICE_INFOA}
  494. SERVICE_INFOA = _SERVICE_INFOA;
  495. {$EXTERNALSYM SERVICE_INFOA}
  496. TServiceInfoA = SERVICE_INFOA;
  497. PServiceInfoA = PSERVICE_INFOA;
  498. //
  499. // Service Information.
  500. //
  501. LPSERVICE_INFOW = ^SERVICE_INFOW;
  502. {$EXTERNALSYM LPSERVICE_INFOW}
  503. PSERVICE_INFOW = ^SERVICE_INFOW;
  504. {$EXTERNALSYM PSERVICE_INFOW}
  505. _SERVICE_INFOW = record
  506. lpServiceType: PGUID;
  507. lpServiceName: LPWSTR;
  508. lpComment: LPWSTR;
  509. lpLocale: LPWSTR;
  510. dwDisplayHint: DWORD;
  511. dwVersion: DWORD;
  512. dwTime: DWORD;
  513. lpMachineName: LPWSTR;
  514. lpServiceAddress: LPSERVICE_ADDRESSES;
  515. ServiceSpecificInfo: BLOB;
  516. end;
  517. {$EXTERNALSYM _SERVICE_INFOW}
  518. SERVICE_INFOW = _SERVICE_INFOW;
  519. {$EXTERNALSYM SERVICE_INFOW}
  520. TServiceInfoW = SERVICE_INFOW;
  521. PServiceInfoW = PSERVICE_INFOW;
  522. {$IFDEF UNICODE}
  523. SERVICE_INFO = SERVICE_INFOW;
  524. {$EXTERNALSYM SERVICE_INFO}
  525. PSERVICE_INFO = PSERVICE_INFOW;
  526. {$EXTERNALSYM PSERVICE_INFO}
  527. LPSERVICE_INFO = LPSERVICE_INFOW;
  528. {$EXTERNALSYM LPSERVICE_INFO}
  529. TServiceInfo = TServiceInfoW;
  530. PServiceInfo = PServiceInfoW;
  531. {$ELSE}
  532. SERVICE_INFO = SERVICE_INFOA;
  533. {$EXTERNALSYM SERVICE_INFO}
  534. PSERVICE_INFO = PSERVICE_INFOA;
  535. {$EXTERNALSYM PSERVICE_INFO}
  536. LPSERVICE_INFO = LPSERVICE_INFOA;
  537. {$EXTERNALSYM LPSERVICE_INFO}
  538. TServiceInfo = TServiceInfoA;
  539. PServiceInfo = PServiceInfoA;
  540. {$ENDIF UNICODE}
  541. //
  542. // Name Space & Service Information
  543. //
  544. LPNS_SERVICE_INFOA = ^NS_SERVICE_INFOA;
  545. {$EXTERNALSYM LPNS_SERVICE_INFOA}
  546. PNS_SERVICE_INFOA = ^NS_SERVICE_INFOA;
  547. {$EXTERNALSYM PNS_SERVICE_INFOA}
  548. _NS_SERVICE_INFOA = record
  549. dwNameSpace: DWORD;
  550. ServiceInfo: SERVICE_INFOA;
  551. end;
  552. {$EXTERNALSYM _NS_SERVICE_INFOA}
  553. NS_SERVICE_INFOA = _NS_SERVICE_INFOA;
  554. {$EXTERNALSYM NS_SERVICE_INFOA}
  555. TNsServiceInfoA = NS_SERVICE_INFOA;
  556. PNsServiceInfoA = LPNS_SERVICE_INFOA;
  557. //
  558. // Name Space & Service Information
  559. //
  560. LPNS_SERVICE_INFOW = ^NS_SERVICE_INFOW;
  561. {$EXTERNALSYM LPNS_SERVICE_INFOW}
  562. PNS_SERVICE_INFOW = ^NS_SERVICE_INFOW;
  563. {$EXTERNALSYM PNS_SERVICE_INFOW}
  564. _NS_SERVICE_INFOW = record
  565. dwNameSpace: DWORD;
  566. ServiceInfo: SERVICE_INFOW;
  567. end;
  568. {$EXTERNALSYM _NS_SERVICE_INFOW}
  569. NS_SERVICE_INFOW = _NS_SERVICE_INFOW;
  570. {$EXTERNALSYM NS_SERVICE_INFOW}
  571. TNsServiceInfoW = NS_SERVICE_INFOW;
  572. PNsServiceInfoW = LPNS_SERVICE_INFOW;
  573. {$IFDEF UNICODE}
  574. NS_SERVICE_INFO = NS_SERVICE_INFOW;
  575. {$EXTERNALSYM NS_SERVICE_INFO}
  576. PNS_SERVICE_INFO = PNS_SERVICE_INFOW;
  577. {$EXTERNALSYM PNS_SERVICE_INFO}
  578. LPNS_SERVICE_INFO = LPNS_SERVICE_INFOW;
  579. {$EXTERNALSYM LPNS_SERVICE_INFO}
  580. TNsServiceInfo = TNsServiceInfoW;
  581. PNsServiceInfo = PNsServiceInfoW;
  582. {$ELSE}
  583. NS_SERVICE_INFO = NS_SERVICE_INFOA;
  584. {$EXTERNALSYM NS_SERVICE_INFO}
  585. PNS_SERVICE_INFO = PNS_SERVICE_INFOA;
  586. {$EXTERNALSYM PNS_SERVICE_INFO}
  587. LPNS_SERVICE_INFO = LPNS_SERVICE_INFOA;
  588. {$EXTERNALSYM LPNS_SERVICE_INFO}
  589. TNsServiceInfo = TNsServiceInfoA;
  590. PNsServiceInfo = PNsServiceInfoA;
  591. {$ENDIF UNICODE}
  592. //
  593. // SockAddr Information
  594. //
  595. LPSOCKET_ADDRESS = ^SOCKET_ADDRESS;
  596. {$EXTERNALSYM LPSOCKET_ADDRESS}
  597. PSOCKET_ADDRESS = ^SOCKET_ADDRESS;
  598. {$EXTERNALSYM PSOCKET_ADDRESS}
  599. _SOCKET_ADDRESS = record
  600. lpSockaddr: LPSOCKADDR;
  601. iSockaddrLength: Integer;
  602. end;
  603. {$EXTERNALSYM _SOCKET_ADDRESS}
  604. SOCKET_ADDRESS = _SOCKET_ADDRESS;
  605. {$EXTERNALSYM SOCKET_ADDRESS}
  606. TSocketAddress = SOCKET_ADDRESS;
  607. PSocketAddress = PSOCKET_ADDRESS;
  608. //
  609. // CSAddr Information
  610. //
  611. LPCSADDR_INFO = ^CSADDR_INFO;
  612. {$EXTERNALSYM LPCSADDR_INFO}
  613. PCSADDR_INFO = ^CSADDR_INFO;
  614. {$EXTERNALSYM PCSADDR_INFO}
  615. _CSADDR_INFO = record
  616. LocalAddr: SOCKET_ADDRESS;
  617. RemoteAddr: SOCKET_ADDRESS;
  618. iSocketType: Integer;
  619. iProtocol: Integer;
  620. end;
  621. {$EXTERNALSYM _CSADDR_INFO}
  622. CSADDR_INFO = _CSADDR_INFO;
  623. {$EXTERNALSYM CSADDR_INFO}
  624. TCsAddrInfo = CSADDR_INFO;
  625. PCsAddrInfo = LPCSADDR_INFO;
  626. //
  627. // Protocol Information
  628. //
  629. LPPROTOCOL_INFOA = ^PROTOCOL_INFOA;
  630. {$EXTERNALSYM LPPROTOCOL_INFOA}
  631. PPROTOCOL_INFOA = ^PROTOCOL_INFOA;
  632. {$EXTERNALSYM PPROTOCOL_INFOA}
  633. _PROTOCOL_INFOA = record
  634. dwServiceFlags: DWORD;
  635. iAddressFamily: Integer;
  636. iMaxSockAddr: Integer;
  637. iMinSockAddr: Integer;
  638. iSocketType: Integer;
  639. iProtocol: Integer;
  640. dwMessageSize: DWORD;
  641. lpProtocol: LPSTR;
  642. end;
  643. {$EXTERNALSYM _PROTOCOL_INFOA}
  644. PROTOCOL_INFOA = _PROTOCOL_INFOA;
  645. {$EXTERNALSYM PROTOCOL_INFOA}
  646. TProtocolInfoA = PROTOCOL_INFOA;
  647. PProtocolInfoA = LPPROTOCOL_INFOA;
  648. //
  649. // Protocol Information
  650. //
  651. LPPROTOCOL_INFOW = ^PROTOCOL_INFOW;
  652. {$EXTERNALSYM LPPROTOCOL_INFOW}
  653. PPROTOCOL_INFOW = ^PROTOCOL_INFOW;
  654. {$EXTERNALSYM PPROTOCOL_INFOW}
  655. _PROTOCOL_INFOW = record
  656. dwServiceFlags: DWORD;
  657. iAddressFamily: Integer;
  658. iMaxSockAddr: Integer;
  659. iMinSockAddr: Integer;
  660. iSocketType: Integer;
  661. iProtocol: Integer;
  662. dwMessageSize: DWORD;
  663. lpProtocol: LPWSTR;
  664. end;
  665. {$EXTERNALSYM _PROTOCOL_INFOW}
  666. PROTOCOL_INFOW = _PROTOCOL_INFOW;
  667. {$EXTERNALSYM PROTOCOL_INFOW}
  668. TProtocolInfoW = PROTOCOL_INFOW;
  669. PProtocolInfoW = LPPROTOCOL_INFOW;
  670. {$IFDEF UNICODE}
  671. PROTOCOL_INFO = PROTOCOL_INFOW;
  672. {$EXTERNALSYM PROTOCOL_INFO}
  673. PPROTOCOL_INFO = PPROTOCOL_INFOW;
  674. {$EXTERNALSYM PPROTOCOL_INFO}
  675. LPPROTOCOL_INFO = LPPROTOCOL_INFOW;
  676. {$EXTERNALSYM LPPROTOCOL_INFO}
  677. TProtocolInfo = TProtocolInfoW;
  678. PProtocolInfo = PProtocolInfoW;
  679. {$ELSE}
  680. PROTOCOL_INFO = PROTOCOL_INFOA;
  681. {$EXTERNALSYM PROTOCOL_INFO}
  682. PPROTOCOL_INFO = PPROTOCOL_INFOA;
  683. {$EXTERNALSYM PPROTOCOL_INFO}
  684. LPPROTOCOL_INFO = LPPROTOCOL_INFOA;
  685. {$EXTERNALSYM LPPROTOCOL_INFO}
  686. TProtocolInfo = TProtocolInfoA;
  687. PProtocolInfo = PProtocolInfoA;
  688. {$ENDIF UNICODE}
  689. //
  690. // NETRESOURCE2 Structure
  691. //
  692. LPNETRESOURCE2A = ^NETRESOURCE2A;
  693. {$EXTERNALSYM LPNETRESOURCE2A}
  694. PNETRESOURCE2A = ^NETRESOURCE2A;
  695. {$EXTERNALSYM PNETRESOURCE2A}
  696. _NETRESOURCE2A = record
  697. dwScope: DWORD;
  698. dwType: DWORD;
  699. dwUsage: DWORD;
  700. dwDisplayType: DWORD;
  701. lpLocalName: LPSTR;
  702. lpRemoteName: LPSTR;
  703. lpComment: LPSTR;
  704. ns_info: NS_INFO;
  705. ServiceType: TGUID;
  706. dwProtocols: DWORD;
  707. lpiProtocols: PINT;
  708. end;
  709. {$EXTERNALSYM _NETRESOURCE2A}
  710. NETRESOURCE2A = _NETRESOURCE2A;
  711. {$EXTERNALSYM NETRESOURCE2A}
  712. TNetResource2A = NETRESOURCE2A;
  713. //
  714. // NETRESOURCE2 Structure
  715. //
  716. LPNETRESOURCE2W = ^NETRESOURCE2W;
  717. {$EXTERNALSYM LPNETRESOURCE2W}
  718. PNETRESOURCE2W = ^NETRESOURCE2W;
  719. {$EXTERNALSYM PNETRESOURCE2W}
  720. _NETRESOURCE2W = record
  721. dwScope: DWORD;
  722. dwType: DWORD;
  723. dwUsage: DWORD;
  724. dwDisplayType: DWORD;
  725. lpLocalName: LPWSTR;
  726. lpRemoteName: LPWSTR;
  727. lpComment: LPWSTR;
  728. ns_info: NS_INFO;
  729. ServiceType: TGUID;
  730. dwProtocols: DWORD;
  731. lpiProtocols: PINT;
  732. end;
  733. {$EXTERNALSYM _NETRESOURCE2W}
  734. NETRESOURCE2W = _NETRESOURCE2W;
  735. {$EXTERNALSYM NETRESOURCE2W}
  736. TNetResource2W = NETRESOURCE2W;
  737. {$IFDEF UNICODE}
  738. NETRESOURCE2 = NETRESOURCE2W;
  739. {$EXTERNALSYM NETRESOURCE2}
  740. PNETRESOURCE2 = PNETRESOURCE2W;
  741. {$EXTERNALSYM PNETRESOURCE2}
  742. LPNETRESOURCE2 = LPNETRESOURCE2W;
  743. {$EXTERNALSYM LPNETRESOURCE2}
  744. TNetResource2 = TNetResource2W;
  745. {$ELSE}
  746. NETRESOURCE2 = NETRESOURCE2A;
  747. {$EXTERNALSYM NETRESOURCE2}
  748. PNETRESOURCE2 = PNETRESOURCE2A;
  749. {$EXTERNALSYM PNETRESOURCE2}
  750. LPNETRESOURCE2 = LPNETRESOURCE2A;
  751. {$EXTERNALSYM LPNETRESOURCE2}
  752. TNetResource2 = TNetResource2A;
  753. {$ENDIF UNICODE}
  754. LPFN_NSPAPI = function: DWORD; stdcall;
  755. {$EXTERNALSYM LPFN_NSPAPI}
  756. TFnNspApi = LPFN_NSPAPI;
  757. //
  758. // Structures for using the service routines asynchronously.
  759. //
  760. type
  761. LPSERVICE_CALLBACK_PROC = procedure(lParam: LPARAM; hAsyncTaskHandle: HANDLE); stdcall;
  762. {$EXTERNALSYM LPSERVICE_CALLBACK_PROC}
  763. TServiceCallbackProc = LPSERVICE_CALLBACK_PROC;
  764. type
  765. LPSERVICE_ASYNC_INFO = ^SERVICE_ASYNC_INFO;
  766. {$EXTERNALSYM LPSERVICE_ASYNC_INFO}
  767. PSERVICE_ASYNC_INFO = ^SERVICE_ASYNC_INFO;
  768. {$EXTERNALSYM PSERVICE_ASYNC_INFO}
  769. _SERVICE_ASYNC_INFO = record
  770. lpServiceCallbackProc: LPSERVICE_CALLBACK_PROC;
  771. lParam: LPARAM;
  772. hAsyncTaskHandle: HANDLE;
  773. end;
  774. {$EXTERNALSYM _SERVICE_ASYNC_INFO}
  775. SERVICE_ASYNC_INFO = _SERVICE_ASYNC_INFO;
  776. {$EXTERNALSYM SERVICE_ASYNC_INFO}
  777. TServiceAsyncInfo = SERVICE_ASYNC_INFO;
  778. PServiceAsyncInfo = LPSERVICE_ASYNC_INFO;
  779. //
  780. // Public NSP API prototypes.
  781. //
  782. function EnumProtocolsA(lpiProtocols: PINT; lpProtocolBuffer: LPVOID; lpdwBufferLength: LPDWORD): Integer; stdcall;
  783. {$EXTERNALSYM EnumProtocolsA}
  784. function EnumProtocolsW(lpiProtocols: PINT; lpProtocolBuffer: LPVOID; lpdwBufferLength: LPDWORD): Integer; stdcall;
  785. {$EXTERNALSYM EnumProtocolsW}
  786. function EnumProtocols(lpiProtocols: PINT; lpProtocolBuffer: LPVOID; lpdwBufferLength: LPDWORD): Integer; stdcall;
  787. {$EXTERNALSYM EnumProtocols}
  788. function GetAddressByNameA(dwNameSpace: DWORD; const lpServiceType: TGUID;
  789. lpServiceName: LPSTR; lpiProtocols: PINT; dwResolution: DWORD;
  790. lpServiceAsyncInfo: LPSERVICE_ASYNC_INFO; lpCsaddrBuffer: LPVOID;
  791. var lpdwBufferLength: DWORD; lpAliasBuffer: LPSTR; lpdwAliasBufferLength: LPDWORD): Integer; stdcall;
  792. {$EXTERNALSYM GetAddressByNameA}
  793. function GetAddressByNameW(dwNameSpace: DWORD; const lpServiceType: TGUID;
  794. lpServiceName: LPWSTR; lpiProtocols: PINT; dwResolution: DWORD;
  795. lpServiceAsyncInfo: LPSERVICE_ASYNC_INFO; lpCsaddrBuffer: LPVOID;
  796. var lpdwBufferLength: DWORD; lpAliasBuffer: LPWSTR; lpdwAliasBufferLength: LPDWORD): Integer; stdcall;
  797. {$EXTERNALSYM GetAddressByNameW}
  798. function GetAddressByName(dwNameSpace: DWORD; const lpServiceType: TGUID;
  799. lpServiceName: LPTSTR; lpiProtocols: PINT; dwResolution: DWORD;
  800. lpServiceAsyncInfo: LPSERVICE_ASYNC_INFO; lpCsaddrBuffer: LPVOID;
  801. var lpdwBufferLength: DWORD; lpAliasBuffer: LPTSTR; lpdwAliasBufferLength: LPDWORD): Integer; stdcall;
  802. {$EXTERNALSYM GetAddressByName}
  803. function GetTypeByNameA(lpServiceName: LPSTR; var lpServiceType: TGUID): Integer; stdcall;
  804. {$EXTERNALSYM GetTypeByNameA}
  805. function GetTypeByNameW(lpServiceName: LPWSTR; var lpServiceType: TGUID): Integer; stdcall;
  806. {$EXTERNALSYM GetTypeByNameW}
  807. function GetTypeByName(lpServiceName: LPTSTR; var lpServiceType: TGUID): Integer; stdcall;
  808. {$EXTERNALSYM GetTypeByName}
  809. function GetNameByTypeA(const lpServiceType: TGUID; lpServiceName: LPSTR; dwNameLength: DWORD): Integer; stdcall;
  810. {$EXTERNALSYM GetNameByTypeA}
  811. function GetNameByTypeW(const lpServiceType: TGUID; lpServiceName: LPWSTR; dwNameLength: DWORD): Integer; stdcall;
  812. {$EXTERNALSYM GetNameByTypeW}
  813. function GetNameByType(const lpServiceType: TGUID; lpServiceName: LPTSTR; dwNameLength: DWORD): Integer; stdcall;
  814. {$EXTERNALSYM GetNameByType}
  815. function SetServiceA(dwNameSpace, dwOperation, dwFlags: DWORD;
  816. const lpServiceInfo: SERVICE_INFOA; lpServiceAsyncInfo: LPSERVICE_ASYNC_INFO;
  817. var lpdwStatusFlags: DWORD): Integer; stdcall;
  818. {$EXTERNALSYM SetServiceA}
  819. function SetServiceW(dwNameSpace, dwOperation, dwFlags: DWORD;
  820. const lpServiceInfo: SERVICE_INFOW; lpServiceAsyncInfo: LPSERVICE_ASYNC_INFO;
  821. var lpdwStatusFlags: DWORD): Integer; stdcall;
  822. {$EXTERNALSYM SetServiceW}
  823. function SetService(dwNameSpace, dwOperation, dwFlags: DWORD;
  824. const lpServiceInfo: SERVICE_INFO; lpServiceAsyncInfo: LPSERVICE_ASYNC_INFO;
  825. var lpdwStatusFlags: DWORD): Integer; stdcall;
  826. {$EXTERNALSYM SetService}
  827. function GetServiceA(dwNameSpace: DWORD; const lpGuid: TGUID; lpServiceName: LPSTR;
  828. dwProperties: DWORD; lpBuffer: LPVOID; var lpdwBufferSize: DWORD;
  829. lpServiceAsyncInfo: LPSERVICE_ASYNC_INFO): Integer; stdcall;
  830. {$EXTERNALSYM GetServiceA}
  831. function GetServiceW(dwNameSpace: DWORD; const lpGuid: TGUID; lpServiceName: LPWSTR;
  832. dwProperties: DWORD; lpBuffer: LPVOID; var lpdwBufferSize: DWORD;
  833. lpServiceAsyncInfo: LPSERVICE_ASYNC_INFO): Integer; stdcall;
  834. {$EXTERNALSYM GetServiceW}
  835. function GetService(dwNameSpace: DWORD; const lpGuid: TGUID; lpServiceName: LPTSTR;
  836. dwProperties: DWORD; lpBuffer: LPVOID; var lpdwBufferSize: DWORD;
  837. lpServiceAsyncInfo: LPSERVICE_ASYNC_INFO): Integer; stdcall;
  838. {$EXTERNALSYM GetService}
  839. implementation
  840. uses
  841. JwaWinDLLNames;
  842. {$IFDEF DYNAMIC_LINK}
  843. var
  844. _EnumProtocolsA: Pointer;
  845. function EnumProtocolsA;
  846. begin
  847. GetProcedureAddress(_EnumProtocolsA, nsplib, 'EnumProtocolsA');
  848. asm
  849. MOV ESP, EBP
  850. POP EBP
  851. JMP [_EnumProtocolsA]
  852. end;
  853. end;
  854. var
  855. _EnumProtocolsW: Pointer;
  856. function EnumProtocolsW;
  857. begin
  858. GetProcedureAddress(_EnumProtocolsW, nsplib, 'EnumProtocolsW');
  859. asm
  860. MOV ESP, EBP
  861. POP EBP
  862. JMP [_EnumProtocolsW]
  863. end;
  864. end;
  865. var
  866. _EnumProtocols: Pointer;
  867. function EnumProtocols;
  868. begin
  869. GetProcedureAddress(_EnumProtocols, nsplib, 'EnumProtocols' + AWSuffix);
  870. asm
  871. MOV ESP, EBP
  872. POP EBP
  873. JMP [_EnumProtocols]
  874. end;
  875. end;
  876. var
  877. _GetAddressByNameA: Pointer;
  878. function GetAddressByNameA;
  879. begin
  880. GetProcedureAddress(_GetAddressByNameA, nsplib, 'GetAddressByNameA');
  881. asm
  882. MOV ESP, EBP
  883. POP EBP
  884. JMP [_GetAddressByNameA]
  885. end;
  886. end;
  887. var
  888. _GetAddressByNameW: Pointer;
  889. function GetAddressByNameW;
  890. begin
  891. GetProcedureAddress(_GetAddressByNameW, nsplib, 'GetAddressByNameW');
  892. asm
  893. MOV ESP, EBP
  894. POP EBP
  895. JMP [_GetAddressByNameW]
  896. end;
  897. end;
  898. var
  899. _GetAddressByName: Pointer;
  900. function GetAddressByName;
  901. begin
  902. GetProcedureAddress(_GetAddressByName, nsplib, 'GetAddressByName' + AWSuffix);
  903. asm
  904. MOV ESP, EBP
  905. POP EBP
  906. JMP [_GetAddressByName]
  907. end;
  908. end;
  909. var
  910. _GetTypeByNameA: Pointer;
  911. function GetTypeByNameA;
  912. begin
  913. GetProcedureAddress(_GetTypeByNameA, nsplib, 'GetTypeByNameA');
  914. asm
  915. MOV ESP, EBP
  916. POP EBP
  917. JMP [_GetTypeByNameA]
  918. end;
  919. end;
  920. var
  921. _GetTypeByNameW: Pointer;
  922. function GetTypeByNameW;
  923. begin
  924. GetProcedureAddress(_GetTypeByNameW, nsplib, 'GetTypeByNameW');
  925. asm
  926. MOV ESP, EBP
  927. POP EBP
  928. JMP [_GetTypeByNameW]
  929. end;
  930. end;
  931. var
  932. _GetTypeByName: Pointer;
  933. function GetTypeByName;
  934. begin
  935. GetProcedureAddress(_GetTypeByName, nsplib, 'GetTypeByName' + AWSuffix);
  936. asm
  937. MOV ESP, EBP
  938. POP EBP
  939. JMP [_GetTypeByName]
  940. end;
  941. end;
  942. var
  943. _GetNameByTypeA: Pointer;
  944. function GetNameByTypeA;
  945. begin
  946. GetProcedureAddress(_GetNameByTypeA, nsplib, 'GetNameByTypeA');
  947. asm
  948. MOV ESP, EBP
  949. POP EBP
  950. JMP [_GetNameByTypeA]
  951. end;
  952. end;
  953. var
  954. _GetNameByTypeW: Pointer;
  955. function GetNameByTypeW;
  956. begin
  957. GetProcedureAddress(_GetNameByTypeW, nsplib, 'GetNameByTypeW');
  958. asm
  959. MOV ESP, EBP
  960. POP EBP
  961. JMP [_GetNameByTypeW]
  962. end;
  963. end;
  964. var
  965. _GetNameByType: Pointer;
  966. function GetNameByType;
  967. begin
  968. GetProcedureAddress(_GetNameByType, nsplib, 'GetNameByType' + AWSuffix);
  969. asm
  970. MOV ESP, EBP
  971. POP EBP
  972. JMP [_GetNameByType]
  973. end;
  974. end;
  975. var
  976. _SetServiceA: Pointer;
  977. function SetServiceA;
  978. begin
  979. GetProcedureAddress(_SetServiceA, nsplib, 'SetServiceA');
  980. asm
  981. MOV ESP, EBP
  982. POP EBP
  983. JMP [_SetServiceA]
  984. end;
  985. end;
  986. var
  987. _SetServiceW: Pointer;
  988. function SetServiceW;
  989. begin
  990. GetProcedureAddress(_SetServiceW, nsplib, 'SetServiceW');
  991. asm
  992. MOV ESP, EBP
  993. POP EBP
  994. JMP [_SetServiceW]
  995. end;
  996. end;
  997. var
  998. _SetService: Pointer;
  999. function SetService;
  1000. begin
  1001. GetProcedureAddress(_SetService, nsplib, 'SetService' + AWSuffix);
  1002. asm
  1003. MOV ESP, EBP
  1004. POP EBP
  1005. JMP [_SetService]
  1006. end;
  1007. end;
  1008. var
  1009. _GetServiceA: Pointer;
  1010. function GetServiceA;
  1011. begin
  1012. GetProcedureAddress(_GetServiceA, nsplib, 'GetServiceA');
  1013. asm
  1014. MOV ESP, EBP
  1015. POP EBP
  1016. JMP [_GetServiceA]
  1017. end;
  1018. end;
  1019. var
  1020. _GetServiceW: Pointer;
  1021. function GetServiceW;
  1022. begin
  1023. GetProcedureAddress(_GetServiceW, nsplib, 'GetServiceW');
  1024. asm
  1025. MOV ESP, EBP
  1026. POP EBP
  1027. JMP [_GetServiceW]
  1028. end;
  1029. end;
  1030. var
  1031. _GetService: Pointer;
  1032. function GetService;
  1033. begin
  1034. GetProcedureAddress(_GetService, nsplib, 'GetService' + AWSuffix);
  1035. asm
  1036. MOV ESP, EBP
  1037. POP EBP
  1038. JMP [_GetService]
  1039. end;
  1040. end;
  1041. {$ELSE}
  1042. function EnumProtocolsA; external nsplib name 'EnumProtocolsA';
  1043. function EnumProtocolsW; external nsplib name 'EnumProtocolsW';
  1044. function EnumProtocols; external nsplib name 'EnumProtocols' + AWSuffix;
  1045. function GetAddressByNameA; external nsplib name 'GetAddressByNameA';
  1046. function GetAddressByNameW; external nsplib name 'GetAddressByNameW';
  1047. function GetAddressByName; external nsplib name 'GetAddressByName' + AWSuffix;
  1048. function GetTypeByNameA; external nsplib name 'GetTypeByNameA';
  1049. function GetTypeByNameW; external nsplib name 'GetTypeByNameW';
  1050. function GetTypeByName; external nsplib name 'GetTypeByName' + AWSuffix;
  1051. function GetNameByTypeA; external nsplib name 'GetNameByTypeA';
  1052. function GetNameByTypeW; external nsplib name 'GetNameByTypeW';
  1053. function GetNameByType; external nsplib name 'GetNameByType' + AWSuffix;
  1054. function SetServiceA; external nsplib name 'SetServiceA';
  1055. function SetServiceW; external nsplib name 'SetServiceW';
  1056. function SetService; external nsplib name 'SetService' + AWSuffix;
  1057. function GetServiceA; external nsplib name 'GetServiceA';
  1058. function GetServiceW; external nsplib name 'GetServiceW';
  1059. function GetService; external nsplib name 'GetService' + AWSuffix;
  1060. {$ENDIF DYNAMIC_LINK}
  1061. end.