jwadhcpcsdk.pas 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. {******************************************************************************}
  2. { }
  3. { DHCP Client 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: dhcpcsdk.h, released June 2000. The original Pascal }
  9. { code is: DhcpCSdk.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: JwaDhcpCSdk.pas,v 1.11 2007/09/06 14:57:11 marquardt Exp $
  43. {$IFNDEF JWA_OMIT_SECTIONS}
  44. unit JwaDhcpCSdk;
  45. {$WEAKPACKAGEUNIT}
  46. {$ENDIF JWA_OMIT_SECTIONS}
  47. {$HPPEMIT ''}
  48. {$HPPEMIT '#include "dhcpcsdk.h"'}
  49. {$HPPEMIT ''}
  50. {$IFNDEF JWA_OMIT_SECTIONS}
  51. {$I jediapilib.inc}
  52. interface
  53. uses
  54. JwaWinType;
  55. {$ENDIF JWA_OMIT_SECTIONS}
  56. {$IFNDEF JWA_IMPLEMENTATIONSECTION}
  57. //
  58. // DHCP Standard Options.
  59. //
  60. const
  61. OPTION_PAD = 0;
  62. {$EXTERNALSYM OPTION_PAD}
  63. OPTION_SUBNET_MASK = 1;
  64. {$EXTERNALSYM OPTION_SUBNET_MASK}
  65. OPTION_TIME_OFFSET = 2;
  66. {$EXTERNALSYM OPTION_TIME_OFFSET}
  67. OPTION_ROUTER_ADDRESS = 3;
  68. {$EXTERNALSYM OPTION_ROUTER_ADDRESS}
  69. OPTION_TIME_SERVERS = 4;
  70. {$EXTERNALSYM OPTION_TIME_SERVERS}
  71. OPTION_IEN116_NAME_SERVERS = 5;
  72. {$EXTERNALSYM OPTION_IEN116_NAME_SERVERS}
  73. OPTION_DOMAIN_NAME_SERVERS = 6;
  74. {$EXTERNALSYM OPTION_DOMAIN_NAME_SERVERS}
  75. OPTION_LOG_SERVERS = 7;
  76. {$EXTERNALSYM OPTION_LOG_SERVERS}
  77. OPTION_COOKIE_SERVERS = 8;
  78. {$EXTERNALSYM OPTION_COOKIE_SERVERS}
  79. OPTION_LPR_SERVERS = 9;
  80. {$EXTERNALSYM OPTION_LPR_SERVERS}
  81. OPTION_IMPRESS_SERVERS = 10;
  82. {$EXTERNALSYM OPTION_IMPRESS_SERVERS}
  83. OPTION_RLP_SERVERS = 11;
  84. {$EXTERNALSYM OPTION_RLP_SERVERS}
  85. OPTION_HOST_NAME = 12;
  86. {$EXTERNALSYM OPTION_HOST_NAME}
  87. OPTION_BOOT_FILE_SIZE = 13;
  88. {$EXTERNALSYM OPTION_BOOT_FILE_SIZE}
  89. OPTION_MERIT_DUMP_FILE = 14;
  90. {$EXTERNALSYM OPTION_MERIT_DUMP_FILE}
  91. OPTION_DOMAIN_NAME = 15;
  92. {$EXTERNALSYM OPTION_DOMAIN_NAME}
  93. OPTION_SWAP_SERVER = 16;
  94. {$EXTERNALSYM OPTION_SWAP_SERVER}
  95. OPTION_ROOT_DISK = 17;
  96. {$EXTERNALSYM OPTION_ROOT_DISK}
  97. OPTION_EXTENSIONS_PATH = 18;
  98. {$EXTERNALSYM OPTION_EXTENSIONS_PATH}
  99. //
  100. // IP layer parameters - per host
  101. //
  102. OPTION_BE_A_ROUTER = 19;
  103. {$EXTERNALSYM OPTION_BE_A_ROUTER}
  104. OPTION_NON_LOCAL_SOURCE_ROUTING = 20;
  105. {$EXTERNALSYM OPTION_NON_LOCAL_SOURCE_ROUTING}
  106. OPTION_POLICY_FILTER_FOR_NLSR = 21;
  107. {$EXTERNALSYM OPTION_POLICY_FILTER_FOR_NLSR}
  108. OPTION_MAX_REASSEMBLY_SIZE = 22;
  109. {$EXTERNALSYM OPTION_MAX_REASSEMBLY_SIZE}
  110. OPTION_DEFAULT_TTL = 23;
  111. {$EXTERNALSYM OPTION_DEFAULT_TTL}
  112. OPTION_PMTU_AGING_TIMEOUT = 24;
  113. {$EXTERNALSYM OPTION_PMTU_AGING_TIMEOUT}
  114. OPTION_PMTU_PLATEAU_TABLE = 25;
  115. {$EXTERNALSYM OPTION_PMTU_PLATEAU_TABLE}
  116. //
  117. // Link layer parameters - per interface.
  118. //
  119. OPTION_MTU = 26;
  120. {$EXTERNALSYM OPTION_MTU}
  121. OPTION_ALL_SUBNETS_MTU = 27;
  122. {$EXTERNALSYM OPTION_ALL_SUBNETS_MTU}
  123. OPTION_BROADCAST_ADDRESS = 28;
  124. {$EXTERNALSYM OPTION_BROADCAST_ADDRESS}
  125. OPTION_PERFORM_MASK_DISCOVERY = 29;
  126. {$EXTERNALSYM OPTION_PERFORM_MASK_DISCOVERY}
  127. OPTION_BE_A_MASK_SUPPLIER = 30;
  128. {$EXTERNALSYM OPTION_BE_A_MASK_SUPPLIER}
  129. OPTION_PERFORM_ROUTER_DISCOVERY = 31;
  130. {$EXTERNALSYM OPTION_PERFORM_ROUTER_DISCOVERY}
  131. OPTION_ROUTER_SOLICITATION_ADDR = 32;
  132. {$EXTERNALSYM OPTION_ROUTER_SOLICITATION_ADDR}
  133. OPTION_STATIC_ROUTES = 33;
  134. {$EXTERNALSYM OPTION_STATIC_ROUTES}
  135. OPTION_TRAILERS = 34;
  136. {$EXTERNALSYM OPTION_TRAILERS}
  137. OPTION_ARP_CACHE_TIMEOUT = 35;
  138. {$EXTERNALSYM OPTION_ARP_CACHE_TIMEOUT}
  139. OPTION_ETHERNET_ENCAPSULATION = 36;
  140. {$EXTERNALSYM OPTION_ETHERNET_ENCAPSULATION}
  141. //
  142. // TCP Paramters - per host
  143. //
  144. OPTION_TTL = 37;
  145. {$EXTERNALSYM OPTION_TTL}
  146. OPTION_KEEP_ALIVE_INTERVAL = 38;
  147. {$EXTERNALSYM OPTION_KEEP_ALIVE_INTERVAL}
  148. OPTION_KEEP_ALIVE_DATA_SIZE = 39;
  149. {$EXTERNALSYM OPTION_KEEP_ALIVE_DATA_SIZE}
  150. //
  151. // Application Layer Parameters
  152. //
  153. OPTION_NETWORK_INFO_SERVICE_DOM = 40;
  154. {$EXTERNALSYM OPTION_NETWORK_INFO_SERVICE_DOM}
  155. OPTION_NETWORK_INFO_SERVERS = 41;
  156. {$EXTERNALSYM OPTION_NETWORK_INFO_SERVERS}
  157. OPTION_NETWORK_TIME_SERVERS = 42;
  158. {$EXTERNALSYM OPTION_NETWORK_TIME_SERVERS}
  159. //
  160. // Vender specific information option
  161. //
  162. OPTION_VENDOR_SPEC_INFO = 43;
  163. {$EXTERNALSYM OPTION_VENDOR_SPEC_INFO}
  164. //
  165. // NetBIOS over TCP/IP Name server option
  166. //
  167. OPTION_NETBIOS_NAME_SERVER = 44;
  168. {$EXTERNALSYM OPTION_NETBIOS_NAME_SERVER}
  169. OPTION_NETBIOS_DATAGRAM_SERVER = 45;
  170. {$EXTERNALSYM OPTION_NETBIOS_DATAGRAM_SERVER}
  171. OPTION_NETBIOS_NODE_TYPE = 46;
  172. {$EXTERNALSYM OPTION_NETBIOS_NODE_TYPE}
  173. OPTION_NETBIOS_SCOPE_OPTION = 47;
  174. {$EXTERNALSYM OPTION_NETBIOS_SCOPE_OPTION}
  175. //
  176. // X Window System Options.
  177. //
  178. OPTION_XWINDOW_FONT_SERVER = 48;
  179. {$EXTERNALSYM OPTION_XWINDOW_FONT_SERVER}
  180. OPTION_XWINDOW_DISPLAY_MANAGER = 49;
  181. {$EXTERNALSYM OPTION_XWINDOW_DISPLAY_MANAGER}
  182. //
  183. // Other extensions
  184. //
  185. OPTION_REQUESTED_ADDRESS = 50;
  186. {$EXTERNALSYM OPTION_REQUESTED_ADDRESS}
  187. OPTION_LEASE_TIME = 51;
  188. {$EXTERNALSYM OPTION_LEASE_TIME}
  189. OPTION_OK_TO_OVERLAY = 52;
  190. {$EXTERNALSYM OPTION_OK_TO_OVERLAY}
  191. OPTION_MESSAGE_TYPE = 53;
  192. {$EXTERNALSYM OPTION_MESSAGE_TYPE}
  193. OPTION_SERVER_IDENTIFIER = 54;
  194. {$EXTERNALSYM OPTION_SERVER_IDENTIFIER}
  195. OPTION_PARAMETER_REQUEST_LIST = 55;
  196. {$EXTERNALSYM OPTION_PARAMETER_REQUEST_LIST}
  197. OPTION_MESSAGE = 56;
  198. {$EXTERNALSYM OPTION_MESSAGE}
  199. OPTION_MESSAGE_LENGTH = 57;
  200. {$EXTERNALSYM OPTION_MESSAGE_LENGTH}
  201. OPTION_RENEWAL_TIME = 58; // T1
  202. {$EXTERNALSYM OPTION_RENEWAL_TIME}
  203. OPTION_REBIND_TIME = 59; // T2
  204. {$EXTERNALSYM OPTION_REBIND_TIME}
  205. OPTION_CLIENT_CLASS_INFO = 60;
  206. {$EXTERNALSYM OPTION_CLIENT_CLASS_INFO}
  207. OPTION_CLIENT_ID = 61;
  208. {$EXTERNALSYM OPTION_CLIENT_ID}
  209. OPTION_TFTP_SERVER_NAME = 66;
  210. {$EXTERNALSYM OPTION_TFTP_SERVER_NAME}
  211. OPTION_BOOTFILE_NAME = 67;
  212. {$EXTERNALSYM OPTION_BOOTFILE_NAME}
  213. OPTION_END = 255;
  214. {$EXTERNALSYM OPTION_END}
  215. type
  216. _DHCPAPI_PARAMS = record
  217. Flags: ULONG; // for future use
  218. OptionId: ULONG; // what option is this?
  219. IsVendor: BOOL; // is this vendor specific?
  220. Data: LPBYTE; // the actual data
  221. nBytesData: DWORD; // how many bytes of data are there in Data?
  222. end;
  223. {$EXTERNALSYM _DHCPAPI_PARAMS}
  224. DHCPAPI_PARAMS = _DHCPAPI_PARAMS;
  225. {$EXTERNALSYM DHCPAPI_PARAMS}
  226. LPDHCPAPI_PARAMS = ^DHCPAPI_PARAMS;
  227. {$EXTERNALSYM LPDHCPAPI_PARAMS}
  228. PDHCPAPI_PARAMS = ^DHCPAPI_PARAMS;
  229. {$EXTERNALSYM PDHCPAPI_PARAMS}
  230. TDhcpApiParams = DHCPAPI_PARAMS;
  231. PDhcpApiParams = PDHCPAPI_PARAMS;
  232. DHCPCAPI_PARAMS = DHCPAPI_PARAMS;
  233. {$EXTERNALSYM DHCPCAPI_PARAMS}
  234. PDHCPCAPI_PARAMS = ^DHCPCAPI_PARAMS;
  235. {$EXTERNALSYM PDHCPCAPI_PARAMS}
  236. LPDHCPCAPI_PARAMS = ^DHCPCAPI_PARAMS;
  237. {$EXTERNALSYM LPDHCPCAPI_PARAMS}
  238. TDhcpCApiParams = DHCPCAPI_PARAMS;
  239. PDhcpCApiParams = PDHCPCAPI_PARAMS;
  240. _DHCPCAPI_PARAMS_ARRAY = record
  241. nParams: ULONG; // size of array
  242. Params: PDHCPCAPI_PARAMS; // actual array
  243. end;
  244. {$EXTERNALSYM _DHCPCAPI_PARAMS_ARRAY}
  245. DHCPCAPI_PARAMS_ARRAY = _DHCPCAPI_PARAMS_ARRAY;
  246. {$EXTERNALSYM DHCPCAPI_PARAMS_ARRAY}
  247. LPDHCPCAPI_PARAMS_ARRAY = ^DHCPCAPI_PARAMS_ARRAY;
  248. {$EXTERNALSYM LPDHCPCAPI_PARAMS_ARRAY}
  249. PDHCPCAPI_PARAMS_ARRAY = ^DHCPCAPI_PARAMS_ARRAY;
  250. {$EXTERNALSYM PDHCPCAPI_PARAMS_ARRAY}
  251. TDhcpcApiParamsArray = DHCPCAPI_PARAMS_ARRAY;
  252. PDhcpcApiParamsArray = PDHCPCAPI_PARAMS_ARRAY;
  253. _DHCPCAPI_CLASSID = record
  254. Flags: ULONG; // must be zero currently.
  255. Data: LPBYTE; // classid binary data.
  256. nBytesData: ULONG; // how many bytes of data are there?
  257. end;
  258. {$EXTERNALSYM _DHCPCAPI_CLASSID}
  259. DHCPCAPI_CLASSID = _DHCPCAPI_CLASSID;
  260. {$EXTERNALSYM DHCPCAPI_CLASSID}
  261. LPDHCPCAPI_CLASSID = ^DHCPCAPI_CLASSID;
  262. {$EXTERNALSYM LPDHCPCAPI_CLASSID}
  263. PDHCPCAPI_CLASSID = ^DHCPCAPI_CLASSID;
  264. {$EXTERNALSYM PDHCPCAPI_CLASSID}
  265. TDhcpcApiClassId = DHCPCAPI_CLASSID;
  266. PDhcpcApiClassId = PDHCPCAPI_CLASSID;
  267. const
  268. DHCPCAPI_REQUEST_PERSISTENT = $01; // request this options "permanently"
  269. {$EXTERNALSYM DHCPCAPI_REQUEST_PERSISTENT}
  270. DHCPCAPI_REQUEST_SYNCHRONOUS = $02; // request and block on it
  271. {$EXTERNALSYM DHCPCAPI_REQUEST_SYNCHRONOUS}
  272. DHCPCAPI_REQUEST_ASYNCHRONOUS = $04; // request and return, set event on completion
  273. {$EXTERNALSYM DHCPCAPI_REQUEST_ASYNCHRONOUS}
  274. DHCPCAPI_REQUEST_CANCEL = $08; // cancel request
  275. {$EXTERNALSYM DHCPCAPI_REQUEST_CANCEL}
  276. DHCPCAPI_REQUEST_MASK = $0F; // allowed flags..
  277. {$EXTERNALSYM DHCPCAPI_REQUEST_MASK}
  278. function DhcpCApiInitialize(var Version: DWORD): DWORD; stdcall;
  279. {$EXTERNALSYM DhcpCApiInitialize}
  280. procedure DhcpCApiCleanup; stdcall;
  281. {$EXTERNALSYM DhcpCApiCleanup}
  282. function DhcpRequestParams(Flags: DWORD; Reserved: LPVOID; AdapterName: LPWSTR;
  283. ClassId: PDHCPCAPI_CLASSID; SendParams, RecdParams: DHCPCAPI_PARAMS_ARRAY;
  284. Buffer: LPBYTE; pSize: LPDWORD; RequestIdStr: LPWSTR): DWORD; stdcall;
  285. {$EXTERNALSYM DhcpRequestParams}
  286. function DhcpUndoRequestParams(Flags: DWORD; Reserved: LPVOID; AdapterName: LPWSTR;
  287. RequestIdStr: LPWSTR): DWORD; stdcall;
  288. {$EXTERNALSYM DhcpUndoRequestParams}
  289. const
  290. DHCPCAPI_REGISTER_HANDLE_EVENT = $01; // handle returned is to an event
  291. {$EXTERNALSYM DHCPCAPI_REGISTER_HANDLE_EVENT}
  292. function DhcpRegisterParamChange(Flags: DWORD; Reserved: LPVOID; AdapterName: LPWSTR;
  293. ClassId: PDHCPCAPI_CLASSID; Params: DHCPCAPI_PARAMS_ARRAY; Handle: LPVOID): DWORD; stdcall;
  294. {$EXTERNALSYM DhcpRegisterParamChange}
  295. const
  296. DHCPCAPI_DEREGISTER_HANDLE_EVENT = $01; // de-register handle that is an event
  297. {$EXTERNALSYM DHCPCAPI_DEREGISTER_HANDLE_EVENT}
  298. function DhcpDeRegisterParamChange(Flags: DWORD; Reserved, Event: LPVOID): DWORD; stdcall;
  299. {$EXTERNALSYM DhcpDeRegisterParamChange}
  300. function DhcpRemoveDNSRegistrations: DWORD; stdcall;
  301. {$EXTERNALSYM DhcpRemoveDNSRegistrations}
  302. {$ENDIF JWA_IMPLEMENTATIONSECTION}
  303. {$IFNDEF JWA_OMIT_SECTIONS}
  304. implementation
  305. //uses ...
  306. {$ENDIF JWA_OMIT_SECTIONS}
  307. {$IFNDEF JWA_INTERFACESECTION}
  308. {$IFNDEF JWA_INCLUDEMODE}
  309. const
  310. dhcpapi = 'dhcpcsvc.dll';
  311. {$ENDIF JWA_INCLUDEMODE}
  312. {$IFDEF DYNAMIC_LINK}
  313. var
  314. _DhcpCApiInitialize: Pointer;
  315. function DhcpCApiInitialize;
  316. begin
  317. GetProcedureAddress(_DhcpCApiInitialize, dhcpapi, 'DhcpCApiInitialize');
  318. asm
  319. MOV ESP, EBP
  320. POP EBP
  321. JMP [_DhcpCApiInitialize]
  322. end;
  323. end;
  324. var
  325. _DhcpCApiCleanup: Pointer;
  326. procedure DhcpCApiCleanup;
  327. begin
  328. GetProcedureAddress(_DhcpCApiCleanup, dhcpapi, 'DhcpCApiCleanup');
  329. asm
  330. MOV ESP, EBP
  331. POP EBP
  332. JMP [_DhcpCApiCleanup]
  333. end;
  334. end;
  335. var
  336. _DhcpRequestParams: Pointer;
  337. function DhcpRequestParams;
  338. begin
  339. GetProcedureAddress(_DhcpRequestParams, dhcpapi, 'DhcpRequestParams');
  340. asm
  341. MOV ESP, EBP
  342. POP EBP
  343. JMP [_DhcpRequestParams]
  344. end;
  345. end;
  346. var
  347. _DhcpUndoRequestParams: Pointer;
  348. function DhcpUndoRequestParams;
  349. begin
  350. GetProcedureAddress(_DhcpUndoRequestParams, dhcpapi, 'DhcpUndoRequestParams');
  351. asm
  352. MOV ESP, EBP
  353. POP EBP
  354. JMP [_DhcpUndoRequestParams]
  355. end;
  356. end;
  357. var
  358. _DhcpRegisterParamChange: Pointer;
  359. function DhcpRegisterParamChange;
  360. begin
  361. GetProcedureAddress(_DhcpRegisterParamChange, dhcpapi, 'DhcpRegisterParamChange');
  362. asm
  363. MOV ESP, EBP
  364. POP EBP
  365. JMP [_DhcpRegisterParamChange]
  366. end;
  367. end;
  368. var
  369. _DhcpDeRegisterParamChange: Pointer;
  370. function DhcpDeRegisterParamChange;
  371. begin
  372. GetProcedureAddress(_DhcpDeRegisterParamChange, dhcpapi, 'DhcpDeRegisterParamChange');
  373. asm
  374. MOV ESP, EBP
  375. POP EBP
  376. JMP [_DhcpDeRegisterParamChange]
  377. end;
  378. end;
  379. var
  380. _DhcpRemoveDNSRegistrations: Pointer;
  381. function DhcpRemoveDNSRegistrations;
  382. begin
  383. GetProcedureAddress(_DhcpRemoveDNSRegistrations, dhcpapi, 'DhcpRemoveDNSRegistrations');
  384. asm
  385. MOV ESP, EBP
  386. POP EBP
  387. JMP [_DhcpRemoveDNSRegistrations]
  388. end;
  389. end;
  390. {$ELSE}
  391. function DhcpCApiInitialize; external dhcpapi name 'DhcpCApiInitialize';
  392. procedure DhcpCApiCleanup; external dhcpapi name 'DhcpCApiCleanup';
  393. function DhcpRequestParams; external dhcpapi name 'DhcpRequestParams';
  394. function DhcpUndoRequestParams; external dhcpapi name 'DhcpUndoRequestParams';
  395. function DhcpRegisterParamChange; external dhcpapi name 'DhcpRegisterParamChange';
  396. function DhcpDeRegisterParamChange; external dhcpapi name 'DhcpDeRegisterParamChange';
  397. function DhcpRemoveDNSRegistrations; external dhcpapi name 'DhcpRemoveDNSRegistrations';
  398. {$ENDIF DYNAMIC_LINK}
  399. {$ENDIF JWA_INTERFACESECTION}
  400. {$IFNDEF JWA_OMIT_SECTIONS}
  401. end.
  402. {$ENDIF JWA_OMIT_SECTIONS}