diff options
Diffstat (limited to 'private/inc/dhcpapi.h')
-rw-r--r-- | private/inc/dhcpapi.h | 978 |
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_ + |