1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _DHCPSAPI_
7 #define _DHCPSAPI_
8 
9 #ifndef WINAPI
10 #if defined(_ARM_)
11 #define WINAPI
12 #else
13 #define WINAPI __stdcall
14 #endif
15 #endif
16 
17 #define DHCP_API_FUNCTION WINAPI
18 
19 #ifdef __cplusplus
20 #define DHCP_CONST const
21 extern "C" {
22 #else
23 #define DHCP_CONST
24 #endif
25 
26 typedef DWORD DHCP_IP_ADDRESS,*PDHCP_IP_ADDRESS,*LPDHCP_IP_ADDRESS;
27 typedef DWORD DHCP_IP_MASK;
28 typedef DWORD DHCP_RESUME_HANDLE;
29 typedef DWORD DHCP_OPTION_ID;
30 
31 typedef enum _DHCP_OPTION_TYPE {
32   DhcpUnaryElementTypeOption = 0,
33   DhcpArrayTypeOption
34 } DHCP_OPTION_TYPE, *LPDHCP_OPTION_TYPE;
35 
36 typedef struct _DATE_TIME {
37   DWORD dwLowDateTime;
38   DWORD dwHighDateTime;
39 } DATE_TIME,*LPDATE_TIME;
40 
41 typedef struct _DWORD_DWORD {
42   DWORD DWord1;
43   DWORD DWord2;
44 } DWORD_DWORD,*LPDWORD_DWORD;
45 
46 typedef struct _DHCP_BINARY_DATA {
47   DWORD DataLength;
48   BYTE *Data;
49 } DHCP_BINARY_DATA,*LPDHCP_BINARY_DATA;
50 
51 typedef DHCP_BINARY_DATA DHCP_CLIENT_UID;
52 
53 #define DHCP_ENDPOINT_FLAG_CANT_MODIFY 0x01
54 
55 typedef struct _DHCP_BIND_ELEMENT {
56   ULONG Flags;
57   WINBOOL fBoundToDHCPServer;
58   DHCP_IP_ADDRESS AdapterPrimaryAddress;
59   DHCP_IP_ADDRESS AdapterSubnetAddress;
60   LPWSTR IfDescription;
61   ULONG IfIdSize;
62   LPBYTE IfId;
63 } DHCP_BIND_ELEMENT,*LPDHCP_BIND_ELEMENT;
64 
65 typedef struct _DHCP_BIND_ELEMENT_ARRAY {
66   DWORD NumElements;
67   LPDHCP_BIND_ELEMENT Elements;
68 } DHCP_BIND_ELEMENT_ARRAY,*LPDHCP_BIND_ELEMENT_ARRAY;
69 
70 typedef enum _DHCP_CLIENT_SEARCH_TYPE {
71   DhcpClientIpAddress,DhcpClientHardwareAddress,DhcpClientName
72 } DHCP_SEARCH_INFO_TYPE,*LPDHCP_SEARCH_INFO_TYPE;
73 
74 typedef struct _DHCP_CLIENT_SEARCH_INFO {
75   DHCP_SEARCH_INFO_TYPE SearchType;
76   union _DHCP_CLIENT_SEARCH_UNION {
77     DHCP_IP_ADDRESS ClientIpAddress;
78     DHCP_CLIENT_UID ClientHardwareAddress;
79     LPWSTR ClientName;
80   } SearchInfo;
81 } DHCP_SEARCH_INFO,*LPDHCP_SEARCH_INFO;
82 
83 typedef enum _DHCP_OPTION_SCOPE_TYPE {
84   DhcpDefaultOptions,DhcpGlobalOptions,DhcpSubnetOptions,DhcpReservedOptions,DhcpMScopeOptions
85 } DHCP_OPTION_SCOPE_TYPE,*LPDHCP_OPTION_SCOPE_TYPE;
86 
87 typedef struct _DHCP_RESERVED_SCOPE {
88   DHCP_IP_ADDRESS ReservedIpAddress;
89   DHCP_IP_ADDRESS ReservedIpSubnetAddress;
90 } DHCP_RESERVED_SCOPE,*LPDHCP_RESERVED_SCOPE;
91 
92 typedef struct _DHCP_OPTION_SCOPE_INFO {
93   DHCP_OPTION_SCOPE_TYPE ScopeType;
94   union _DHCP_OPTION_SCOPE_UNION {
95     PVOID DefaultScopeInfo;
96     PVOID GlobalScopeInfo;
97     DHCP_IP_ADDRESS SubnetScopeInfo;
98     DHCP_RESERVED_SCOPE ReservedScopeInfo;
99     LPWSTR MScopeInfo;
100   } ScopeInfo;
101 } DHCP_OPTION_SCOPE_INFO,*LPDHCP_OPTION_SCOPE_INFO;
102 
103 typedef struct _DHCP_HOST_INFO {
104   DHCP_IP_ADDRESS IpAddress;
105   LPWSTR NetBiosName;
106   LPWSTR HostName;
107 } DHCP_HOST_INFO,*LPDHCP_HOST_INFO;
108 
109 typedef struct _DHCP_CLIENT_INFO {
110   DHCP_IP_ADDRESS ClientIpAddress;
111   DHCP_IP_MASK SubnetMask;
112   DHCP_CLIENT_UID ClientHardwareAddress;
113   LPWSTR ClientName;
114   LPWSTR ClientComment;
115   DATE_TIME ClientLeaseExpires;
116   DHCP_HOST_INFO OwnerHost;
117 } DHCP_CLIENT_INFO,*LPDHCP_CLIENT_INFO;
118 
119 typedef struct _DHCP_CLIENT_INFO_ARRAY {
120   DWORD NumElements;
121   LPDHCP_CLIENT_INFO *Clients;
122 } DHCP_CLIENT_INFO_ARRAY,*LPDHCP_CLIENT_INFO_ARRAY;
123 
124 typedef struct _DHCP_IP_ARRAY {
125   DWORD NumElements;
126   LPDHCP_IP_ADDRESS Elements;
127 } DHCP_IP_ARRAY,*LPDHCP_IP_ARRAY;
128 
129 typedef enum _DHCP_SUBNET_STATE {
130   DhcpSubnetEnabled = 0,DhcpSubnetDisabled,DhcpSubnetEnabledSwitched,DhcpSubnetDisabledSwitched,DhcpSubnetInvalidState
131 } DHCP_SUBNET_STATE,*LPDHCP_SUBNET_STATE;
132 
133 typedef struct _DHCP_SUBNET_INFO {
134   DHCP_IP_ADDRESS SubnetAddress;
135   DHCP_IP_MASK SubnetMask;
136   LPWSTR SubnetName;
137   LPWSTR SubnetComment;
138   DHCP_HOST_INFO PrimaryHost;
139   DHCP_SUBNET_STATE SubnetState;
140 } DHCP_SUBNET_INFO,*LPDHCP_SUBNET_INFO;
141 
142 typedef enum _DHCP_OPTION_DATA_TYPE {
143   DhcpByteOption,DhcpWordOption,DhcpDWordOption,DhcpDWordDWordOption,DhcpIpAddressOption,DhcpStringDataOption,DhcpBinaryDataOption,DhcpEncapsulatedDataOption
144 } DHCP_OPTION_DATA_TYPE,*LPDHCP_OPTION_DATA_TYPE;
145 
146 typedef struct _DHCP_OPTION_DATA_ELEMENT {
147   DHCP_OPTION_DATA_TYPE OptionType;
148   union _DHCP_OPTION_ELEMENT_UNION {
149     BYTE ByteOption;
150     WORD WordOption;
151     DWORD DWordOption;
152     DWORD_DWORD DWordDWordOption;
153     DHCP_IP_ADDRESS IpAddressOption;
154     LPWSTR StringDataOption;
155     DHCP_BINARY_DATA BinaryDataOption;
156     DHCP_BINARY_DATA EncapsulatedDataOption;
157 
158   } Element;
159 } DHCP_OPTION_DATA_ELEMENT,*LPDHCP_OPTION_DATA_ELEMENT;
160 
161 typedef struct _DHCP_OPTION_DATA {
162   DWORD NumElements;
163   LPDHCP_OPTION_DATA_ELEMENT Elements;
164 } DHCP_OPTION_DATA,*LPDHCP_OPTION_DATA;
165 
166 typedef struct _DHCP_OPTION_VALUE {
167   DHCP_OPTION_ID OptionID;
168   DHCP_OPTION_DATA Value;
169 } DHCP_OPTION_VALUE,*LPDHCP_OPTION_VALUE;
170 
171 typedef struct _DHCP_OPTION {
172   DHCP_OPTION_ID   OptionID;
173   LPWSTR           OptionName;
174   LPWSTR           OptionComment;
175   DHCP_OPTION_DATA DefaultValue;
176   DHCP_OPTION_TYPE OptionType;
177 } DHCP_OPTION, *LPDHCP_OPTION;
178 
179 DWORD WINAPI DhcpGetVersion(LPWSTR ServerIpAddress,LPDWORD MajorVersion,LPDWORD MinorVersion);
180 DWORD WINAPI DhcpSetServerBindingInfo(DHCP_CONST WCHAR *ServerIpAddress,ULONG Flags,LPDHCP_BIND_ELEMENT_ARRAY BindElementInfo);
181 DWORD WINAPI DhcpGetServerBindingInfo(DHCP_CONST WCHAR *ServerIpAddress,ULONG Flags,LPDHCP_BIND_ELEMENT_ARRAY *BindElementsInfo);
182 DWORD WINAPI DhcpCreateClientInfo(DHCP_CONST WCHAR *ServerIpAddress,DHCP_CONST DHCP_CLIENT_INFO *ClientInfo);
183 DWORD WINAPI DhcpSetClientInfo(DHCP_CONST WCHAR *ServerIpAddress,DHCP_CONST DHCP_CLIENT_INFO *ClientInfo);
184 DWORD WINAPI DhcpGetClientInfo(DHCP_CONST WCHAR *ServerIpAddress,DHCP_CONST DHCP_SEARCH_INFO *SearchInfo,LPDHCP_CLIENT_INFO *ClientInfo);
185 DWORD WINAPI DhcpDeleteClientInfo(DHCP_CONST WCHAR *ServerIpAddress,DHCP_CONST DHCP_SEARCH_INFO *ClientInfo);
186 DWORD WINAPI DhcpEnumSubnetClients(DHCP_CONST WCHAR *ServerIpAddress,DHCP_IP_ADDRESS SubnetAddress,DHCP_RESUME_HANDLE *ResumeHandle,DWORD PreferredMaximum,LPDHCP_CLIENT_INFO_ARRAY *ClientInfo,DWORD *ClientsRead,DWORD *ClientsTotal);
187 DWORD WINAPI DhcpEnumSubnets(DHCP_CONST WCHAR *ServerIpAddress,DHCP_RESUME_HANDLE *ResumeHandle,DWORD PreferredMaximum,LPDHCP_IP_ARRAY *EnumInfo,DWORD *ElementsRead,DWORD *ElementsTotal);
188 DWORD WINAPI DhcpGetSubnetInfo(DHCP_CONST WCHAR *ServerIpAddress,DHCP_IP_ADDRESS SubnetAddress,LPDHCP_SUBNET_INFO *SubnetInfo);
189 DWORD WINAPI DhcpGetOptionValue(DHCP_CONST WCHAR *ServerIpAddress,DHCP_OPTION_ID OptionID,DHCP_CONST DHCP_OPTION_SCOPE_INFO *ScopeInfo,LPDHCP_OPTION_VALUE *OptionValue);
190 VOID WINAPI DhcpRpcFreeMemory(PVOID BufferPointer);
191 
192 #define ERROR_DHCP_REGISTRY_INIT_FAILED 20000
193 #define ERROR_DHCP_DATABASE_INIT_FAILED 20001
194 #define ERROR_DHCP_RPC_INIT_FAILED 20002
195 #define ERROR_DHCP_NETWORK_INIT_FAILED 20003
196 #define ERROR_DHCP_SUBNET_EXISTS 20004
197 #define ERROR_DHCP_SUBNET_NOT_PRESENT 20005
198 #define ERROR_DHCP_PRIMARY_NOT_FOUND 20006
199 #define ERROR_DHCP_ELEMENT_CANT_REMOVE 20007
200 #define ERROR_DHCP_OPTION_EXISTS 20009
201 #define ERROR_DHCP_OPTION_NOT_PRESENT 20010
202 #define ERROR_DHCP_ADDRESS_NOT_AVAILABLE 20011
203 #define ERROR_DHCP_RANGE_FULL 20012
204 #define ERROR_DHCP_JET_ERROR 20013
205 #define ERROR_DHCP_CLIENT_EXISTS 20014
206 #define ERROR_DHCP_INVALID_DHCP_MESSAGE 20015
207 #define ERROR_DHCP_INVALID_DHCP_CLIENT 20016
208 #define ERROR_DHCP_SERVICE_PAUSED 20017
209 #define ERROR_DHCP_NOT_RESERVED_CLIENT 20018
210 #define ERROR_DHCP_RESERVED_CLIENT 20019
211 #define ERROR_DHCP_RANGE_TOO_SMALL 20020
212 #define ERROR_DHCP_IPRANGE_EXISTS 20021
213 #define ERROR_DHCP_RESERVEDIP_EXISTS 20022
214 #define ERROR_DHCP_INVALID_RANGE 20023
215 #define ERROR_DHCP_RANGE_EXTENDED 20024
216 #define ERROR_DHCP_RANGE_EXTENSION_TOO_SMALL 20025
217 #define ERROR_DHCP_WARNING_RANGE_EXTENDED_LESS 20026
218 #define ERROR_DHCP_JET_CONV_REQUIRED 20027
219 #define ERROR_DHCP_SERVER_INVALID_BOOT_FILE_TABLE 20028
220 #define ERROR_DHCP_SERVER_UNKNOWN_BOOT_FILE_NAME 20029
221 #define ERROR_DHCP_SUPER_SCOPE_NAME_TOO_LONG 20030
222 #define ERROR_DHCP_IP_ADDRESS_IN_USE 20032
223 #define ERROR_DHCP_LOG_FILE_PATH_TOO_LONG 20033
224 #define ERROR_DHCP_UNSUPPORTED_CLIENT 20034
225 #define ERROR_DHCP_SERVER_INTERFACE_NOTIFICATION_EVENT 20035
226 #define ERROR_DHCP_JET97_CONV_REQUIRED 20036
227 #define ERROR_DHCP_ROGUE_INIT_FAILED 20037
228 #define ERROR_DHCP_ROGUE_SAMSHUTDOWN 20038
229 #define ERROR_DHCP_ROGUE_NOT_AUTHORIZED 20039
230 #define ERROR_DHCP_ROGUE_DS_UNREACHABLE 20040
231 #define ERROR_DHCP_ROGUE_DS_CONFLICT 20041
232 #define ERROR_DHCP_ROGUE_NOT_OUR_ENTERPRISE 20042
233 #define ERROR_DHCP_STANDALONE_IN_DS 20043
234 #define ERROR_DHCP_CLASS_NOT_FOUND 20044
235 #define ERROR_DHCP_CLASS_ALREADY_EXISTS 20045
236 #define ERROR_DHCP_SCOPE_NAME_TOO_LONG 20046
237 #define ERROR_DHCP_DEFAULT_SCOPE_EXISTS 20047
238 #define ERROR_DHCP_CANT_CHANGE_ATTRIBUTE 20048
239 #define ERROR_DHCP_IPRANGE_CONV_ILLEGAL 20049
240 #define ERROR_DHCP_NETWORK_CHANGED 20050
241 #define ERROR_DHCP_CANNOT_MODIFY_BINDINGS 20051
242 #define ERROR_DHCP_SUBNET_EXISTS_2 20052
243 #define ERROR_DHCP_MSCOPE_EXISTS 20053
244 #define ERROR_DHCP_MSCOPE_RANGE_TOO_SMALL 20054
245 #define ERROR_DHCP_MSCOPE_RANGE_TOO_SMALL 20054
246 #define ERROR_DDS_NO_DS_AVAILABLE 20070
247 #define ERROR_DDS_NO_DHCP_ROOT 20071
248 #define ERROR_DDS_DHCP_SERVER_NOT_FOUND 20074
249 #define ERROR_DDS_OPTION_ALREADY_EXISTS 20075
250 #define ERROR_DDS_OPTION_DOES_NOT_EXIST 20076
251 #define ERROR_DDS_CLASS_EXISTS 20077
252 #define ERROR_DDS_CLASS_DOES_NOT_EXIST 20078
253 #define ERROR_DDS_SERVER_ALREADY_EXISTS 20079
254 #define ERROR_DDS_SERVER_DOES_NOT_EXIST 20080
255 #define ERROR_DDS_SERVER_ADDRESS_MISMATCH 20081
256 #define ERROR_DDS_SUBNET_EXISTS 20082
257 #define ERROR_DDS_SUBNET_HAS_DIFF_SUPER_SCOPE 20083
258 #define ERROR_DDS_SUBNET_NOT_PRESENT 20084
259 #define ERROR_DDS_RESERVATION_NOT_PRESENT 20085
260 #define ERROR_DDS_RESERVATION_CONFLICT 20086
261 #define ERROR_DDS_POSSIBLE_RANGE_CONFLICT 20087
262 #define ERROR_DDS_RANGE_DOES_NOT_EXIST 20088
263 
264 typedef struct _DHCP_OPTION_ARRAY {
265   DWORD         NumElements;
266   LPDHCP_OPTION Options;
267 } DHCP_OPTION_ARRAY, *LPDHCP_OPTION_ARRAY;
268 
269 #if (_WIN32_WINNT >= 0x0600)
270 typedef struct _DHCP_BINARY_DATA {
271   DWORD DataLength;
272   BYTE* Data;
273 } DHCP_BINARY_DATA, *LPDHCP_BINARY_DATA;
274 
275 typedef DHCP_BINARY_DATA DHCP_CLIENT_UID;
276 
277 typedef enum _DHCP_OPTION_SCOPE_TYPE6 {
278   DhcpDefaultOptions6,
279   DhcpScopeOptions6,
280   DhcpReservedOptions6
281 } DHCP_OPTION_SCOPE_TYPE6;
282 
283 typedef struct _DHCP_ALL_OPTIONS {
284   DWORD               Flags;
285   LPDHCP_OPTION_ARRAY NonVendorOptions;
286   DWORD               NumVendorOptions;
287   struct {
288     DHCP_OPTION Option;
289     LPWSTR      VendorName;
290     LPWSTR      ClassName;
291   } *VendorOptions;
292 } DHCP_ALL_OPTIONS, *LPDHCP_ALL_OPTIONS;
293 
294 typedef struct _DHCP_IPV6_ADDRESS {
295   ULONGLONG HighOrderBits;
296   ULONGLONG LowOrderBits;
297 } DHCP_IPV6_ADDRESS, *PDHCP_IPV6_ADDRESS, *LPDHCP_IPV6_ADDRESS, DHCP_RESUME_IPV6_HANDLE;
298 
299 typedef struct _DHCP_ALL_OPTION_VALUES {
300   DWORD Flags;
301   DWORD NumElements;
302   struct {
303     LPWSTR                    ClassName;
304     LPWSTR                    VendorName;
305     WINBOOL                   IsVendor;
306     LPDHCP_OPTION_VALUE_ARRAY OptionsArray;
307   } *Options;
308 } DHCP_ALL_OPTION_VALUES, *LPDHCP_ALL_OPTION_VALUES;
309 
310 typedef struct _DHCP_OPTION_SCOPE_INFO6 {
311   DHCP_OPTION_SCOPE_TYPE6 ScopeType;
312   union {
313     PVOID                DefaultScopeInfo;
314     DHCP_IPV6_ADDRESS    SubnetScopeInfo;
315     DHCP_RESERVED_SCOPE6 ReservedScopeInfo;
316   } ScopeInfo;
317 } DHCP_OPTION_SCOPE_INFO6, *PDHCP_OPTION_SCOPE_INFO6, *LPDHCP_OPTION_SCOPE_INFO6;
318 
319 typedef struct _DHCP_OPTION_VALUE_ARRAY {
320   DWORD               NumElements;
321   LPDHCP_OPTION_VALUE Values;
322 } DHCP_OPTION_VALUE_ARRAY, *LPDHCP_OPTION_VALUE_ARRAY;
323 
324 typedef enum _DHCP_SUBNET_ELEMENT_TYPE_V6 {
325   Dhcpv6IpRanges,
326   Dhcpv6ReservedIps,
327   Dhcpv6ExcludedIpRanges
328 } DHCP_SUBNET_ELEMENT_TYPE_V6, *LPDHCP_SUBNET_ELEMENT_TYPE_V6;
329 
330 typedef struct _DHCP_IP_RANGE_V6 {
331   DHCP_IPV6_ADDRESS StartAddress;
332   DHCP_IPV6_ADDRESS EndAddress;
333 } DHCP_IP_RANGE_V6, *LPDHCP_IP_RANGE_V6;
334 
335 typedef struct _DHCP_IP_RESERVATION_V6 {
336   DHCP_IPV6_ADDRESS ReservedIpAddress;
337   DHCP_CLIENT_UID* ReservedForClient;
338   DWORD InterfaceId;
339 } DHCP_IP_RESERVATION_V6, *LPDHCP_IP_RESERVATION_V6;
340 
341 typedef struct DHCP_SUBNET_ELEMENT_DATA_V6 {
342   DHCP_SUBNET_ELEMENT_TYPE_V6 ElementType;
343     union _DHCP_SUBNET_ELEMENT_UNION_V6 {
344       DHCP_IP_RANGE_V6* IpRange;
345       DHCP_IP_RESERVATION_V6* ReservedIp;
346       DHCP_IP_RANGE_V6* ExcludeIpRange;
347   } Element;
348 } DHCP_SUBNET_ELEMENT_DATA_V6, *LDHCP_SUBNET_ELEMENT_DATA_V6, *LPDHCP_SUBNET_ELEMENT_DATA_V6;
349 
350 typedef struct _DHCP_SUBNET_ELEMENT_INFO_ARRAY_V6 {
351   DWORD NumElements;
352   LPDHCP_SUBNET_ELEMENT_DATA_V6 Elements;
353 } DHCP_SUBNET_ELEMENT_INFO_ARRAY_V6, *LPDHCP_SUBNET_ELEMENT_INFO_ARRAY_V6;
354 
355 typedef struct _DHCP_SUBNET_INFO_V6 {
356   DHCP_IPV6_ADDRESS SubnetAddress;
357   ULONG             Prefix;
358   USHORT            Preference;
359   LPWSTR            SubnetName;
360   LPWSTR            SubnetComment;
361   DWORD             State;
362   DWORD             ScopeId;
363 } DHCP_SUBNET_INFO_V6, *PDHCP_SUBNET_INFO_V6, *LPDHCP_SUBNET_INFO_V6;
364 
365 DWORD DHCP_API_FUNCTION DhcpAddSubnetElementV6(
366   LPWSTR ServerIpAddress,
367   DHCP_IPV6_ADDRESS SubnetAddress,
368   LDHCP_SUBNET_ELEMENT_DATA_V6 *AddElementInfo
369 );
370 
371 DWORD DHCP_API_FUNCTION DhcpCreateOptionV6(
372   LPWSTR ServerIpAddress,
373   DWORD Flags,
374   DHCP_OPTION_ID OptionId,
375   WCHAR *ClassName,
376   WCHAR *VendorName,
377   LPDHCP_OPTION OptionInfo
378 );
379 
380 DWORD DHCP_API_FUNCTION DhcpDeleteSubnetV6(
381   LPWSTR ServerIpAddress,
382   DHCP_IPV6_ADDRESS SubnetAddress,
383   DHCP_FORCE_FLAG ForceFlag
384 );
385 
386 DWORD DHCP_API_FUNCTION DhcpCreateSubnetV6(
387   LPWSTR ServerIpAddress,
388   DHCP_IPV6_ADDRESS SubnetAddress,
389   LDHCP_SUBNET_INFO_V6 *SubnetInfo
390 );
391 
392 DWORD DHCP_API_FUNCTION DhcpEnumOptionsV6(
393   LPWSTR ServerIpAddress,
394   DWORD Flags,
395   WCHAR *ClassName,
396   WCHAR *VendorName,
397   DHCP_RESUME_HANDLE *ResumeHandle,
398   DWORD PreferredMaximum,
399   LPDHCP_OPTION_ARRAY *Options,
400   DWORD *OptionsRead,
401   DWORD *OptionsTotal
402 );
403 
404 DWORD DHCP_API_FUNCTION DhcpEnumOptionValuesV6(
405   LPWSTR ServerIpAddress,
406   DWORD Flags,
407   WCHAR *ClassName,
408   WCHAR *VendorName,
409   DHCP_OPTION_SCOPE_INFO6 ScopeInfo,
410   DHCP_RESUME_HANDLE *ResumeHandle,
411   DWORD PreferredMaximum,
412   LPDHCP_OPTION_VALUE_ARRAY *OptionValues,
413   DWORD *OptionsRead,
414   DWORD *OptionsTotal
415 );
416 
417 DWORD DHCP_API_FUNCTION DhcpEnumSubnetClientsV6(
418   LPWSTR ServerIpAddress,
419   DHCP_IPV6_ADDRESS SubnetAddress,
420   DHCP_RESUME_IPV6_HANDLE *ResumeHandle,
421   DWORD PreferredMaximum,
422   LPDHCP_CLIENT_INFO_ARRAY_V6 *ClientInfo,
423   DWORD *ClientsRead,
424   DWORD *ClientsTotal
425 );
426 
427 DWORD DHCP_API_FUNCTION DhcpEnumSubnetElementsV6(
428   LPWSTR ServerIpAddress,
429   DHCP_IPV6_ADDRESS SubnetAddress,
430   DHCP_SUBNET_ELEMENT_TYPE_V6 EnumElementType,
431   DHCP_RESUME_HANDLE *ResumeHandle,
432   DWORD PreferredMaximum,
433   LPDHCP_SUBNET_ELEMENT_INFO_ARRAY_V6 *EnumElementInfo,
434   DWORD *ElementsRead,
435   DWORD *ElementsTotal
436 );
437 
438 DWORD DHCP_API_FUNCTION DhcpEnumSubnetsV6(
439   LPWSTR ServerIpAddress,
440   DHCP_RESUME_HANDLE *ResumeHandle,
441   DWORD PreferredMaximum,
442   LPDHCPV6_IP_ARRAY *EnumInfo,
443   DWORD *ElementsRead,
444   DWORD *ElementsTotal
445 );
446 
447 DWORD DHCP_API_FUNCTION DhcpGetAllOptionsV6(
448   LPWSTR ServerIpAddress,
449   DWORD Flags,
450   LPDHCP_ALL_OPTIONS *OptionStruct
451 );
452 
453 DWORD DHCP_API_FUNCTION DhcpGetAllOptionValuesV6(
454   LPWSTR ServerIpAddress,
455   DWORD Flags,
456   LPDHCP_OPTION_SCOPE_INFO6 ScopeInfo,
457   LPDHCP_ALL_OPTION_VALUES *Values
458 );
459 
460 DWORD DHCP_API_FUNCTION DhcpGetOptionInfoV6(
461   LPWSTR ServerIpAddress,
462   DWORD Flags,
463   DHCP_OPTION_ID OptionID,
464   WCHAR *ClassName,
465   WCHAR *VendorName,
466   LPDHCP_OPTION *OptionInfo
467 );
468 
469 DWORD DHCP_API_FUNCTION DhcpGetSubnetInfoV6(
470   LPWSTR ServerIpAddress,
471   DHCP_IPV6_ADDRESS SubnetAddress,
472   LPDHCP_SUBNET_INFO_V6 *SubnetInfo
473 );
474 
475 DWORD DHCP_API_FUNCTION DhcpRemoveOptionV6(
476   LPWSTR ServerIpAddress,
477   DWORD Flags,
478   DHCP_OPTION_ID OptionID,
479   WCHAR *ClassName,
480   WCHAR *VendorName
481 );
482 
483 DWORD DHCP_API_FUNCTION DhcpRemoveOptionValueV6(
484   LPWSTR ServerIpAddress,
485   DWORD Flags,
486   DHCP_OPTION_ID OptionID,
487   WCHAR *ClassName,
488   WCHAR *VendorName,
489   DHCP_OPTION_SCOPE_INFO6 ScopeInfo
490 );
491 
492 DWORD DHCP_API_FUNCTION DhcpRemoveSubnetElementV6(
493   LPWSTR ServerIpAddress,
494   DHCP_IPV6_ADDRESS SubnetAddress,
495   LDHCP_SUBNET_ELEMENT_DATA_V6 RemoveElementInfo,
496   DHCP_FORCE_FLAG ForceFlag
497 );
498 
499 DWORD DHCP_API_FUNCTION DhcpSetOptionInfoV6(
500   LPWSTR ServerIpAddress,
501   DWORD Flags,
502   DHCP_OPTION_ID OptionID,
503   WCHAR *ClassName,
504   WCHAR *VendorName,
505   LPDHCP_OPTION OptionInfo
506 );
507 
508 DWORD DHCP_API_FUNCTION DhcpSetOptionValueV6(
509   LPWSTR ServerIpAddress,
510   DWORD Flags,
511   DHCP_OPTION_ID OptionId,
512   WCHAR *ClassName,
513   WCHAR *VendorName,
514   LDHCP_OPTION_SCOPE_INFO6 ScopeInfo,
515   LDHCP_OPTION_DATA OptionValue
516 );
517 
518 #endif /*(_WIN32_WINNT >= 0x0600)*/
519 
520 #ifdef __cplusplus
521 }
522 #endif
523 #endif
524