NT4/private/inc/dhcpapi.h
2020-09-30 17:12:29 +02:00

979 lines
27 KiB
C

/*++
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_