jwadhcpsapi.pas 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. {******************************************************************************}
  2. { }
  3. { DHCP Server Management 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: dhcpsapi.h, released Feb 2003. The original Pascal }
  9. { code is: DhcpsApi.pas, released December 2003. 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 JwaDhcpsApi;
  43. {$WEAKPACKAGEUNIT}
  44. {$HPPEMIT ''}
  45. {$HPPEMIT '#include "dhcpsapi.h"'}
  46. {$HPPEMIT ''}
  47. {$I jediapilib.inc}
  48. interface
  49. uses
  50. JwaWinType;
  51. type
  52. DHCP_IP_ADDRESS = DWORD;
  53. {$EXTERNALSYM DHCP_IP_ADDRESS}
  54. PDHCP_IP_ADDRESS = ^DHCP_IP_ADDRESS;
  55. {$EXTERNALSYM PDHCP_IP_ADDRESS}
  56. LPDHCP_IP_ADDRESS = ^DHCP_IP_ADDRESS;
  57. {$EXTERNALSYM LPDHCP_IP_ADDRESS}
  58. TDhcpIpAddress = DHCP_IP_ADDRESS;
  59. PDhcpIpAddress = ^DHCP_IP_ADDRESS;
  60. DHCP_IP_MASK = DWORD;
  61. {$EXTERNALSYM DHCP_IP_MASK}
  62. TDhcpIpMask = DHCP_IP_MASK;
  63. DHCP_RESUME_HANDLE = DWORD;
  64. {$EXTERNALSYM DHCP_RESUME_HANDLE}
  65. TDhcpResumeHandle = DHCP_RESUME_HANDLE;
  66. DHCP_OPTION_ID = DWORD;
  67. {$EXTERNALSYM DHCP_OPTION_ID}
  68. TDhcpOptionID = DHCP_OPTION_ID;
  69. _DATE_TIME = record
  70. dwLowDateTime: DWORD;
  71. dwHighDateTime: DWORD;
  72. end;
  73. {$EXTERNALSYM _DATE_TIME}
  74. DATE_TIME = _DATE_TIME;
  75. {$EXTERNALSYM DATE_TIME}
  76. LPDATE_TIME = ^DATE_TIME;
  77. {$EXTERNALSYM LPDATE_TIME}
  78. TDateTime = DATE_TIME;
  79. PDateTime = ^DATE_TIME;
  80. _DWORD_DWORD = record
  81. DWord1: DWORD;
  82. DWord2: DWORD;
  83. end;
  84. {$EXTERNALSYM _DWORD_DWORD}
  85. DWORD_DWORD = _DWORD_DWORD;
  86. {$EXTERNALSYM DWORD_DWORD}
  87. LPDWORD_DWORD = ^DWORD_DWORD;
  88. {$EXTERNALSYM LPDWORD_DWORD}
  89. TDwordDword = DWORD_DWORD;
  90. PDwordDword = ^DWORD_DWORD;
  91. _DHCP_BINARY_DATA = record
  92. DataLength: DWORD;
  93. Data: LPBYTE;
  94. end;
  95. {$EXTERNALSYM _DHCP_BINARY_DATA}
  96. DHCP_BINARY_DATA = _DHCP_BINARY_DATA;
  97. {$EXTERNALSYM DHCP_BINARY_DATA}
  98. LPDHCP_BINARY_DATA = ^DHCP_BINARY_DATA;
  99. {$EXTERNALSYM LPDHCP_BINARY_DATA}
  100. TDhcpBinaryData = DHCP_BINARY_DATA;
  101. PDhcpBinaryData = ^DHCP_BINARY_DATA;
  102. DHCP_CLIENT_UID = DHCP_BINARY_DATA;
  103. {$EXTERNALSYM DHCP_CLIENT_UID}
  104. TDhcpClientUid = DHCP_CLIENT_UID;
  105. const
  106. DHCP_ENDPOINT_FLAG_CANT_MODIFY = $01;
  107. {$EXTERNALSYM DHCP_ENDPOINT_FLAG_CANT_MODIFY}
  108. type
  109. _DHCP_BIND_ELEMENT = record
  110. Flags: ULONG;
  111. fBoundToDHCPServer: BOOL;
  112. AdapterPrimaryAddress: DHCP_IP_ADDRESS;
  113. AdapterSubnetAddress: DHCP_IP_ADDRESS;
  114. IfDescription: LPWSTR;
  115. IfIdSize: ULONG;
  116. IfId: LPBYTE;
  117. end;
  118. {$EXTERNALSYM _DHCP_BIND_ELEMENT}
  119. DHCP_BIND_ELEMENT = _DHCP_BIND_ELEMENT;
  120. {$EXTERNALSYM DHCP_BIND_ELEMENT}
  121. LPDHCP_BIND_ELEMENT = ^DHCP_BIND_ELEMENT;
  122. {$EXTERNALSYM LPDHCP_BIND_ELEMENT}
  123. TDhcpBindElement = DHCP_BIND_ELEMENT;
  124. PDhcpBindElement = ^DHCP_BIND_ELEMENT;
  125. _DHCP_BIND_ELEMENT_ARRAY = record
  126. NumElements: DWORD;
  127. Elements: LPDHCP_BIND_ELEMENT; //array
  128. end;
  129. {$EXTERNALSYM _DHCP_BIND_ELEMENT_ARRAY}
  130. DHCP_BIND_ELEMENT_ARRAY = _DHCP_BIND_ELEMENT_ARRAY;
  131. {$EXTERNALSYM DHCP_BIND_ELEMENT_ARRAY}
  132. LPDHCP_BIND_ELEMENT_ARRAY = ^DHCP_BIND_ELEMENT_ARRAY;
  133. {$EXTERNALSYM LPDHCP_BIND_ELEMENT_ARRAY}
  134. TDhcpBindElementArray = DHCP_BIND_ELEMENT_ARRAY;
  135. PDhcpBindElementArray = ^DHCP_BIND_ELEMENT_ARRAY;
  136. _DHCP_CLIENT_SEARCH_TYPE = (
  137. DhcpClientIpAddress,
  138. DhcpClientHardwareAddress,
  139. DhcpClientName);
  140. {$EXTERNALSYM _DHCP_CLIENT_SEARCH_TYPE}
  141. DHCP_SEARCH_INFO_TYPE = _DHCP_CLIENT_SEARCH_TYPE;
  142. {$EXTERNALSYM DHCP_SEARCH_INFO_TYPE}
  143. LPDHCP_SEARCH_INFO_TYPE = ^DHCP_SEARCH_INFO_TYPE;
  144. {$EXTERNALSYM LPDHCP_SEARCH_INFO_TYPE}
  145. TDhcpSearchInfoType = DHCP_SEARCH_INFO_TYPE;
  146. PDhcpSearchInfoType = ^DHCP_SEARCH_INFO_TYPE;
  147. _DHCP_CLIENT_SEARCH_UNION = record
  148. case Integer of
  149. 0: (ClientIpAddress: DHCP_IP_ADDRESS);
  150. 1: (ClientHardwareAddress: DHCP_CLIENT_UID);
  151. 2: (ClientName: LPWSTR);
  152. end;
  153. {$EXTERNALSYM _DHCP_CLIENT_SEARCH_UNION}
  154. _DHCP_CLIENT_SEARCH_INFO = record
  155. SearchType: DHCP_SEARCH_INFO_TYPE;
  156. SearchInfo: _DHCP_CLIENT_SEARCH_UNION;
  157. end;
  158. {$EXTERNALSYM _DHCP_CLIENT_SEARCH_INFO}
  159. DHCP_SEARCH_INFO = _DHCP_CLIENT_SEARCH_INFO;
  160. {$EXTERNALSYM DHCP_SEARCH_INFO}
  161. LPDHCP_SEARCH_INFO = ^DHCP_SEARCH_INFO;
  162. {$EXTERNALSYM LPDHCP_SEARCH_INFO}
  163. TDhcpSearchInfo = DHCP_SEARCH_INFO;
  164. PDhcpSearchInfo = ^DHCP_SEARCH_INFO;
  165. _DHCP_OPTION_SCOPE_TYPE = (
  166. DhcpDefaultOptions,
  167. DhcpGlobalOptions,
  168. DhcpSubnetOptions,
  169. DhcpReservedOptions,
  170. DhcpMScopeOptions);
  171. {$EXTERNALSYM _DHCP_OPTION_SCOPE_TYPE}
  172. DHCP_OPTION_SCOPE_TYPE = _DHCP_OPTION_SCOPE_TYPE;
  173. {$EXTERNALSYM DHCP_OPTION_SCOPE_TYPE}
  174. LPDHCP_OPTION_SCOPE_TYPE = ^DHCP_OPTION_SCOPE_TYPE;
  175. {$EXTERNALSYM LPDHCP_OPTION_SCOPE_TYPE}
  176. TDhcpOptionScopeType = DHCP_OPTION_SCOPE_TYPE;
  177. PDhcpOptionScopeType = ^DHCP_OPTION_SCOPE_TYPE;
  178. _DHCP_RESERVED_SCOPE = record
  179. ReservedIpAddress: DHCP_IP_ADDRESS;
  180. ReservedIpSubnetAddress: DHCP_IP_ADDRESS;
  181. end;
  182. {$EXTERNALSYM _DHCP_RESERVED_SCOPE}
  183. DHCP_RESERVED_SCOPE = _DHCP_RESERVED_SCOPE;
  184. {$EXTERNALSYM DHCP_RESERVED_SCOPE}
  185. LPDHCP_RESERVED_SCOPE = ^DHCP_RESERVED_SCOPE;
  186. {$EXTERNALSYM LPDHCP_RESERVED_SCOPE}
  187. TDhcpReservedScope = DHCP_RESERVED_SCOPE;
  188. PDhcpReservedScope = ^DHCP_RESERVED_SCOPE;
  189. _DHCP_OPTION_SCOPE_UNION = record
  190. case Integer of
  191. 0: (DefaultScopeInfo: PVOID); // must be NULL
  192. 1: (GlobalScopeInfo: PVOID); // must be NULL
  193. 2: (SubnetScopeInfo: DHCP_IP_ADDRESS);
  194. 3: (ReservedScopeInfo: DHCP_RESERVED_SCOPE);
  195. 4: (MScopeInfo: LPWSTR);
  196. end;
  197. {$EXTERNALSYM _DHCP_OPTION_SCOPE_UNION}
  198. _DHCP_OPTION_SCOPE_INFO = record
  199. ScopeType: DHCP_OPTION_SCOPE_TYPE;
  200. ScopeInfo: _DHCP_OPTION_SCOPE_UNION;
  201. end;
  202. {$EXTERNALSYM _DHCP_OPTION_SCOPE_INFO}
  203. DHCP_OPTION_SCOPE_INFO = _DHCP_OPTION_SCOPE_INFO;
  204. {$EXTERNALSYM DHCP_OPTION_SCOPE_INFO}
  205. LPDHCP_OPTION_SCOPE_INFO = ^DHCP_OPTION_SCOPE_INFO;
  206. {$EXTERNALSYM LPDHCP_OPTION_SCOPE_INFO}
  207. TDhcpOptionScopeInfo = DHCP_OPTION_SCOPE_INFO;
  208. PDhcpOptionScopeInfo = ^DHCP_OPTION_SCOPE_INFO;
  209. _DHCP_HOST_INFO = record
  210. IpAddress: DHCP_IP_ADDRESS; // minimum information always available
  211. NetBiosName: LPWSTR; // optional information
  212. HostName: LPWSTR; // optional information
  213. end;
  214. {$EXTERNALSYM _DHCP_HOST_INFO}
  215. DHCP_HOST_INFO = _DHCP_HOST_INFO;
  216. {$EXTERNALSYM DHCP_HOST_INFO}
  217. LPDHCP_HOST_INFO = ^DHCP_HOST_INFO;
  218. {$EXTERNALSYM LPDHCP_HOST_INFO}
  219. TDhcpHostInfo = DHCP_HOST_INFO;
  220. PDhcpHostInfo = ^DHCP_HOST_INFO;
  221. _DHCP_CLIENT_INFO = record
  222. ClientIpAddress: DHCP_IP_ADDRESS; // currently assigned IP address.
  223. SubnetMask: DHCP_IP_MASK;
  224. ClientHardwareAddress: DHCP_CLIENT_UID;
  225. ClientName: LPWSTR; // optional.
  226. ClientComment: LPWSTR;
  227. ClientLeaseExpires: DATE_TIME; // UTC time in FILE_TIME format.
  228. OwnerHost: DHCP_HOST_INFO; // host that distributed this IP address.
  229. end;
  230. {$EXTERNALSYM _DHCP_CLIENT_INFO}
  231. DHCP_CLIENT_INFO = _DHCP_CLIENT_INFO;
  232. {$EXTERNALSYM DHCP_CLIENT_INFO}
  233. LPDHCP_CLIENT_INFO = ^DHCP_CLIENT_INFO;
  234. {$EXTERNALSYM LPDHCP_CLIENT_INFO}
  235. TDhcpClientInfo = DHCP_CLIENT_INFO;
  236. PDhcpClientInfo = ^DHCP_CLIENT_INFO;
  237. _DHCP_CLIENT_INFO_ARRAY = record
  238. NumElements: DWORD;
  239. Clients: ^LPDHCP_CLIENT_INFO; // array of pointers\
  240. end;
  241. {$EXTERNALSYM _DHCP_CLIENT_INFO_ARRAY}
  242. DHCP_CLIENT_INFO_ARRAY = _DHCP_CLIENT_INFO_ARRAY;
  243. {$EXTERNALSYM DHCP_CLIENT_INFO_ARRAY}
  244. LPDHCP_CLIENT_INFO_ARRAY = ^DHCP_CLIENT_INFO_ARRAY;
  245. {$EXTERNALSYM LPDHCP_CLIENT_INFO_ARRAY}
  246. TDhcpClientInfoArray = DHCP_CLIENT_INFO_ARRAY;
  247. PDhcpClientInfoArray = ^DHCP_CLIENT_INFO_ARRAY;
  248. _DHCP_IP_ARRAY = record
  249. NumElements: DWORD;
  250. Elements: LPDHCP_IP_ADDRESS; //array
  251. end;
  252. {$EXTERNALSYM _DHCP_IP_ARRAY}
  253. DHCP_IP_ARRAY = _DHCP_IP_ARRAY;
  254. {$EXTERNALSYM DHCP_IP_ARRAY}
  255. LPDHCP_IP_ARRAY = ^DHCP_IP_ARRAY;
  256. {$EXTERNALSYM LPDHCP_IP_ARRAY}
  257. TDhcpIpArray = DHCP_IP_ARRAY;
  258. PDhcpIpArray = ^DHCP_IP_ARRAY;
  259. //
  260. // Subnet State.
  261. //
  262. // Currently a Subnet scope can be Enabled or Disabled.
  263. //
  264. // If the state is Enabled State,
  265. // The server distributes address to the client, extends leases and
  266. // accepts releases.
  267. //
  268. // If the state is Disabled State,
  269. // The server does not distribute address to any new client, and does
  270. // extent (and sends NACK) old leases, but the servers accepts lease
  271. // releases.
  272. //
  273. // The idea behind this subnet state is, when the admin wants to stop
  274. // serving a subnet, he moves the state from Enbaled to Disabled so
  275. // that the clients from the subnets smoothly move to another servers
  276. // serving that subnet. When all or most of the clients move to
  277. // another server, the admin can delete the subnet without any force
  278. // if no client left in that subnet, otherwise the admin should use
  279. // full force to delete the subnet.
  280. //
  281. type
  282. _DHCP_SUBNET_STATE = (
  283. DhcpSubnetEnabled = 0,
  284. DhcpSubnetDisabled,
  285. DhcpSubnetEnabledSwitched,
  286. DhcpSubnetDisabledSwitched,
  287. DhcpSubnetInvalidState);
  288. {$EXTERNALSYM _DHCP_SUBNET_STATE}
  289. DHCP_SUBNET_STATE = _DHCP_SUBNET_STATE;
  290. {$EXTERNALSYM DHCP_SUBNET_STATE}
  291. LPDHCP_SUBNET_STATE = ^DHCP_SUBNET_STATE;
  292. {$EXTERNALSYM LPDHCP_SUBNET_STATE}
  293. TDhcpSubnetState = DHCP_SUBNET_STATE;
  294. PDhcpSubnetState = ^DHCP_SUBNET_STATE;
  295. //
  296. // Subnet related data structures.
  297. //
  298. _DHCP_SUBNET_INFO = record
  299. SubnetAddress: DHCP_IP_ADDRESS;
  300. SubnetMask: DHCP_IP_MASK;
  301. SubnetName: LPWSTR;
  302. SubnetComment: LPWSTR;
  303. PrimaryHost: DHCP_HOST_INFO;
  304. SubnetState: DHCP_SUBNET_STATE;
  305. end;
  306. {$EXTERNALSYM _DHCP_SUBNET_INFO}
  307. DHCP_SUBNET_INFO = _DHCP_SUBNET_INFO;
  308. {$EXTERNALSYM DHCP_SUBNET_INFO}
  309. LPDHCP_SUBNET_INFO = ^DHCP_SUBNET_INFO;
  310. {$EXTERNALSYM LPDHCP_SUBNET_INFO}
  311. TDhcpSubnetInfo = DHCP_SUBNET_INFO;
  312. PDhcpSubnetInfo = ^DHCP_SUBNET_INFO;
  313. //
  314. // DHCP Options related data structures.
  315. //
  316. _DHCP_OPTION_DATA_TYPE = (
  317. DhcpByteOption,
  318. DhcpWordOption,
  319. DhcpDWordOption,
  320. DhcpDWordDWordOption,
  321. DhcpIpAddressOption,
  322. DhcpStringDataOption,
  323. DhcpBinaryDataOption,
  324. DhcpEncapsulatedDataOption);
  325. {$EXTERNALSYM _DHCP_OPTION_DATA_TYPE}
  326. DHCP_OPTION_DATA_TYPE = _DHCP_OPTION_DATA_TYPE;
  327. {$EXTERNALSYM DHCP_OPTION_DATA_TYPE}
  328. LPDHCP_OPTION_DATA_TYPE = ^DHCP_OPTION_DATA_TYPE;
  329. {$EXTERNALSYM LPDHCP_OPTION_DATA_TYPE}
  330. TDhcpOptionDataType = DHCP_OPTION_DATA_TYPE;
  331. PDhcpOptionDataType = ^DHCP_OPTION_DATA_TYPE;
  332. _DHCP_OPTION_ELEMENT_UNION = record
  333. case Integer of
  334. 0: (ByteOption: BYTE);
  335. 1: (WordOption: WORD);
  336. 2: (DWordOption: DWORD);
  337. 3: (DWordDWordOption: DWORD_DWORD);
  338. 4: (IpAddressOption: DHCP_IP_ADDRESS);
  339. 5: (StringDataOption: LPWSTR);
  340. 6: (BinaryDataOption: DHCP_BINARY_DATA);
  341. 7: (EncapsulatedDataOption: DHCP_BINARY_DATA);
  342. // for vendor specific information option.
  343. end;
  344. {$EXTERNALSYM _DHCP_OPTION_ELEMENT_UNION}
  345. _DHCP_OPTION_DATA_ELEMENT = record
  346. OptionType: DHCP_OPTION_DATA_TYPE;
  347. Element: _DHCP_OPTION_ELEMENT_UNION;
  348. end;
  349. {$EXTERNALSYM _DHCP_OPTION_DATA_ELEMENT}
  350. DHCP_OPTION_DATA_ELEMENT = _DHCP_OPTION_DATA_ELEMENT;
  351. {$EXTERNALSYM DHCP_OPTION_DATA_ELEMENT}
  352. LPDHCP_OPTION_DATA_ELEMENT = ^DHCP_OPTION_DATA_ELEMENT;
  353. {$EXTERNALSYM LPDHCP_OPTION_DATA_ELEMENT}
  354. TDhcpOptionDataElement = DHCP_OPTION_DATA_ELEMENT;
  355. PDhcpOptionDataElement = ^DHCP_OPTION_DATA_ELEMENT;
  356. _DHCP_OPTION_DATA = record
  357. NumElements: DWORD; // number of option elements in the pointed array
  358. Elements: LPDHCP_OPTION_DATA_ELEMENT; //array
  359. end;
  360. {$EXTERNALSYM _DHCP_OPTION_DATA}
  361. DHCP_OPTION_DATA = _DHCP_OPTION_DATA;
  362. {$EXTERNALSYM DHCP_OPTION_DATA}
  363. LPDHCP_OPTION_DATA = ^DHCP_OPTION_DATA;
  364. {$EXTERNALSYM LPDHCP_OPTION_DATA}
  365. TDhcpOptionData = DHCP_OPTION_DATA;
  366. PDhcpOptionData = ^DHCP_OPTION_DATA;
  367. _DHCP_OPTION_VALUE = record
  368. OptionID: DHCP_OPTION_ID;
  369. Value: DHCP_OPTION_DATA;
  370. end;
  371. {$EXTERNALSYM _DHCP_OPTION_VALUE}
  372. DHCP_OPTION_VALUE = _DHCP_OPTION_VALUE;
  373. {$EXTERNALSYM DHCP_OPTION_VALUE}
  374. LPDHCP_OPTION_VALUE = ^DHCP_OPTION_VALUE;
  375. {$EXTERNALSYM LPDHCP_OPTION_VALUE}
  376. TDhcpOptionValue = DHCP_OPTION_VALUE;
  377. PDhcpOptionValue = ^DHCP_OPTION_VALUE;
  378. function DhcpGetVersion(ServerIpAddress: LPWSTR; MajorVersion, MinorVersion: LPDWORD): DWORD; stdcall;
  379. {$EXTERNALSYM DhcpGetVersion}
  380. function DhcpSetServerBindingInfo(ServerIpAddress: PWideChar; Flags: ULONG; BindElementInfo: LPDHCP_BIND_ELEMENT_ARRAY): DWORD; stdcall;
  381. {$EXTERNALSYM DhcpSetServerBindingInfo}
  382. function DhcpGetServerBindingInfo(ServerIpAddress: PWideChar; Flags: ULONG; out BindElementsInfo: LPDHCP_BIND_ELEMENT_ARRAY): DWORD; stdcall;
  383. {$EXTERNALSYM DhcpGetServerBindingInfo}
  384. function DhcpCreateClientInfo(ServerIpAddress: PWideChar; ClientInfo: LPDHCP_CLIENT_INFO): DWORD; stdcall;
  385. {$EXTERNALSYM DhcpCreateClientInfo}
  386. function DhcpSetClientInfo(ServerIpAddress: PWideChar; ClientInfo: LPDHCP_CLIENT_INFO): DWORD; stdcall;
  387. {$EXTERNALSYM DhcpSetClientInfo}
  388. function DhcpGetClientInfo(ServerIpAddress: PWideChar; SearchInfo: LPDHCP_SEARCH_INFO; ClientInfo: LPDHCP_CLIENT_INFO): DWORD; stdcall;
  389. {$EXTERNALSYM DhcpGetClientInfo}
  390. function DhcpDeleteClientInfo(ServerIpAddress: PWideChar; ClientInfo: LPDHCP_SEARCH_INFO): DWORD; stdcall;
  391. {$EXTERNALSYM DhcpDeleteClientInfo}
  392. function DhcpEnumSubnetClients(ServerIpAddress: PWideChar; SubnetAddress: DHCP_IP_ADDRESS; var ResumeHandle: DHCP_RESUME_HANDLE; PreferredMaximum: DWORD; out ClientInfo: LPDHCP_CLIENT_INFO_ARRAY; out ClientsRead, ClientsTotal: DWORD): DWORD; stdcall;
  393. {$EXTERNALSYM DhcpEnumSubnetClients}
  394. function DhcpEnumSubnets(ServerIpAddress: PWideChar; var ResumeHandle: DHCP_RESUME_HANDLE; PreferredMaximum: DWORD; EnumInfo: LPDHCP_IP_ARRAY; out ElementsRead, ElementsTotal: DWORD): DWORD; stdcall;
  395. {$EXTERNALSYM DhcpEnumSubnets}
  396. function DhcpGetSubnetInfo(ServerIpAddress: PWideChar; SubnetAddress: DHCP_IP_ADDRESS; out SubnetInfo: LPDHCP_SUBNET_INFO): DWORD; stdcall;
  397. {$EXTERNALSYM DhcpGetSubnetInfo}
  398. function DhcpGetOptionValue(ServerIpAddress: PWideChar; OptionID: DHCP_OPTION_ID; const ScopeInfo: DHCP_OPTION_SCOPE_INFO; out OptionValue: LPDHCP_OPTION_VALUE): DWORD; stdcall;
  399. {$EXTERNALSYM DhcpGetOptionValue}
  400. procedure DhcpRpcFreeMemory(BufferPointer: PVOID); stdcall;
  401. {$EXTERNALSYM DhcpRpcFreeMemory}
  402. implementation
  403. const
  404. dhcplib = 'dhcpsapi.dll';
  405. {$IFDEF DYNAMIC_LINK}
  406. var
  407. _DhcpGetVersion: Pointer;
  408. function DhcpGetVersion;
  409. begin
  410. GetProcedureAddress(_DhcpGetVersion, dhcplib, 'DhcpGetVersion');
  411. asm
  412. MOV ESP, EBP
  413. POP EBP
  414. JMP [_DhcpGetVersion]
  415. end;
  416. end;
  417. var
  418. _DhcpSetServerBindingInfo: Pointer;
  419. function DhcpSetServerBindingInfo;
  420. begin
  421. GetProcedureAddress(_DhcpSetServerBindingInfo, dhcplib, 'DhcpSetServerBindingInfo');
  422. asm
  423. MOV ESP, EBP
  424. POP EBP
  425. JMP [_DhcpSetServerBindingInfo]
  426. end;
  427. end;
  428. var
  429. _DhcpGetServerBindingInfo: Pointer;
  430. function DhcpGetServerBindingInfo;
  431. begin
  432. GetProcedureAddress(_DhcpGetServerBindingInfo, dhcplib, 'DhcpGetServerBindingInfo');
  433. asm
  434. MOV ESP, EBP
  435. POP EBP
  436. JMP [_DhcpGetServerBindingInfo]
  437. end;
  438. end;
  439. var
  440. _DhcpCreateClientInfo: Pointer;
  441. function DhcpCreateClientInfo;
  442. begin
  443. GetProcedureAddress(_DhcpCreateClientInfo, dhcplib, 'DhcpCreateClientInfo');
  444. asm
  445. MOV ESP, EBP
  446. POP EBP
  447. JMP [_DhcpCreateClientInfo]
  448. end;
  449. end;
  450. var
  451. _DhcpSetClientInfo: Pointer;
  452. function DhcpSetClientInfo;
  453. begin
  454. GetProcedureAddress(_DhcpSetClientInfo, dhcplib, 'DhcpSetClientInfo');
  455. asm
  456. MOV ESP, EBP
  457. POP EBP
  458. JMP [_DhcpSetClientInfo]
  459. end;
  460. end;
  461. var
  462. _DhcpGetClientInfo: Pointer;
  463. function DhcpGetClientInfo;
  464. begin
  465. GetProcedureAddress(_DhcpGetClientInfo, dhcplib, 'DhcpGetClientInfo');
  466. asm
  467. MOV ESP, EBP
  468. POP EBP
  469. JMP [_DhcpGetClientInfo]
  470. end;
  471. end;
  472. var
  473. _DhcpDeleteClientInfo: Pointer;
  474. function DhcpDeleteClientInfo;
  475. begin
  476. GetProcedureAddress(_DhcpDeleteClientInfo, dhcplib, 'DhcpDeleteClientInfo');
  477. asm
  478. MOV ESP, EBP
  479. POP EBP
  480. JMP [_DhcpDeleteClientInfo]
  481. end;
  482. end;
  483. var
  484. _DhcpEnumSubnetClients: Pointer;
  485. function DhcpEnumSubnetClients;
  486. begin
  487. GetProcedureAddress(_DhcpEnumSubnetClients, dhcplib, 'DhcpEnumSubnetClients');
  488. asm
  489. MOV ESP, EBP
  490. POP EBP
  491. JMP [_DhcpEnumSubnetClients]
  492. end;
  493. end;
  494. var
  495. _DhcpEnumSubnets: Pointer;
  496. function DhcpEnumSubnets;
  497. begin
  498. GetProcedureAddress(_DhcpEnumSubnets, dhcplib, 'DhcpEnumSubnets');
  499. asm
  500. MOV ESP, EBP
  501. POP EBP
  502. JMP [_DhcpEnumSubnets]
  503. end;
  504. end;
  505. var
  506. _DhcpGetSubnetInfo: Pointer;
  507. function DhcpGetSubnetInfo;
  508. begin
  509. GetProcedureAddress(_DhcpGetSubnetInfo, dhcplib, 'DhcpGetSubnetInfo');
  510. asm
  511. MOV ESP, EBP
  512. POP EBP
  513. JMP [_DhcpGetSubnetInfo]
  514. end;
  515. end;
  516. var
  517. _DhcpGetOptionValue: Pointer;
  518. function DhcpGetOptionValue;
  519. begin
  520. GetProcedureAddress(_DhcpGetOptionValue, dhcplib, 'DhcpGetOptionValue');
  521. asm
  522. MOV ESP, EBP
  523. POP EBP
  524. JMP [_DhcpGetOptionValue]
  525. end;
  526. end;
  527. var
  528. _DhcpRpcFreeMemory: Pointer;
  529. procedure DhcpRpcFreeMemory;
  530. begin
  531. GetProcedureAddress(_DhcpRpcFreeMemory, dhcplib, 'DhcpRpcFreeMemory');
  532. asm
  533. MOV ESP, EBP
  534. POP EBP
  535. JMP [_DhcpRpcFreeMemory]
  536. end;
  537. end;
  538. {$ELSE}
  539. function DhcpGetVersion; external dhcplib name 'DhcpGetVersion';
  540. function DhcpSetServerBindingInfo; external dhcplib name 'DhcpSetServerBindingInfo';
  541. function DhcpGetServerBindingInfo; external dhcplib name 'DhcpGetServerBindingInfo';
  542. function DhcpCreateClientInfo; external dhcplib name 'DhcpCreateClientInfo';
  543. function DhcpSetClientInfo; external dhcplib name 'DhcpSetClientInfo';
  544. function DhcpGetClientInfo; external dhcplib name 'DhcpGetClientInfo';
  545. function DhcpDeleteClientInfo; external dhcplib name 'DhcpDeleteClientInfo';
  546. function DhcpEnumSubnetClients; external dhcplib name 'DhcpEnumSubnetClients';
  547. function DhcpEnumSubnets; external dhcplib name 'DhcpEnumSubnets';
  548. function DhcpGetSubnetInfo; external dhcplib name 'DhcpGetSubnetInfo';
  549. function DhcpGetOptionValue; external dhcplib name 'DhcpGetOptionValue';
  550. procedure DhcpRpcFreeMemory; external dhcplib name 'DhcpRpcFreeMemory';
  551. {$ENDIF DYNAMIC_LINK}
  552. end.