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 _CALLOUT_H_
7 #define _CALLOUT_H_
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13   typedef DWORD DHCP_IP_ADDRESS;
14   typedef struct _DHCP_SERVER_OPTIONS {
15     BYTE *MessageType;
16     DHCP_IP_ADDRESS UNALIGNED *SubnetMask;
17     DHCP_IP_ADDRESS UNALIGNED *RequestedAddress;
18     DWORD UNALIGNED *RequestLeaseTime;
19     BYTE *OverlayFields;
20     DHCP_IP_ADDRESS UNALIGNED *RouterAddress;
21     DHCP_IP_ADDRESS UNALIGNED *Server;
22     BYTE *ParameterRequestList;
23     DWORD ParameterRequestListLength;
24     CHAR *MachineName;
25     DWORD MachineNameLength;
26     BYTE ClientHardwareAddressType;
27     BYTE ClientHardwareAddressLength;
28     BYTE *ClientHardwareAddress;
29     CHAR *ClassIdentifier;
30     DWORD ClassIdentifierLength;
31     BYTE *VendorClass;
32     DWORD VendorClassLength;
33     DWORD DNSFlags;
34     DWORD DNSNameLength;
35     LPBYTE DNSName;
36     BOOLEAN DSDomainNameRequested;
37     CHAR *DSDomainName;
38     DWORD DSDomainNameLen;
39     DWORD UNALIGNED *ScopeId;
40   } DHCP_SERVER_OPTIONS,*LPDHCP_SERVER_OPTIONS;
41 
42 #define DHCP_CALLOUT_LIST_KEY L"System\\CurrentControlSet\\Services\\DHCPServer\\Parameters"
43 #define DHCP_CALLOUT_LIST_VALUE L"CalloutDlls"
44 #define DHCP_CALLOUT_LIST_TYPE REG_MULTI_SZ
45 #define DHCP_CALLOUT_ENTRY_POINT "DhcpServerCalloutEntry"
46 
47 #define DHCP_CONTROL_START 0x00000001
48 #define DHCP_CONTROL_STOP 0x00000002
49 #define DHCP_CONTROL_PAUSE 0x00000003
50 #define DHCP_CONTROL_CONTINUE 0x00000004
51 
52 #define DHCP_DROP_DUPLICATE 0x00000001
53 #define DHCP_DROP_NOMEM 0x00000002
54 #define DHCP_DROP_INTERNAL_ERROR 0x00000003
55 #define DHCP_DROP_TIMEOUT 0x00000004
56 #define DHCP_DROP_UNAUTH 0x00000005
57 #define DHCP_DROP_PAUSED 0x00000006
58 #define DHCP_DROP_NO_SUBNETS 0x00000007
59 #define DHCP_DROP_INVALID 0x00000008
60 #define DHCP_DROP_WRONG_SERVER 0x00000009
61 #define DHCP_DROP_NOADDRESS 0x0000000A
62 #define DHCP_DROP_PROCESSED 0x0000000B
63 #define DHCP_DROP_GEN_FAILURE 0x00000100
64 #define DHCP_SEND_PACKET 0x10000000
65 #define DHCP_PROB_CONFLICT 0x20000001
66 #define DHCP_PROB_DECLINE 0x20000002
67 #define DHCP_PROB_RELEASE 0x20000003
68 #define DHCP_PROB_NACKED 0x20000004
69 #define DHCP_GIVE_ADDRESS_NEW 0x30000001
70 #define DHCP_GIVE_ADDRESS_OLD 0x30000002
71 #define DHCP_CLIENT_BOOTP 0x30000003
72 #define DHCP_CLIENT_DHCP 0x30000004
73 
74   typedef DWORD (WINAPI *LPDHCP_CONTROL)(DWORD dwControlCode,LPVOID lpReserved);
75   typedef DWORD (WINAPI *LPDHCP_NEWPKT)(LPBYTE *Packet,DWORD *PacketSize,DWORD IpAddress,LPVOID Reserved,LPVOID *PktContext,LPBOOL ProcessIt);
76   typedef DWORD (WINAPI *LPDHCP_DROP_SEND)(LPBYTE *Packet,DWORD *PacketSize,DWORD ControlCode,DWORD IpAddress,LPVOID Reserved,LPVOID PktContext);
77   typedef DWORD (WINAPI *LPDHCP_PROB)(LPBYTE Packet,DWORD PacketSize,DWORD ControlCode,DWORD IpAddress,DWORD AltAddress,LPVOID Reserved,LPVOID PktContext);
78   typedef DWORD (WINAPI *LPDHCP_GIVE_ADDRESS)(LPBYTE Packet,DWORD PacketSize,DWORD ControlCode,DWORD IpAddress,DWORD AltAddress,DWORD AddrType,DWORD LeaseTime,LPVOID Reserved,LPVOID PktContext);
79   typedef DWORD (WINAPI *LPDHCP_HANDLE_OPTIONS)(LPBYTE Packet,DWORD PacketSize,LPVOID Reserved,LPVOID PktContext,LPDHCP_SERVER_OPTIONS ServerOptions);
80   typedef DWORD (WINAPI *LPDHCP_DELETE_CLIENT)(DWORD IpAddress,LPBYTE HwAddress,ULONG HwAddressLength,DWORD Reserved,DWORD ClientType);
81 
82   typedef struct _DHCP_CALLOUT_TABLE {
83     LPDHCP_CONTROL DhcpControlHook;
84     LPDHCP_NEWPKT DhcpNewPktHook;
85     LPDHCP_DROP_SEND DhcpPktDropHook;
86     LPDHCP_DROP_SEND DhcpPktSendHook;
87     LPDHCP_PROB DhcpAddressDelHook;
88     LPDHCP_GIVE_ADDRESS DhcpAddressOfferHook;
89     LPDHCP_HANDLE_OPTIONS DhcpHandleOptionsHook;
90     LPDHCP_DELETE_CLIENT DhcpDeleteClientHook;
91     LPVOID DhcpExtensionHook;
92     LPVOID DhcpReservedHook;
93   } DHCP_CALLOUT_TABLE,*LPDHCP_CALLOUT_TABLE;
94 
95   typedef DWORD (WINAPI *LPDHCP_ENTRY_POINT_FUNC)(LPWSTR ChainDlls,DWORD CalloutVersion,LPDHCP_CALLOUT_TABLE CalloutTbl);
96 
97 #ifdef __cplusplus
98 }
99 #endif
100 #endif
101