summaryrefslogtreecommitdiffstats
path: root/private/inc/dhcpapi.h
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/inc/dhcpapi.h
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/inc/dhcpapi.h')
-rw-r--r--private/inc/dhcpapi.h978
1 files changed, 978 insertions, 0 deletions
diff --git a/private/inc/dhcpapi.h b/private/inc/dhcpapi.h
new file mode 100644
index 000000000..93f325fc8
--- /dev/null
+++ b/private/inc/dhcpapi.h
@@ -0,0 +1,978 @@
+/*++
+
+Copyright (c) 1993 Microsoft Corporation
+
+Module Name:
+
+ dhcpapi.h
+
+Abstract:
+
+ This file contains the DHCP APIs proto-type and description. Also
+ contains the data structures used by the DHCP APIs.
+
+Author:
+
+ Madan Appiah (madana) 12-Aug-1993
+
+Environment:
+
+ User Mode - Win32 - MIDL
+
+Revision History:
+
+ Cheng Yang (t-cheny) 18-Jun-1996 superscope
+
+--*/
+
+#ifndef _DHCPAPI_
+#define _DHCPAPI_
+
+#if defined(MIDL_PASS)
+#define LPWSTR [string] wchar_t *
+#endif
+
+//
+// DHCP data structures.
+//
+
+#ifndef _DHCP_
+
+//
+// the follwing typedef's are defined in dhcp.h also.
+//
+
+typedef DWORD DHCP_IP_ADDRESS, *PDHCP_IP_ADDRESS, *LPDHCP_IP_ADDRESS;
+typedef DWORD DHCP_OPTION_ID;
+
+typedef struct _DATE_TIME {
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+} DATE_TIME, *LPDATE_TIME;
+
+#define DHCP_DATE_TIME_ZERO_HIGH 0
+#define DHCP_DATE_TIME_ZERO_LOW 0
+
+#define DHCP_DATE_TIME_INFINIT_HIGH 0x7FFFFFFF
+#define DHCP_DATE_TIME_INFINIT_LOW 0xFFFFFFFF
+
+#endif
+
+#ifdef __cplusplus
+#define DHCP_CONST const
+#else
+#define DHCP_CONST
+#endif // __cplusplus
+
+#if (_MSC_VER >= 800)
+#define DHCP_API_FUNCTION __stdcall
+#else
+#define DHCP_API_FUNCTION
+#endif
+
+//
+// RPC security.
+//
+
+#define DHCP_SERVER_SECURITY L"DhcpServerApp"
+#define DHCP_SERVER_SECURITY_AUTH_ID 10
+#define DHCP_NAMED_PIPE L"\\PIPE\\DHCPSERVER"
+#define DHCP_SERVER_PORT L""
+#define DHCP_LPC_EP L"DHCPSERVERLPC"
+
+#define DHCP_SERVER_USE_RPC_OVER_TCPIP 0x1
+#define DHCP_SERVER_USE_RPC_OVER_NP 0x2
+#define DHCP_SERVER_USE_RPC_OVER_LPC 0x4
+
+#define DHCP_SERVER_USE_RPC_OVER_ALL \
+ DHCP_SERVER_USE_RPC_OVER_TCPIP | \
+ DHCP_SERVER_USE_RPC_OVER_NP | \
+ DHCP_SERVER_USE_RPC_OVER_LPC
+
+typedef DWORD DHCP_IP_MASK;
+typedef DWORD DHCP_RESUME_HANDLE;
+
+typedef struct _DHCP_IP_RANGE {
+ DHCP_IP_ADDRESS StartAddress;
+ DHCP_IP_ADDRESS EndAddress;
+} DHCP_IP_RANGE, *LPDHCP_IP_RANGE;
+
+typedef struct _DHCP_BINARY_DATA {
+ DWORD DataLength;
+
+#if defined(MIDL_PASS)
+ [size_is(DataLength)]
+#endif // MIDL_PASS
+ BYTE *Data;
+
+} DHCP_BINARY_DATA, *LPDHCP_BINARY_DATA;
+
+typedef DHCP_BINARY_DATA DHCP_CLIENT_UID;
+
+typedef struct _DHCP_HOST_INFO {
+ DHCP_IP_ADDRESS IpAddress; // minimum information always available
+ LPWSTR NetBiosName; // optional information
+ LPWSTR HostName; // optional information
+} DHCP_HOST_INFO, *LPDHCP_HOST_INFO;
+
+//
+// Flag type that is used to delete DHCP objects.
+//
+
+typedef enum _DHCP_FORCE_FLAG {
+ DhcpFullForce,
+ DhcpNoForce
+} DHCP_FORCE_FLAG, *LPDHCP_FORCE_FLAG;
+
+//
+// DWORD_DWORD - subtitute for LARGE_INTEGER
+//
+
+typedef struct _DWORD_DWORD {
+ DWORD DWord1;
+ DWORD DWord2;
+} DWORD_DWORD, *LPDWORD_DWORD;
+
+//
+// Subnet State.
+//
+// Currently a Subnet scope can be Enabled or Disabled.
+//
+// If the state is Enabled State,
+// The server distributes address to the client, extends leases and
+// accepts releases.
+//
+// If the state is Disabled State,
+// The server does not distribute address to any new client, and does
+// extent (and sends NACK) old leases, but the servers accepts lease
+// releases.
+//
+// The idea behind this subnet state is, when the admin wants to stop
+// serving a subnet, he moves the state from Enbaled to Disabled so
+// that the clients from the subnets smoothly move to another servers
+// serving that subnet. When all or most of the clients move to
+// another server, the admin can delete the subnet without any force
+// if no client left in that subnet, otherwise the admin should use
+// full force to delete the subnet.
+//
+
+typedef enum _DHCP_SUBNET_STATE {
+ DhcpSubnetEnabled,
+ DhcpSubnetDisabled
+} DHCP_SUBNET_STATE, *LPDHCP_SUBNET_STATE;
+
+//
+// Subnet related data structures.
+//
+
+typedef struct _DHCP_SUBNET_INFO {
+ DHCP_IP_ADDRESS SubnetAddress;
+ DHCP_IP_MASK SubnetMask;
+ LPWSTR SubnetName;
+ LPWSTR SubnetComment;
+ DHCP_HOST_INFO PrimaryHost;
+ DHCP_SUBNET_STATE SubnetState;
+} DHCP_SUBNET_INFO, *LPDHCP_SUBNET_INFO;
+
+typedef struct _DHCP_IP_ARRAY {
+ DWORD NumElements;
+#if defined(MIDL_PASS)
+ [size_is(NumElements)]
+#endif // MIDL_PASS
+ LPDHCP_IP_ADDRESS Elements; //array
+} DHCP_IP_ARRAY, *LPDHCP_IP_ARRAY;
+
+typedef struct _DHCP_IP_CLUSTER {
+ DHCP_IP_ADDRESS ClusterAddress; // First IP address of the cluster.
+ DWORD ClusterMask; // Cluster usage mask, 0xFFFFFFFF
+ // indicates the cluster is fully used.
+} DHCP_IP_CLUSTER, *LPDHCP_IP_CLUSTER;
+
+typedef struct _DHCP_IP_RESERVATION {
+ DHCP_IP_ADDRESS ReservedIpAddress;
+ DHCP_CLIENT_UID *ReservedForClient;
+} DHCP_IP_RESERVATION, *LPDHCP_IP_RESERVATION;
+
+typedef enum _DHCP_SUBNET_ELEMENT_TYPE {
+ DhcpIpRanges,
+ DhcpSecondaryHosts,
+ DhcpReservedIps,
+ DhcpExcludedIpRanges,
+ DhcpIpUsedClusters // read only
+} DHCP_SUBNET_ELEMENT_TYPE, *LPDHCP_SUBNET_ELEMENT_TYPE;
+
+typedef struct _DHCP_SUBNET_ELEMENT_DATA {
+ DHCP_SUBNET_ELEMENT_TYPE ElementType;
+#if defined(MIDL_PASS)
+ [switch_is(ElementType), switch_type(DHCP_SUBNET_ELEMENT_TYPE)]
+ union _DHCP_SUBNET_ELEMENT_UNION {
+ [case(DhcpIpRanges)] DHCP_IP_RANGE *IpRange;
+ [case(DhcpSecondaryHosts)] DHCP_HOST_INFO *SecondaryHost;
+ [case(DhcpReservedIps)] DHCP_IP_RESERVATION *ReservedIp;
+ [case(DhcpExcludedIpRanges)] DHCP_IP_RANGE *ExcludeIpRange;
+ [case(DhcpIpUsedClusters)] DHCP_IP_CLUSTER *IpUsedCluster;
+ [default] ;
+ } Element;
+#else
+ union _DHCP_SUBNET_ELEMENT_UNION {
+ DHCP_IP_RANGE *IpRange;
+ DHCP_HOST_INFO *SecondaryHost;
+ DHCP_IP_RESERVATION *ReservedIp;
+ DHCP_IP_RANGE *ExcludeIpRange;
+ DHCP_IP_CLUSTER *IpUsedCluster;
+ } Element;
+#endif // MIDL_PASS
+} DHCP_SUBNET_ELEMENT_DATA, *LPDHCP_SUBNET_ELEMENT_DATA;
+
+#if !defined(MIDL_PASS)
+typedef union _DHCP_SUBNET_ELEMENT_UNION
+ DHCP_SUBNET_ELEMENT_UNION, *LPDHCP_SUBNET_ELEMENT_UNION;
+#endif
+
+typedef struct _DHCP_SUBNET_ELEMENT_INFO_ARRAY {
+ DWORD NumElements;
+#if defined(MIDL_PASS)
+ [size_is(NumElements)]
+#endif // MIDL_PASS
+ LPDHCP_SUBNET_ELEMENT_DATA Elements; //array
+} DHCP_SUBNET_ELEMENT_INFO_ARRAY, *LPDHCP_SUBNET_ELEMENT_INFO_ARRAY;
+
+//
+// DHCP Options related data structures.
+//
+
+typedef enum _DHCP_OPTION_DATA_TYPE {
+ DhcpByteOption,
+ DhcpWordOption,
+ DhcpDWordOption,
+ DhcpDWordDWordOption,
+ DhcpIpAddressOption,
+ DhcpStringDataOption,
+ DhcpBinaryDataOption,
+ DhcpEncapsulatedDataOption
+} DHCP_OPTION_DATA_TYPE, *LPDHCP_OPTION_DATA_TYPE;
+
+
+typedef struct _DHCP_OPTION_DATA_ELEMENT {
+ DHCP_OPTION_DATA_TYPE OptionType;
+#if defined(MIDL_PASS)
+ [switch_is(OptionType), switch_type(DHCP_OPTION_DATA_TYPE)]
+ union _DHCP_OPTION_ELEMENT_UNION {
+ [case(DhcpByteOption)] BYTE ByteOption;
+ [case(DhcpWordOption)] WORD WordOption;
+ [case(DhcpDWordOption)] DWORD DWordOption;
+ [case(DhcpDWordDWordOption)] DWORD_DWORD DWordDWordOption;
+ [case(DhcpIpAddressOption)] DHCP_IP_ADDRESS IpAddressOption;
+ [case(DhcpStringDataOption)] LPWSTR StringDataOption;
+ [case(DhcpBinaryDataOption)] DHCP_BINARY_DATA BinaryDataOption;
+ [case(DhcpEncapsulatedDataOption)] DHCP_BINARY_DATA EncapsulatedDataOption;
+ [default] ;
+ } Element;
+#else
+ union _DHCP_OPTION_ELEMENT_UNION {
+ BYTE ByteOption;
+ WORD WordOption;
+ DWORD DWordOption;
+ DWORD_DWORD DWordDWordOption;
+ DHCP_IP_ADDRESS IpAddressOption;
+ LPWSTR StringDataOption;
+ DHCP_BINARY_DATA BinaryDataOption;
+ DHCP_BINARY_DATA EncapsulatedDataOption;
+ // for vendor specific information option.
+ } Element;
+#endif // MIDL_PASS
+} DHCP_OPTION_DATA_ELEMENT, *LPDHCP_OPTION_DATA_ELEMENT;
+
+#if !defined(MIDL_PASS)
+typedef union _DHCP_OPTION_ELEMENT_UNION
+ DHCP_OPTION_ELEMENT_UNION, *LPDHCP_OPTION_ELEMENT_UNION;
+#endif
+
+typedef struct _DHCP_OPTION_DATA {
+ DWORD NumElements; // number of option elements in the pointed array
+#if defined(MIDL_PASS)
+ [size_is(NumElements)]
+#endif // MIDL_PASS
+ LPDHCP_OPTION_DATA_ELEMENT Elements; //array
+} DHCP_OPTION_DATA, *LPDHCP_OPTION_DATA;
+
+typedef enum _DHCP_OPTION_TYPE {
+ DhcpUnaryElementTypeOption,
+ DhcpArrayTypeOption
+} DHCP_OPTION_TYPE, *LPDHCP_OPTION_TYPE;
+
+typedef struct _DHCP_OPTION {
+ DHCP_OPTION_ID OptionID;
+ LPWSTR OptionName;
+ LPWSTR OptionComment;
+ DHCP_OPTION_DATA DefaultValue;
+ DHCP_OPTION_TYPE OptionType;
+} DHCP_OPTION, *LPDHCP_OPTION;
+
+typedef struct _DHCP_OPTION_ARRAY {
+ DWORD NumElements; // number of options in the pointed array
+#if defined(MIDL_PASS)
+ [size_is(NumElements)]
+#endif // MIDL_PASS
+ LPDHCP_OPTION Options; // array
+} DHCP_OPTION_ARRAY, *LPDHCP_OPTION_ARRAY;
+
+typedef struct _DHCP_OPTION_VALUE {
+ DHCP_OPTION_ID OptionID;
+ DHCP_OPTION_DATA Value;
+} DHCP_OPTION_VALUE, *LPDHCP_OPTION_VALUE;
+
+typedef struct _DHCP_OPTION_VALUE_ARRAY {
+ DWORD NumElements; // number of options in the pointed array
+#if defined(MIDL_PASS)
+ [size_is(NumElements)]
+#endif // MIDL_PASS
+ LPDHCP_OPTION_VALUE Values; // array
+} DHCP_OPTION_VALUE_ARRAY, *LPDHCP_OPTION_VALUE_ARRAY;
+
+typedef enum _DHCP_OPTION_SCOPE_TYPE {
+ DhcpDefaultOptions,
+ DhcpGlobalOptions,
+ DhcpSubnetOptions,
+ DhcpReservedOptions
+} DHCP_OPTION_SCOPE_TYPE, *LPDHCP_OPTION_SCOPE_TYPE;
+
+typedef struct _DHCP_RESERVED_SCOPE {
+ DHCP_IP_ADDRESS ReservedIpAddress;
+ DHCP_IP_ADDRESS ReservedIpSubnetAddress;
+} DHCP_RESERVED_SCOPE, *LPDHCP_RESERVED_SCOPE;
+
+typedef struct _DHCP_OPTION_SCOPE_INFO {
+ DHCP_OPTION_SCOPE_TYPE ScopeType;
+#if defined(MIDL_PASS)
+ [switch_is(ScopeType), switch_type(DHCP_OPTION_SCOPE_TYPE)]
+ union _DHCP_OPTION_SCOPE_UNION {
+ [case(DhcpDefaultOptions)] ; // PVOID DefaultScopeInfo;
+ [case(DhcpGlobalOptions)] ; // PVOID GlobalScopeInfo;
+ [case(DhcpSubnetOptions)] DHCP_IP_ADDRESS SubnetScopeInfo;
+ [case(DhcpReservedOptions)] DHCP_RESERVED_SCOPE ReservedScopeInfo;
+ [default] ;
+ } ScopeInfo;
+#else
+ union _DHCP_OPTION_SCOPE_UNION {
+ PVOID DefaultScopeInfo; // must be NULL
+ PVOID GlobalScopeInfo; // must be NULL
+ DHCP_IP_ADDRESS SubnetScopeInfo;
+ DHCP_RESERVED_SCOPE ReservedScopeInfo;
+ } ScopeInfo;
+#endif // MIDL_PASS
+} DHCP_OPTION_SCOPE_INFO, *LPDHCP_OPTION_SCOPE_INFO;
+
+#if !defined(MIDL_PASS)
+typedef union _DHCP_OPTION_SCOPE_UNION
+ DHCP_OPTION_SCOPE_UNION, *LPDHCP_OPTION_SCOPE_UNION;
+#endif
+
+typedef struct _DHCP_OPTION_LIST {
+ DWORD NumOptions;
+#if defined(MIDL_PASS)
+ [size_is(NumOptions)]
+#endif // MIDL_PASS
+ DHCP_OPTION_VALUE *Options; // array
+} DHCP_OPTION_LIST, *LPDHCP_OPTION_LIST;
+
+//
+// DHCP Client information data structures
+//
+
+typedef struct _DHCP_CLIENT_INFO {
+ DHCP_IP_ADDRESS ClientIpAddress; // currently assigned IP address.
+ DHCP_IP_MASK SubnetMask;
+ DHCP_CLIENT_UID ClientHardwareAddress;
+ LPWSTR ClientName; // optional.
+ LPWSTR ClientComment;
+ DATE_TIME ClientLeaseExpires; // UTC time in FILE_TIME format.
+ DHCP_HOST_INFO OwnerHost; // host that distributed this IP address.
+} DHCP_CLIENT_INFO, *LPDHCP_CLIENT_INFO;
+
+typedef struct _DHCP_CLIENT_INFO_ARRAY {
+ DWORD NumElements;
+#if defined(MIDL_PASS)
+ [size_is(NumElements)]
+#endif // MIDL_PASS
+ LPDHCP_CLIENT_INFO *Clients; // array of pointers
+} DHCP_CLIENT_INFO_ARRAY, *LPDHCP_CLIENT_INFO_ARRAY;
+
+typedef enum _DHCP_CLIENT_SEARCH_TYPE {
+ DhcpClientIpAddress,
+ DhcpClientHardwareAddress,
+ DhcpClientName
+} DHCP_SEARCH_INFO_TYPE, *LPDHCP_SEARCH_INFO_TYPE;
+
+typedef struct _DHCP_CLIENT_SEARCH_INFO {
+ DHCP_SEARCH_INFO_TYPE SearchType;
+#if defined(MIDL_PASS)
+ [switch_is(SearchType), switch_type(DHCP_SEARCH_INFO_TYPE)]
+ union _DHCP_CLIENT_SEARCH_UNION {
+ [case(DhcpClientIpAddress)] DHCP_IP_ADDRESS ClientIpAddress;
+ [case(DhcpClientHardwareAddress)] DHCP_CLIENT_UID ClientHardwareAddress;
+ [case(DhcpClientName)] LPWSTR ClientName;
+ [default] ;
+ } SearchInfo;
+#else
+ union _DHCP_CLIENT_SEARCH_UNION {
+ DHCP_IP_ADDRESS ClientIpAddress;
+ DHCP_CLIENT_UID ClientHardwareAddress;
+ LPWSTR ClientName;
+ } SearchInfo;
+#endif // MIDL_PASS
+} DHCP_SEARCH_INFO, *LPDHCP_SEARCH_INFO;
+
+
+#if !defined(MIDL_PASS)
+typedef union _DHCP_CLIENT_SEARCH_UNION
+ DHCP_CLIENT_SEARCH_UNION, *LPDHCP_CLIENT_SEARCH_UNION;
+#endif // MIDL_PASS
+
+//
+// Mib Info structures.
+//
+
+typedef struct _SCOPE_MIB_INFO {
+ DHCP_IP_ADDRESS Subnet;
+ DWORD NumAddressesInuse;
+ DWORD NumAddressesFree;
+ DWORD NumPendingOffers;
+} SCOPE_MIB_INFO, *LPSCOPE_MIB_INFO;
+
+typedef struct _DHCP_MIB_INFO {
+ DWORD Discovers;
+ DWORD Offers;
+ DWORD Requests;
+ DWORD Acks;
+ DWORD Naks;
+ DWORD Declines;
+ DWORD Releases;
+ DATE_TIME ServerStartTime;
+ DWORD Scopes;
+#if defined(MIDL_PASS)
+ [size_is(Scopes)]
+#endif // MIDL_PASS
+ LPSCOPE_MIB_INFO ScopeInfo; // array.
+} DHCP_MIB_INFO, *LPDHCP_MIB_INFO;
+
+#define Set_APIProtocolSupport 0x00000001
+#define Set_DatabaseName 0x00000002
+#define Set_DatabasePath 0x00000004
+#define Set_BackupPath 0x00000008
+#define Set_BackupInterval 0x00000010
+#define Set_DatabaseLoggingFlag 0x00000020
+#define Set_RestoreFlag 0x00000040
+#define Set_DatabaseCleanupInterval 0x00000080
+#define Set_DebugFlag 0x00000100
+#define Set_PingRetries 0x00000200
+#define Set_BootFileTable 0x00000400
+#define Set_AuditLogState 0x00000800
+
+typedef struct _DHCP_SERVER_CONFIG_INFO {
+ DWORD APIProtocolSupport; // bit map of the protocols supported.
+ LPWSTR DatabaseName; // JET database name.
+ LPWSTR DatabasePath; // JET database path.
+ LPWSTR BackupPath; // Backup path.
+ DWORD BackupInterval; // Backup interval in mins.
+ DWORD DatabaseLoggingFlag; // Boolean database logging flag.
+ DWORD RestoreFlag; // Boolean database restore flag.
+ DWORD DatabaseCleanupInterval; // Database Cleanup Interval in mins.
+ DWORD DebugFlag; // Bit map of server debug flags.
+} DHCP_SERVER_CONFIG_INFO, *LPDHCP_SERVER_CONFIG_INFO;
+
+typedef enum _DHCP_SCAN_FLAG {
+ DhcpRegistryFix,
+ DhcpDatabaseFix
+} DHCP_SCAN_FLAG, *LPDHCP_SCAN_FLAG;
+
+typedef struct _DHCP_SCAN_ITEM {
+ DHCP_IP_ADDRESS IpAddress;
+ DHCP_SCAN_FLAG ScanFlag;
+} DHCP_SCAN_ITEM, *LPDHCP_SCAN_ITEM;
+
+typedef struct _DHCP_SCAN_LIST {
+ DWORD NumScanItems;
+#if defined(MIDL_PASS)
+ [size_is(NumScanItems)]
+#endif // MIDL_PASS
+ DHCP_SCAN_ITEM *ScanItems; // array
+} DHCP_SCAN_LIST, *LPDHCP_SCAN_LIST;
+
+//
+// API proto types
+//
+
+//
+// Subnet APIs
+//
+
+DWORD DHCP_API_FUNCTION
+DhcpCreateSubnet(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_CONST DHCP_SUBNET_INFO * SubnetInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpSetSubnetInfo(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_CONST DHCP_SUBNET_INFO * SubnetInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpGetSubnetInfo(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ LPDHCP_SUBNET_INFO * SubnetInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpEnumSubnets(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_RESUME_HANDLE *ResumeHandle,
+ DWORD PreferredMaximum,
+ LPDHCP_IP_ARRAY *EnumInfo,
+ DWORD *ElementsRead,
+ DWORD *ElementsTotal
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpAddSubnetElement(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_CONST DHCP_SUBNET_ELEMENT_DATA * AddElementInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpEnumSubnetElements(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_SUBNET_ELEMENT_TYPE EnumElementType,
+ DHCP_RESUME_HANDLE *ResumeHandle,
+ DWORD PreferredMaximum,
+ LPDHCP_SUBNET_ELEMENT_INFO_ARRAY *EnumElementInfo,
+ DWORD *ElementsRead,
+ DWORD *ElementsTotal
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpRemoveSubnetElement(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_CONST DHCP_SUBNET_ELEMENT_DATA * RemoveElementInfo,
+ DHCP_FORCE_FLAG ForceFlag
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpDeleteSubnet(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_FORCE_FLAG ForceFlag
+ );
+
+//
+// Option APIs
+//
+
+DWORD DHCP_API_FUNCTION
+DhcpCreateOption(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_OPTION_ID OptionID,
+ DHCP_CONST DHCP_OPTION * OptionInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpSetOptionInfo(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_OPTION_ID OptionID,
+ DHCP_CONST DHCP_OPTION * OptionInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpGetOptionInfo(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_OPTION_ID OptionID,
+ LPDHCP_OPTION *OptionInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpEnumOptions(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_RESUME_HANDLE *ResumeHandle,
+ DWORD PreferredMaximum,
+ LPDHCP_OPTION_ARRAY *Options,
+ DWORD *OptionsRead,
+ DWORD *OptionsTotal
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpRemoveOption(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_OPTION_ID OptionID
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpSetOptionValue(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_OPTION_ID OptionID,
+ DHCP_CONST DHCP_OPTION_SCOPE_INFO * ScopeInfo,
+ DHCP_CONST DHCP_OPTION_DATA * OptionValue
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpSetOptionValues(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_OPTION_SCOPE_INFO * ScopeInfo,
+ DHCP_CONST DHCP_OPTION_VALUE_ARRAY * OptionValues
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpGetOptionValue(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_OPTION_ID OptionID,
+ DHCP_CONST DHCP_OPTION_SCOPE_INFO *ScopeInfo,
+ LPDHCP_OPTION_VALUE *OptionValue
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpEnumOptionValues(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_OPTION_SCOPE_INFO *ScopeInfo,
+ DHCP_RESUME_HANDLE *ResumeHandle,
+ DWORD PreferredMaximum,
+ LPDHCP_OPTION_VALUE_ARRAY *OptionValues,
+ DWORD *OptionsRead,
+ DWORD *OptionsTotal
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpRemoveOptionValue(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_OPTION_ID OptionID,
+ DHCP_CONST DHCP_OPTION_SCOPE_INFO * ScopeInfo
+ );
+
+//
+// Client APIs
+//
+
+DWORD DHCP_API_FUNCTION
+DhcpCreateClientInfo(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_CLIENT_INFO *ClientInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpSetClientInfo(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_CLIENT_INFO *ClientInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpGetClientInfo(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_SEARCH_INFO *SearchInfo,
+ LPDHCP_CLIENT_INFO *ClientInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpDeleteClientInfo(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_SEARCH_INFO *ClientInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpEnumSubnetClients(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_RESUME_HANDLE *ResumeHandle,
+ DWORD PreferredMaximum,
+ LPDHCP_CLIENT_INFO_ARRAY *ClientInfo,
+ DWORD *ClientsRead,
+ DWORD *ClientsTotal
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpGetClientOptions(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS ClientIpAddress,
+ DHCP_IP_MASK ClientSubnetMask,
+ LPDHCP_OPTION_LIST *ClientOptions
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpGetMibInfo(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ LPDHCP_MIB_INFO *MibInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpServerSetConfig(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DWORD FieldsToSet,
+ LPDHCP_SERVER_CONFIG_INFO ConfigInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpServerGetConfig(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ LPDHCP_SERVER_CONFIG_INFO *ConfigInfo
+ );
+
+
+DWORD DHCP_API_FUNCTION
+DhcpScanDatabase(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DWORD FixFlag,
+ LPDHCP_SCAN_LIST *ScanList
+ );
+
+VOID DHCP_API_FUNCTION
+DhcpRpcFreeMemory(
+ PVOID BufferPointer
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpGetVersion(
+ LPWSTR ServerIpAddress,
+ LPDWORD MajorVersion,
+ LPDWORD MinorVersion
+ );
+
+//
+// new structures for NT4SP1
+//
+
+typedef struct _DHCP_IP_RESERVATION_V4 {
+ DHCP_IP_ADDRESS ReservedIpAddress;
+ DHCP_CLIENT_UID *ReservedForClient;
+ BYTE bAllowedClientTypes;
+} DHCP_IP_RESERVATION_V4, *LPDHCP_IP_RESERVATION_V4;
+
+typedef struct _DHCP_SUBNET_ELEMENT_DATA_V4 {
+ DHCP_SUBNET_ELEMENT_TYPE ElementType;
+#if defined(MIDL_PASS)
+ [switch_is(ElementType), switch_type(DHCP_SUBNET_ELEMENT_TYPE)]
+ union _DHCP_SUBNET_ELEMENT_UNION_V4 {
+ [case(DhcpIpRanges)] DHCP_IP_RANGE *IpRange;
+ [case(DhcpSecondaryHosts)] DHCP_HOST_INFO *SecondaryHost;
+ [case(DhcpReservedIps)] DHCP_IP_RESERVATION_V4 *ReservedIp;
+ [case(DhcpExcludedIpRanges)] DHCP_IP_RANGE *ExcludeIpRange;
+ [case(DhcpIpUsedClusters)] DHCP_IP_CLUSTER *IpUsedCluster;
+ [default] ;
+ } Element;
+#else
+ union _DHCP_SUBNET_ELEMENT_UNION_V4 {
+ DHCP_IP_RANGE *IpRange;
+ DHCP_HOST_INFO *SecondaryHost;
+ DHCP_IP_RESERVATION_V4 *ReservedIp;
+ DHCP_IP_RANGE *ExcludeIpRange;
+ DHCP_IP_CLUSTER *IpUsedCluster;
+ } Element;
+#endif // MIDL_PASS
+} DHCP_SUBNET_ELEMENT_DATA_V4, *LPDHCP_SUBNET_ELEMENT_DATA_V4;
+
+#if !defined(MIDL_PASS)
+typedef union _DHCP_SUBNET_ELEMENT_UNION_V4
+ DHCP_SUBNET_ELEMENT_UNION_V4, *LPDHCP_SUBNET_ELEMENT_UNION_V4;
+#endif
+
+typedef struct _DHCP_SUBNET_ELEMENT_INFO_ARRAY_V4 {
+ DWORD NumElements;
+#if defined(MIDL_PASS)
+ [size_is(NumElements)]
+#endif // MIDL_PASS
+ LPDHCP_SUBNET_ELEMENT_DATA_V4 Elements; //array
+} DHCP_SUBNET_ELEMENT_INFO_ARRAY_V4, *LPDHCP_SUBNET_ELEMENT_INFO_ARRAY_V4;
+
+
+// DHCP_CLIENT_INFO:bClientType
+
+#define CLIENT_TYPE_UNSPECIFIED 0x0 // for backward compatibility
+#define CLIENT_TYPE_DHCP 0x1
+#define CLIENT_TYPE_BOOTP 0x2
+#define CLIENT_TYPE_BOTH ( CLIENT_TYPE_DHCP | CLIENT_TYPE_BOOTP )
+#define CLIENT_TYPE_NONE 0x64
+#define BOOT_FILE_STRING_DELIMITER ','
+#define BOOT_FILE_STRING_DELIMITER_W L','
+
+
+typedef struct _DHCP_CLIENT_INFO_V4 {
+ DHCP_IP_ADDRESS ClientIpAddress; // currently assigned IP address.
+ DHCP_IP_MASK SubnetMask;
+ DHCP_CLIENT_UID ClientHardwareAddress;
+ LPWSTR ClientName; // optional.
+ LPWSTR ClientComment;
+ DATE_TIME ClientLeaseExpires; // UTC time in FILE_TIME format.
+ DHCP_HOST_INFO OwnerHost; // host that distributed this IP address.
+ //
+ // new fields for NT4SP1
+ //
+
+ BYTE bClientType; // CLIENT_TYPE_DHCP | CLIENT_TYPE_BOOTP |
+ // CLIENT_TYPE_NONE
+} DHCP_CLIENT_INFO_V4, *LPDHCP_CLIENT_INFO_V4;
+
+typedef struct _DHCP_CLIENT_INFO_ARRAY_V4 {
+ DWORD NumElements;
+#if defined(MIDL_PASS)
+ [size_is(NumElements)]
+#endif // MIDL_PASS
+ LPDHCP_CLIENT_INFO_V4 *Clients; // array of pointers
+} DHCP_CLIENT_INFO_ARRAY_V4, *LPDHCP_CLIENT_INFO_ARRAY_V4;
+
+
+typedef struct _DHCP_SERVER_CONFIG_INFO_V4 {
+ DWORD APIProtocolSupport; // bit map of the protocols supported.
+ LPWSTR DatabaseName; // JET database name.
+ LPWSTR DatabasePath; // JET database path.
+ LPWSTR BackupPath; // Backup path.
+ DWORD BackupInterval; // Backup interval in mins.
+ DWORD DatabaseLoggingFlag; // Boolean database logging flag.
+ DWORD RestoreFlag; // Boolean database restore flag.
+ DWORD DatabaseCleanupInterval; // Database Cleanup Interval in mins.
+ DWORD DebugFlag; // Bit map of server debug flags.
+
+ // new fields for NT4 SP1
+
+ DWORD dwPingRetries; // valid range: 0-5 inclusive
+ DWORD cbBootTableString;
+#if defined( MIDL_PASS )
+ [ size_is( cbBootTableString ) ]
+#endif
+ WCHAR *wszBootTableString;
+ BOOL fAuditLog; // TRUE to enable audit log
+
+} DHCP_SERVER_CONFIG_INFO_V4, *LPDHCP_SERVER_CONFIG_INFO_V4;
+
+
+//
+// superscope info structure (added by t-cheny)
+//
+
+typedef struct _DHCP_SUPER_SCOPE_TABLE_ENTRY {
+ DHCP_IP_ADDRESS SubnetAddress; // subnet address
+ DWORD SuperScopeNumber; // super scope group number
+ DWORD NextInSuperScope; // index of the next subnet in the superscope
+ LPWSTR SuperScopeName; // super scope name
+ // NULL indicates no superscope membership.
+} DHCP_SUPER_SCOPE_TABLE_ENTRY, *LPDHCP_SUPER_SCOPE_TABLE_ENTRY;
+
+
+typedef struct _DHCP_SUPER_SCOPE_TABLE
+{
+ DWORD cEntries;
+#if defined( MIDL_PASS )
+ [ size_is( cEntries ) ]
+#endif;
+ DHCP_SUPER_SCOPE_TABLE_ENTRY *pEntries;
+} DHCP_SUPER_SCOPE_TABLE, *LPDHCP_SUPER_SCOPE_TABLE;
+
+//
+// NT4SP1 RPC interface
+//
+
+DWORD DHCP_API_FUNCTION
+DhcpAddSubnetElementV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_CONST DHCP_SUBNET_ELEMENT_DATA_V4 * AddElementInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpEnumSubnetElementsV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_SUBNET_ELEMENT_TYPE EnumElementType,
+ DHCP_RESUME_HANDLE *ResumeHandle,
+ DWORD PreferredMaximum,
+ LPDHCP_SUBNET_ELEMENT_INFO_ARRAY_V4 *EnumElementInfo,
+ DWORD *ElementsRead,
+ DWORD *ElementsTotal
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpRemoveSubnetElementV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_CONST DHCP_SUBNET_ELEMENT_DATA_V4 * RemoveElementInfo,
+ DHCP_FORCE_FLAG ForceFlag
+ );
+
+
+ DWORD DHCP_API_FUNCTION
+DhcpCreateClientInfoV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_CLIENT_INFO_V4 *ClientInfo
+ );
+
+
+DWORD DHCP_API_FUNCTION
+DhcpSetClientInfoV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_CLIENT_INFO_V4 *ClientInfo
+ );
+
+
+DWORD DHCP_API_FUNCTION
+DhcpGetClientInfoV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_SEARCH_INFO *SearchInfo,
+ LPDHCP_CLIENT_INFO_V4 *ClientInfo
+ );
+
+
+DWORD DHCP_API_FUNCTION
+DhcpEnumSubnetClientsV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_RESUME_HANDLE *ResumeHandle,
+ DWORD PreferredMaximum,
+ LPDHCP_CLIENT_INFO_ARRAY_V4 *ClientInfo,
+ DWORD *ClientsRead,
+ DWORD *ClientsTotal
+ );
+
+
+DWORD DHCP_API_FUNCTION
+DhcpServerSetConfigV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DWORD FieldsToSet,
+ LPDHCP_SERVER_CONFIG_INFO_V4 ConfigInfo
+ );
+
+DWORD DHCP_API_FUNCTION
+DhcpServerGetConfigV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ LPDHCP_SERVER_CONFIG_INFO_V4 *ConfigInfo
+ );
+
+
+DWORD
+DhcpSetSuperScopeV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST DHCP_IP_ADDRESS SubnetAddress,
+ DHCP_CONST LPWSTR SuperScopeName,
+ DHCP_CONST BOOL ChangeExisting
+ );
+
+DWORD
+DhcpDeleteSuperScopeV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ DHCP_CONST LPWSTR SuperScopeName
+ );
+
+DWORD
+DhcpGetSuperScopeInfoV4(
+ DHCP_CONST WCHAR *ServerIpAddress,
+ LPDHCP_SUPER_SCOPE_TABLE *SuperScopeTable
+ );
+
+
+
+
+#endif // _DHCPAPI_
+