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