jwanspapi.pas 34 KB

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