mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-05 06:39:04 +02:00
449 lines
15 KiB
ObjectPascal
449 lines
15 KiB
ObjectPascal
{******************************************************************************}
|
|
{ }
|
|
{ DHCP Client API interface unit for Object Pascal }
|
|
{ }
|
|
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
|
|
{ Corporation. All Rights Reserved. }
|
|
{ }
|
|
{ The original file is: dhcpcsdk.h, released June 2000. The original Pascal }
|
|
{ code is: DhcpCSdk.pas, released December 2000. The initial developer of the }
|
|
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
|
|
{ }
|
|
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
|
|
{ Marcel van Brakel. All Rights Reserved. }
|
|
{ }
|
|
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
|
|
{ }
|
|
{ You may retrieve the latest version of this file at the Project JEDI }
|
|
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
|
|
{ }
|
|
{ The contents of this file are used with permission, subject to the Mozilla }
|
|
{ Public License Version 1.1 (the "License"); you may not use this file except }
|
|
{ in compliance with the License. You may obtain a copy of the License at }
|
|
{ http://www.mozilla.org/MPL/MPL-1.1.html }
|
|
{ }
|
|
{ Software distributed under the License is distributed on an "AS IS" basis, }
|
|
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
|
|
{ the specific language governing rights and limitations under the License. }
|
|
{ }
|
|
{ Alternatively, the contents of this file may be used under the terms of the }
|
|
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
|
|
{ provisions of the LGPL License are applicable instead of those above. }
|
|
{ If you wish to allow use of your version of this file only under the terms }
|
|
{ of the LGPL License and not to allow others to use your version of this file }
|
|
{ under the MPL, indicate your decision by deleting the provisions above and }
|
|
{ replace them with the notice and other provisions required by the LGPL }
|
|
{ License. If you do not delete the provisions above, a recipient may use }
|
|
{ your version of this file under either the MPL or the LGPL License. }
|
|
{ }
|
|
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
|
|
{ }
|
|
{******************************************************************************}
|
|
|
|
|
|
unit JwaDhcpCSdk;
|
|
|
|
{$WEAKPACKAGEUNIT}
|
|
|
|
{$HPPEMIT ''}
|
|
{$HPPEMIT '#include "dhcpcsdk.h"'}
|
|
{$HPPEMIT ''}
|
|
|
|
{$I jediapilib.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
JwaWinType;
|
|
|
|
//
|
|
// DHCP Standard Options.
|
|
//
|
|
|
|
const
|
|
OPTION_PAD = 0;
|
|
{$EXTERNALSYM OPTION_PAD}
|
|
OPTION_SUBNET_MASK = 1;
|
|
{$EXTERNALSYM OPTION_SUBNET_MASK}
|
|
OPTION_TIME_OFFSET = 2;
|
|
{$EXTERNALSYM OPTION_TIME_OFFSET}
|
|
OPTION_ROUTER_ADDRESS = 3;
|
|
{$EXTERNALSYM OPTION_ROUTER_ADDRESS}
|
|
OPTION_TIME_SERVERS = 4;
|
|
{$EXTERNALSYM OPTION_TIME_SERVERS}
|
|
OPTION_IEN116_NAME_SERVERS = 5;
|
|
{$EXTERNALSYM OPTION_IEN116_NAME_SERVERS}
|
|
OPTION_DOMAIN_NAME_SERVERS = 6;
|
|
{$EXTERNALSYM OPTION_DOMAIN_NAME_SERVERS}
|
|
OPTION_LOG_SERVERS = 7;
|
|
{$EXTERNALSYM OPTION_LOG_SERVERS}
|
|
OPTION_COOKIE_SERVERS = 8;
|
|
{$EXTERNALSYM OPTION_COOKIE_SERVERS}
|
|
OPTION_LPR_SERVERS = 9;
|
|
{$EXTERNALSYM OPTION_LPR_SERVERS}
|
|
OPTION_IMPRESS_SERVERS = 10;
|
|
{$EXTERNALSYM OPTION_IMPRESS_SERVERS}
|
|
OPTION_RLP_SERVERS = 11;
|
|
{$EXTERNALSYM OPTION_RLP_SERVERS}
|
|
OPTION_HOST_NAME = 12;
|
|
{$EXTERNALSYM OPTION_HOST_NAME}
|
|
OPTION_BOOT_FILE_SIZE = 13;
|
|
{$EXTERNALSYM OPTION_BOOT_FILE_SIZE}
|
|
OPTION_MERIT_DUMP_FILE = 14;
|
|
{$EXTERNALSYM OPTION_MERIT_DUMP_FILE}
|
|
OPTION_DOMAIN_NAME = 15;
|
|
{$EXTERNALSYM OPTION_DOMAIN_NAME}
|
|
OPTION_SWAP_SERVER = 16;
|
|
{$EXTERNALSYM OPTION_SWAP_SERVER}
|
|
OPTION_ROOT_DISK = 17;
|
|
{$EXTERNALSYM OPTION_ROOT_DISK}
|
|
OPTION_EXTENSIONS_PATH = 18;
|
|
{$EXTERNALSYM OPTION_EXTENSIONS_PATH}
|
|
|
|
//
|
|
// IP layer parameters - per host
|
|
//
|
|
|
|
OPTION_BE_A_ROUTER = 19;
|
|
{$EXTERNALSYM OPTION_BE_A_ROUTER}
|
|
OPTION_NON_LOCAL_SOURCE_ROUTING = 20;
|
|
{$EXTERNALSYM OPTION_NON_LOCAL_SOURCE_ROUTING}
|
|
OPTION_POLICY_FILTER_FOR_NLSR = 21;
|
|
{$EXTERNALSYM OPTION_POLICY_FILTER_FOR_NLSR}
|
|
OPTION_MAX_REASSEMBLY_SIZE = 22;
|
|
{$EXTERNALSYM OPTION_MAX_REASSEMBLY_SIZE}
|
|
OPTION_DEFAULT_TTL = 23;
|
|
{$EXTERNALSYM OPTION_DEFAULT_TTL}
|
|
OPTION_PMTU_AGING_TIMEOUT = 24;
|
|
{$EXTERNALSYM OPTION_PMTU_AGING_TIMEOUT}
|
|
OPTION_PMTU_PLATEAU_TABLE = 25;
|
|
{$EXTERNALSYM OPTION_PMTU_PLATEAU_TABLE}
|
|
|
|
//
|
|
// Link layer parameters - per interface.
|
|
//
|
|
|
|
OPTION_MTU = 26;
|
|
{$EXTERNALSYM OPTION_MTU}
|
|
OPTION_ALL_SUBNETS_MTU = 27;
|
|
{$EXTERNALSYM OPTION_ALL_SUBNETS_MTU}
|
|
OPTION_BROADCAST_ADDRESS = 28;
|
|
{$EXTERNALSYM OPTION_BROADCAST_ADDRESS}
|
|
OPTION_PERFORM_MASK_DISCOVERY = 29;
|
|
{$EXTERNALSYM OPTION_PERFORM_MASK_DISCOVERY}
|
|
OPTION_BE_A_MASK_SUPPLIER = 30;
|
|
{$EXTERNALSYM OPTION_BE_A_MASK_SUPPLIER}
|
|
OPTION_PERFORM_ROUTER_DISCOVERY = 31;
|
|
{$EXTERNALSYM OPTION_PERFORM_ROUTER_DISCOVERY}
|
|
OPTION_ROUTER_SOLICITATION_ADDR = 32;
|
|
{$EXTERNALSYM OPTION_ROUTER_SOLICITATION_ADDR}
|
|
OPTION_STATIC_ROUTES = 33;
|
|
{$EXTERNALSYM OPTION_STATIC_ROUTES}
|
|
OPTION_TRAILERS = 34;
|
|
{$EXTERNALSYM OPTION_TRAILERS}
|
|
OPTION_ARP_CACHE_TIMEOUT = 35;
|
|
{$EXTERNALSYM OPTION_ARP_CACHE_TIMEOUT}
|
|
OPTION_ETHERNET_ENCAPSULATION = 36;
|
|
{$EXTERNALSYM OPTION_ETHERNET_ENCAPSULATION}
|
|
|
|
//
|
|
// TCP Paramters - per host
|
|
//
|
|
|
|
OPTION_TTL = 37;
|
|
{$EXTERNALSYM OPTION_TTL}
|
|
OPTION_KEEP_ALIVE_INTERVAL = 38;
|
|
{$EXTERNALSYM OPTION_KEEP_ALIVE_INTERVAL}
|
|
OPTION_KEEP_ALIVE_DATA_SIZE = 39;
|
|
{$EXTERNALSYM OPTION_KEEP_ALIVE_DATA_SIZE}
|
|
|
|
//
|
|
// Application Layer Parameters
|
|
//
|
|
|
|
OPTION_NETWORK_INFO_SERVICE_DOM = 40;
|
|
{$EXTERNALSYM OPTION_NETWORK_INFO_SERVICE_DOM}
|
|
OPTION_NETWORK_INFO_SERVERS = 41;
|
|
{$EXTERNALSYM OPTION_NETWORK_INFO_SERVERS}
|
|
OPTION_NETWORK_TIME_SERVERS = 42;
|
|
{$EXTERNALSYM OPTION_NETWORK_TIME_SERVERS}
|
|
|
|
//
|
|
// Vender specific information option
|
|
//
|
|
|
|
OPTION_VENDOR_SPEC_INFO = 43;
|
|
{$EXTERNALSYM OPTION_VENDOR_SPEC_INFO}
|
|
|
|
//
|
|
// NetBIOS over TCP/IP Name server option
|
|
//
|
|
|
|
OPTION_NETBIOS_NAME_SERVER = 44;
|
|
{$EXTERNALSYM OPTION_NETBIOS_NAME_SERVER}
|
|
OPTION_NETBIOS_DATAGRAM_SERVER = 45;
|
|
{$EXTERNALSYM OPTION_NETBIOS_DATAGRAM_SERVER}
|
|
OPTION_NETBIOS_NODE_TYPE = 46;
|
|
{$EXTERNALSYM OPTION_NETBIOS_NODE_TYPE}
|
|
OPTION_NETBIOS_SCOPE_OPTION = 47;
|
|
{$EXTERNALSYM OPTION_NETBIOS_SCOPE_OPTION}
|
|
|
|
//
|
|
// X Window System Options.
|
|
//
|
|
|
|
OPTION_XWINDOW_FONT_SERVER = 48;
|
|
{$EXTERNALSYM OPTION_XWINDOW_FONT_SERVER}
|
|
OPTION_XWINDOW_DISPLAY_MANAGER = 49;
|
|
{$EXTERNALSYM OPTION_XWINDOW_DISPLAY_MANAGER}
|
|
|
|
//
|
|
// Other extensions
|
|
//
|
|
|
|
OPTION_REQUESTED_ADDRESS = 50;
|
|
{$EXTERNALSYM OPTION_REQUESTED_ADDRESS}
|
|
OPTION_LEASE_TIME = 51;
|
|
{$EXTERNALSYM OPTION_LEASE_TIME}
|
|
OPTION_OK_TO_OVERLAY = 52;
|
|
{$EXTERNALSYM OPTION_OK_TO_OVERLAY}
|
|
OPTION_MESSAGE_TYPE = 53;
|
|
{$EXTERNALSYM OPTION_MESSAGE_TYPE}
|
|
OPTION_SERVER_IDENTIFIER = 54;
|
|
{$EXTERNALSYM OPTION_SERVER_IDENTIFIER}
|
|
OPTION_PARAMETER_REQUEST_LIST = 55;
|
|
{$EXTERNALSYM OPTION_PARAMETER_REQUEST_LIST}
|
|
OPTION_MESSAGE = 56;
|
|
{$EXTERNALSYM OPTION_MESSAGE}
|
|
OPTION_MESSAGE_LENGTH = 57;
|
|
{$EXTERNALSYM OPTION_MESSAGE_LENGTH}
|
|
OPTION_RENEWAL_TIME = 58; // T1
|
|
{$EXTERNALSYM OPTION_RENEWAL_TIME}
|
|
OPTION_REBIND_TIME = 59; // T2
|
|
{$EXTERNALSYM OPTION_REBIND_TIME}
|
|
OPTION_CLIENT_CLASS_INFO = 60;
|
|
{$EXTERNALSYM OPTION_CLIENT_CLASS_INFO}
|
|
OPTION_CLIENT_ID = 61;
|
|
{$EXTERNALSYM OPTION_CLIENT_ID}
|
|
|
|
OPTION_TFTP_SERVER_NAME = 66;
|
|
{$EXTERNALSYM OPTION_TFTP_SERVER_NAME}
|
|
OPTION_BOOTFILE_NAME = 67;
|
|
{$EXTERNALSYM OPTION_BOOTFILE_NAME}
|
|
|
|
OPTION_END = 255;
|
|
{$EXTERNALSYM OPTION_END}
|
|
|
|
type
|
|
_DHCPAPI_PARAMS = record
|
|
Flags: ULONG; // for future use
|
|
OptionId: ULONG; // what option is this?
|
|
IsVendor: BOOL; // is this vendor specific?
|
|
Data: LPBYTE; // the actual data
|
|
nBytesData: DWORD; // how many bytes of data are there in Data?
|
|
end;
|
|
{$EXTERNALSYM _DHCPAPI_PARAMS}
|
|
DHCPAPI_PARAMS = _DHCPAPI_PARAMS;
|
|
{$EXTERNALSYM DHCPAPI_PARAMS}
|
|
LPDHCPAPI_PARAMS = ^DHCPAPI_PARAMS;
|
|
{$EXTERNALSYM LPDHCPAPI_PARAMS}
|
|
PDHCPAPI_PARAMS = ^DHCPAPI_PARAMS;
|
|
{$EXTERNALSYM PDHCPAPI_PARAMS}
|
|
TDhcpApiParams = DHCPAPI_PARAMS;
|
|
PDhcpApiParams = PDHCPAPI_PARAMS;
|
|
|
|
DHCPCAPI_PARAMS = DHCPAPI_PARAMS;
|
|
{$EXTERNALSYM DHCPCAPI_PARAMS}
|
|
PDHCPCAPI_PARAMS = ^DHCPCAPI_PARAMS;
|
|
{$EXTERNALSYM PDHCPCAPI_PARAMS}
|
|
LPDHCPCAPI_PARAMS = ^DHCPCAPI_PARAMS;
|
|
{$EXTERNALSYM LPDHCPCAPI_PARAMS}
|
|
TDhcpCApiParams = DHCPCAPI_PARAMS;
|
|
PDhcpCApiParams = PDHCPCAPI_PARAMS;
|
|
|
|
_DHCPCAPI_PARAMS_ARRAY = record
|
|
nParams: ULONG; // size of array
|
|
Params: PDHCPCAPI_PARAMS; // actual array
|
|
end;
|
|
{$EXTERNALSYM _DHCPCAPI_PARAMS_ARRAY}
|
|
DHCPCAPI_PARAMS_ARRAY = _DHCPCAPI_PARAMS_ARRAY;
|
|
{$EXTERNALSYM DHCPCAPI_PARAMS_ARRAY}
|
|
LPDHCPCAPI_PARAMS_ARRAY = ^DHCPCAPI_PARAMS_ARRAY;
|
|
{$EXTERNALSYM LPDHCPCAPI_PARAMS_ARRAY}
|
|
PDHCPCAPI_PARAMS_ARRAY = ^DHCPCAPI_PARAMS_ARRAY;
|
|
{$EXTERNALSYM PDHCPCAPI_PARAMS_ARRAY}
|
|
TDhcpcApiParamsArray = DHCPCAPI_PARAMS_ARRAY;
|
|
PDhcpcApiParamsArray = PDHCPCAPI_PARAMS_ARRAY;
|
|
|
|
_DHCPCAPI_CLASSID = record
|
|
Flags: ULONG; // must be zero currently.
|
|
Data: LPBYTE; // classid binary data.
|
|
nBytesData: ULONG; // how many bytes of data are there?
|
|
end;
|
|
{$EXTERNALSYM _DHCPCAPI_CLASSID}
|
|
DHCPCAPI_CLASSID = _DHCPCAPI_CLASSID;
|
|
{$EXTERNALSYM DHCPCAPI_CLASSID}
|
|
LPDHCPCAPI_CLASSID = ^DHCPCAPI_CLASSID;
|
|
{$EXTERNALSYM LPDHCPCAPI_CLASSID}
|
|
PDHCPCAPI_CLASSID = ^DHCPCAPI_CLASSID;
|
|
{$EXTERNALSYM PDHCPCAPI_CLASSID}
|
|
TDhcpcApiClassId = DHCPCAPI_CLASSID;
|
|
PDhcpcApiClassId = PDHCPCAPI_CLASSID;
|
|
|
|
const
|
|
DHCPCAPI_REQUEST_PERSISTENT = $01; // request this options "permanently"
|
|
{$EXTERNALSYM DHCPCAPI_REQUEST_PERSISTENT}
|
|
DHCPCAPI_REQUEST_SYNCHRONOUS = $02; // request and block on it
|
|
{$EXTERNALSYM DHCPCAPI_REQUEST_SYNCHRONOUS}
|
|
DHCPCAPI_REQUEST_ASYNCHRONOUS = $04; // request and return, set event on completion
|
|
{$EXTERNALSYM DHCPCAPI_REQUEST_ASYNCHRONOUS}
|
|
DHCPCAPI_REQUEST_CANCEL = $08; // cancel request
|
|
{$EXTERNALSYM DHCPCAPI_REQUEST_CANCEL}
|
|
DHCPCAPI_REQUEST_MASK = $0F; // allowed flags..
|
|
{$EXTERNALSYM DHCPCAPI_REQUEST_MASK}
|
|
|
|
function DhcpCApiInitialize(var Version: DWORD): DWORD; stdcall;
|
|
{$EXTERNALSYM DhcpCApiInitialize}
|
|
|
|
procedure DhcpCApiCleanup; stdcall;
|
|
{$EXTERNALSYM DhcpCApiCleanup}
|
|
|
|
function DhcpRequestParams(Flags: DWORD; Reserved: LPVOID; AdapterName: LPWSTR;
|
|
ClassId: PDHCPCAPI_CLASSID; SendParams, RecdParams: DHCPCAPI_PARAMS_ARRAY;
|
|
Buffer: LPBYTE; pSize: LPDWORD; RequestIdStr: LPWSTR): DWORD; stdcall;
|
|
{$EXTERNALSYM DhcpRequestParams}
|
|
|
|
function DhcpUndoRequestParams(Flags: DWORD; Reserved: LPVOID; AdapterName: LPWSTR;
|
|
RequestIdStr: LPWSTR): DWORD; stdcall;
|
|
{$EXTERNALSYM DhcpUndoRequestParams}
|
|
|
|
const
|
|
DHCPCAPI_REGISTER_HANDLE_EVENT = $01; // handle returned is to an event
|
|
{$EXTERNALSYM DHCPCAPI_REGISTER_HANDLE_EVENT}
|
|
|
|
function DhcpRegisterParamChange(Flags: DWORD; Reserved: LPVOID; AdapterName: LPWSTR;
|
|
ClassId: PDHCPCAPI_CLASSID; Params: DHCPCAPI_PARAMS_ARRAY; Handle: LPVOID): DWORD; stdcall;
|
|
{$EXTERNALSYM DhcpRegisterParamChange}
|
|
|
|
const
|
|
DHCPCAPI_DEREGISTER_HANDLE_EVENT = $01; // de-register handle that is an event
|
|
{$EXTERNALSYM DHCPCAPI_DEREGISTER_HANDLE_EVENT}
|
|
|
|
function DhcpDeRegisterParamChange(Flags: DWORD; Reserved, Event: LPVOID): DWORD; stdcall;
|
|
{$EXTERNALSYM DhcpDeRegisterParamChange}
|
|
|
|
function DhcpRemoveDNSRegistrations: DWORD; stdcall;
|
|
{$EXTERNALSYM DhcpRemoveDNSRegistrations}
|
|
|
|
implementation
|
|
|
|
const
|
|
dhcpapi = 'dhcpcsvc.dll';
|
|
|
|
{$IFDEF DYNAMIC_LINK}
|
|
|
|
var
|
|
_DhcpCApiInitialize: Pointer;
|
|
|
|
function DhcpCApiInitialize;
|
|
begin
|
|
GetProcedureAddress(_DhcpCApiInitialize, dhcpapi, 'DhcpCApiInitialize');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_DhcpCApiInitialize]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_DhcpCApiCleanup: Pointer;
|
|
|
|
procedure DhcpCApiCleanup;
|
|
begin
|
|
GetProcedureAddress(_DhcpCApiCleanup, dhcpapi, 'DhcpCApiCleanup');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_DhcpCApiCleanup]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_DhcpRequestParams: Pointer;
|
|
|
|
function DhcpRequestParams;
|
|
begin
|
|
GetProcedureAddress(_DhcpRequestParams, dhcpapi, 'DhcpRequestParams');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_DhcpRequestParams]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_DhcpUndoRequestParams: Pointer;
|
|
|
|
function DhcpUndoRequestParams;
|
|
begin
|
|
GetProcedureAddress(_DhcpUndoRequestParams, dhcpapi, 'DhcpUndoRequestParams');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_DhcpUndoRequestParams]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_DhcpRegisterParamChange: Pointer;
|
|
|
|
function DhcpRegisterParamChange;
|
|
begin
|
|
GetProcedureAddress(_DhcpRegisterParamChange, dhcpapi, 'DhcpRegisterParamChange');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_DhcpRegisterParamChange]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_DhcpDeRegisterParamChange: Pointer;
|
|
|
|
function DhcpDeRegisterParamChange;
|
|
begin
|
|
GetProcedureAddress(_DhcpDeRegisterParamChange, dhcpapi, 'DhcpDeRegisterParamChange');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_DhcpDeRegisterParamChange]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_DhcpRemoveDNSRegistrations: Pointer;
|
|
|
|
function DhcpRemoveDNSRegistrations;
|
|
begin
|
|
GetProcedureAddress(_DhcpRemoveDNSRegistrations, dhcpapi, 'DhcpRemoveDNSRegistrations');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_DhcpRemoveDNSRegistrations]
|
|
end;
|
|
end;
|
|
|
|
{$ELSE}
|
|
|
|
function DhcpCApiInitialize; external dhcpapi name 'DhcpCApiInitialize';
|
|
procedure DhcpCApiCleanup; external dhcpapi name 'DhcpCApiCleanup';
|
|
function DhcpRequestParams; external dhcpapi name 'DhcpRequestParams';
|
|
function DhcpUndoRequestParams; external dhcpapi name 'DhcpUndoRequestParams';
|
|
function DhcpRegisterParamChange; external dhcpapi name 'DhcpRegisterParamChange';
|
|
function DhcpDeRegisterParamChange; external dhcpapi name 'DhcpDeRegisterParamChange';
|
|
function DhcpRemoveDNSRegistrations; external dhcpapi name 'DhcpRemoveDNSRegistrations';
|
|
|
|
{$ENDIF DYNAMIC_LINK}
|
|
|
|
end.
|