mirror of
https://github.com/lianthony/NT4.0.git
synced 2025-12-17 10:14:21 -06:00
1228 lines
26 KiB
C
1228 lines
26 KiB
C
/*++
|
||
|
||
Copyright (c) 1995 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
dnsapi.h
|
||
|
||
Abstract:
|
||
|
||
Domain Name System (DNS) Server
|
||
|
||
DNS Server API to support admin clients.
|
||
|
||
Author:
|
||
|
||
Jim Gilroy (jamesg) September 23, 1995
|
||
|
||
Revision History:
|
||
|
||
Dan Morin (t-danmo) 28-Nov-95 Changed LPSTR to LPCSTR on most APIs
|
||
|
||
--*/
|
||
|
||
|
||
#ifndef _DNSAPI_INCLUDED_
|
||
#define _DNSAPI_INCLUDED_
|
||
|
||
#ifdef __cplusplus
|
||
extern "C"
|
||
{
|
||
#endif // _cplusplus
|
||
|
||
|
||
//
|
||
// Use stdcall for our API conventions
|
||
//
|
||
// Explicitly state this as C++ compiler will otherwise
|
||
// assume cdecl.
|
||
//
|
||
|
||
#define DNS_API_FUNCTION __stdcall
|
||
|
||
|
||
//
|
||
// Basic DNS definitions
|
||
//
|
||
|
||
#define DNS_MAX_NAME_LENGTH (255)
|
||
|
||
|
||
//
|
||
// RPC interface
|
||
//
|
||
|
||
#define DNS_INTERFACE_NAME "DNSSERVER"
|
||
|
||
//
|
||
// RPC security
|
||
//
|
||
|
||
#define DNS_RPC_SECURITY "DnsServerApp"
|
||
#define DNS_RPC_SECURITY_AUTH_ID 10
|
||
|
||
//
|
||
// RPC transports
|
||
//
|
||
|
||
#define DNS_RPC_NAMED_PIPE "\\PIPE\\DNSSERVER"
|
||
#define DNS_RPC_SERVER_PORT ""
|
||
#define DNS_RPC_LPC_EP "DNSSERVERLPC"
|
||
|
||
#define DNS_RPC_USE_TCPIP 0x1
|
||
#define DNS_RPC_USE_NAMED_PIPE 0x2
|
||
#define DNS_RPC_USE_LPC 0x4
|
||
#define DNS_RPC_USE_ALL_PROTOCOLS 0xffffffff
|
||
|
||
|
||
//
|
||
// DNS public types
|
||
//
|
||
|
||
typedef LONG DNS_STATUS, *PDNS_STATUS;
|
||
typedef DWORD DNS_HANDLE, *PDNS_HANDLE;
|
||
typedef DWORD DNS_APIOP;
|
||
typedef DWORD IP_ADDRESS, *PIP_ADDRESS;
|
||
|
||
//
|
||
// IP Address Array type
|
||
//
|
||
|
||
#if defined(MIDL_PASS)
|
||
|
||
#define LPSTR [string] char *
|
||
#define LPCSTR [string] const char *
|
||
|
||
typedef struct _IP_ARRAY
|
||
{
|
||
DWORD cAddrCount;
|
||
[size_is( cAddrCount )] IP_ADDRESS aipAddrs[];
|
||
}
|
||
IP_ARRAY, *PIP_ARRAY;
|
||
|
||
#else
|
||
|
||
typedef struct _IP_ARRAY
|
||
{
|
||
DWORD cAddrCount;
|
||
IP_ADDRESS aipAddrs[];
|
||
}
|
||
IP_ARRAY, *PIP_ARRAY;
|
||
|
||
#endif
|
||
|
||
//
|
||
// DNS API Errors
|
||
//
|
||
|
||
#define DNS_ERROR_MASK 0xcc000000
|
||
#define DNS_ERROR_SERVER_FAILURE 0xcc000001
|
||
#define DNS_ERROR_NOT_YET_IMPLEMENTED 0xcc000002
|
||
#define DNS_ERROR_OLD_API 0xcc000003
|
||
|
||
#define DNS_ERROR_NAME_DOES_NOT_EXIST 0xcc000010
|
||
#define DNS_ERROR_INVALID_NAME 0xcc000011
|
||
#define DNS_ERROR_INVALID_IP_ADDRESS 0xcc000012
|
||
#define DNS_ERROR_INVALID_DATA 0xcc000013
|
||
|
||
|
||
//
|
||
// Packet format
|
||
//
|
||
|
||
#define DNS_INFO_NO_RECORDS 0x4c000030
|
||
#define DNS_INFO_NAME_ERROR 0x4c000031
|
||
#define DNS_ERROR_RCODE 0xcc000032
|
||
#define DNS_ERROR_MESSAGE_FORMAT 0xcc000033
|
||
#define DNS_ERROR_MESSAGE_HEADER_FORMAT 0xcc000034
|
||
|
||
|
||
//
|
||
// Zone errors
|
||
//
|
||
|
||
#define DNS_ERROR_ZONE_DOES_NOT_EXIST 0xcc000101
|
||
#define DNS_ERROR_NO_ZONE_INFO 0xcc000102
|
||
#define DNS_ERROR_INVALID_ZONE_OPERATION 0xcc000103
|
||
#define DNS_ERROR_ZONE_CONFIGURATION_ERROR 0xcc000104
|
||
#define DNS_ERROR_ZONE_HAS_NO_SOA_RECORD 0xcc000105
|
||
#define DNS_ERROR_ZONE_HAS_NO_NS_RECORDS 0xcc000106
|
||
#define DNS_ERROR_ZONE_LOCKED 0xcc000107
|
||
|
||
#define DNS_ERROR_ZONE_CREATION_FAILED 0xcc000110
|
||
#define DNS_ERROR_ZONE_ALREADY_EXISTS 0xcc000111
|
||
#define DNS_ERROR_AUTOZONE_ALREADY_EXISTS 0xcc000112
|
||
#define DNS_ERROR_INVALID_ZONE_TYPE 0xcc000113
|
||
#define DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP 0xcc000114
|
||
|
||
#define DNS_ERROR_ZONE_NOT_SECONDARY 0xcc000120
|
||
#define DNS_ERROR_NEED_SECONDARY_ADDRESSES 0xcc000121
|
||
#define DNS_ERROR_WINS_INIT_FAILED 0xcc000122
|
||
#define DNS_ERROR_NEED_WINS_SERVERS 0xcc000123
|
||
#define DNS_ERROR_NBSTAT_INIT_FAILED 0xcc000124
|
||
#define DNS_ERROR_SOA_DELETE_INVALID 0xcc000125
|
||
|
||
//
|
||
// Datafile errors
|
||
//
|
||
|
||
#define DNS_ERROR_PRIMARY_REQUIRES_DATAFILE 0xcc000201
|
||
#define DNS_ERROR_INVALID_DATAFILE_NAME 0xcc000202
|
||
#define DNS_ERROR_DATAFILE_OPEN_FAILURE 0xcc000203
|
||
#define DNS_ERROR_FILE_WRITEBACK_FAILED 0xcc000204
|
||
#define DNS_ERROR_DATAFILE_PARSING 0xcc000205
|
||
|
||
|
||
//
|
||
// Database errors
|
||
//
|
||
|
||
#define DNS_ERROR_RECORD_DOES_NOT_EXIST 0xcc000300
|
||
#define DNS_ERROR_RECORD_FORMAT 0xcc000301
|
||
#define DNS_ERROR_NODE_CREATION_FAILED 0xcc000302
|
||
#define DNS_ERROR_UNKNOWN_RECORD_TYPE 0xcc000303
|
||
#define DNS_ERROR_RECORD_TIMED_OUT 0xcc000304
|
||
|
||
#define DNS_ERROR_NAME_NOT_IN_ZONE 0xcc000305
|
||
#define DNS_ERROR_CNAME_LOOP 0xcc000306
|
||
#define DNS_ERROR_NODE_IS_CNAME 0xcc000307
|
||
#define DNS_ERROR_CNAME_COLLISION 0xcc000308
|
||
#define DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT 0xcc000309
|
||
#define DNS_ERROR_RECORD_ALREADY_EXISTS 0xcc000310
|
||
#define DNS_ERROR_SECONDARY_DATA 0xcc000311
|
||
#define DNS_ERROR_NO_CREATE_CACHE_DATA 0xcc000312
|
||
|
||
#define DNS_WARNING_PTR_CREATE_FAILED 0x8c000332
|
||
#define DNS_WARNING_DOMAIN_UNDELETED 0x8c000333
|
||
|
||
//
|
||
// Operation errors
|
||
//
|
||
|
||
#define DNS_INFO_AXFR_COMPLETE 0x4c000403
|
||
#define DNS_ERROR_AXFR 0xcc000404
|
||
#define DNS_INFO_ADDED_LOCAL_WINS 0x4c000405
|
||
|
||
|
||
|
||
|
||
//
|
||
// DNS Server information
|
||
//
|
||
|
||
typedef struct _DNS_SERVER_INFO
|
||
{
|
||
DWORD dwVersion;
|
||
LPSTR pszServerName;
|
||
|
||
// boot
|
||
|
||
DWORD fBootRegistry;
|
||
|
||
// IP interfaces
|
||
|
||
PIP_ARRAY aipServerAddrs;
|
||
PIP_ARRAY aipListenAddrs;
|
||
|
||
// recursion lookup timeout
|
||
|
||
DWORD dwRecursionTimeout;
|
||
|
||
// forwarders
|
||
|
||
PIP_ARRAY aipForwarders;
|
||
DWORD dwForwardTimeout;
|
||
DWORD fSlave;
|
||
|
||
// save some space, just in case
|
||
|
||
DWORD pvReserved1;
|
||
DWORD pvReserved2;
|
||
DWORD pvReserved3;
|
||
}
|
||
DNS_SERVER_INFO, *PDNS_SERVER_INFO;
|
||
|
||
|
||
|
||
//
|
||
// Server configuration API
|
||
//
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsGetServerInfo(
|
||
IN LPCSTR pszServer,
|
||
OUT PDNS_SERVER_INFO * ppServerInfo
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsFreeServerInfo(
|
||
IN OUT PDNS_SERVER_INFO pServerInfo
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsResetBootMethod(
|
||
IN LPCSTR pszServer,
|
||
IN DWORD fBootRegistry
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsResetServerListenAddresses(
|
||
IN LPCSTR pszServer,
|
||
IN DWORD cListenAddrs,
|
||
IN PIP_ADDRESS aipListenAddrs
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsResetForwarders(
|
||
IN LPCSTR pszServer,
|
||
IN DWORD cForwarders,
|
||
IN PIP_ADDRESS aipForwarders,
|
||
IN DWORD dwForwardTimeout,
|
||
IN DWORD fSlave
|
||
);
|
||
|
||
|
||
//
|
||
// DNS server statistics
|
||
//
|
||
|
||
typedef struct _DNS_SYSTEMTIME
|
||
{
|
||
WORD wYear;
|
||
WORD wMonth;
|
||
WORD wDayOfWeek;
|
||
WORD wDay;
|
||
WORD wHour;
|
||
WORD wMinute;
|
||
WORD wSecond;
|
||
WORD wMilliseconds;
|
||
}
|
||
DNS_SYSTEMTIME;
|
||
|
||
typedef struct _DNS_STATISTICS
|
||
{
|
||
//
|
||
// Queries and responses
|
||
//
|
||
|
||
DWORD UdpQueries;
|
||
DWORD UdpResponses;
|
||
DWORD UdpQueriesSent;
|
||
DWORD UdpResponsesReceived;
|
||
|
||
DWORD TcpClientConnections;
|
||
DWORD TcpQueries;
|
||
DWORD TcpResponses;
|
||
DWORD TcpQueriesSent;
|
||
DWORD TcpResponsesReceived;
|
||
|
||
//
|
||
// Recursion
|
||
//
|
||
|
||
DWORD RecurseLookups;
|
||
DWORD RecurseResponses;
|
||
|
||
DWORD RecursePasses;
|
||
DWORD RecurseQuestions;
|
||
DWORD RecurseForwards;
|
||
DWORD RecurseTimeouts;
|
||
DWORD RecurseFailures;
|
||
DWORD RecursePartialFailures;
|
||
|
||
DWORD RecurseRootQuery;
|
||
DWORD RecurseRootResponse;
|
||
DWORD RecurseTcpTry;
|
||
DWORD RecurseTcpQuery;
|
||
DWORD RecurseTcpResponse;
|
||
|
||
// Recursion Packets
|
||
|
||
DWORD RecursePacketUsed;
|
||
DWORD RecursePacketReturn;
|
||
|
||
//
|
||
// WINS lookup
|
||
//
|
||
|
||
DWORD WinsLookups;
|
||
DWORD WinsResponses;
|
||
DWORD WinsReverseLookups;
|
||
DWORD WinsReverseResponses;
|
||
|
||
// Zone transfer secondary
|
||
|
||
DWORD SecSoaQueries;
|
||
DWORD SecSoaResponses;
|
||
DWORD SecNotifyReceived;
|
||
DWORD SecAxfrRequested;
|
||
DWORD SecAxfrRejected;
|
||
DWORD SecAxfrFailed;
|
||
DWORD SecAxfrSuccessful;
|
||
|
||
// Zone transfer master
|
||
|
||
DWORD MasterNotifySent;
|
||
DWORD MasterAxfrReceived;
|
||
DWORD MasterAxfrInvalid;
|
||
DWORD MasterAxfrRefused;
|
||
DWORD MasterAxfrDenied;
|
||
DWORD MasterAxfrFailed;
|
||
DWORD MasterAxfrSuccessful;
|
||
|
||
//
|
||
// Database
|
||
//
|
||
|
||
DWORD DatabaseMemory;
|
||
|
||
//
|
||
// Nodes
|
||
//
|
||
|
||
DWORD NodeAlloc;
|
||
DWORD NodeFree;
|
||
DWORD NodeNetAllocs;
|
||
DWORD NodeMemory;
|
||
|
||
DWORD NodeInUse;
|
||
DWORD NodeUsed;
|
||
DWORD NodeReturn;
|
||
|
||
DWORD NodeStdAlloc;
|
||
DWORD NodeStdUsed;
|
||
DWORD NodeStdReturn;
|
||
DWORD NodeInFreeList;
|
||
|
||
//
|
||
// Resource Records
|
||
//
|
||
|
||
DWORD RecordAlloc;
|
||
DWORD RecordFree;
|
||
DWORD RecordNetAllocs;
|
||
DWORD RecordMemory;
|
||
|
||
DWORD RecordInUse;
|
||
DWORD RecordUsed;
|
||
DWORD RecordReturn;
|
||
|
||
DWORD RecordStdAlloc;
|
||
DWORD RecordStdUsed;
|
||
DWORD RecordStdReturn;
|
||
DWORD RecordInFreeList;
|
||
|
||
//
|
||
// RR caching
|
||
//
|
||
|
||
DWORD CacheRRTotal;
|
||
DWORD CacheRRCurrent;
|
||
DWORD CacheRRTimeouts;
|
||
|
||
//
|
||
// Packet memory
|
||
//
|
||
|
||
// UDP Packets
|
||
|
||
DWORD UdpAlloc;
|
||
DWORD UdpFree;
|
||
DWORD UdpNetAllocs;
|
||
DWORD UdpMemory;
|
||
|
||
DWORD UdpUsed;
|
||
DWORD UdpReturn;
|
||
DWORD UdpResponseReturn;
|
||
DWORD UdpQueryReturn;
|
||
DWORD UdpInUse;
|
||
DWORD UdpInFreeList;
|
||
|
||
// TCP Packets
|
||
|
||
DWORD TcpAlloc;
|
||
DWORD TcpRealloc;
|
||
DWORD TcpFree;
|
||
DWORD TcpNetAllocs;
|
||
DWORD TcpMemory;
|
||
|
||
//
|
||
// Nbstat Memory
|
||
//
|
||
|
||
DWORD NbstatAlloc;
|
||
DWORD NbstatFree;
|
||
DWORD NbstatNetAllocs;
|
||
DWORD NbstatMemory;
|
||
|
||
DWORD NbstatUsed;
|
||
DWORD NbstatReturn;
|
||
DWORD NbstatInUse;
|
||
DWORD NbstatInFreeList;
|
||
|
||
//
|
||
// stats since when
|
||
//
|
||
|
||
DWORD ServerStartTimeSeconds;
|
||
DWORD LastClearTimeSeconds;
|
||
DWORD SecondsSinceServerStart;
|
||
DWORD SecondsSinceLastClear;
|
||
|
||
DNS_SYSTEMTIME ServerStartTime;
|
||
DNS_SYSTEMTIME LastClearTime;
|
||
|
||
}
|
||
DNS_STATISTICS, *PDNS_STATISTICS;
|
||
|
||
//
|
||
// cover old stat fields
|
||
//
|
||
|
||
#define dwCurrentStartTime CurrentStartTime
|
||
#define dwUdpQueries UdpQueries
|
||
#define dwUdpResponses UdpResponses
|
||
#define dwTcpClientConnections TcpClientConnections
|
||
#define dwTcpQueries TcpQueries
|
||
#define dwTcpResponses TcpResponses
|
||
#define dwRecursiveLookups RecurseLookups
|
||
#define dwRecursiveResponses RecurseResponses
|
||
#define dwWinsForwardLookups WinsLookups
|
||
#define dwWinsForwardResponses WinsResponses
|
||
#define dwWinsReverseLookups WinsReverseLookups
|
||
#define dwWinsReverseResponses WinsReverseResponses
|
||
#define TimeOfLastClear LastClearTime
|
||
|
||
|
||
|
||
//
|
||
// Statistics API
|
||
//
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsGetStatistics(
|
||
IN LPCSTR pszServer,
|
||
OUT PDNS_STATISTICS * ppStatistics
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsFreeStatistics(
|
||
IN OUT PDNS_STATISTICS pStatistics
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsClearStatistics(
|
||
IN LPCSTR pszServer
|
||
);
|
||
|
||
|
||
|
||
//
|
||
// DNS Zone information
|
||
//
|
||
|
||
#define DNS_ZONE_TYPE_CACHE (0)
|
||
#define DNS_ZONE_TYPE_PRIMARY (1)
|
||
#define DNS_ZONE_TYPE_SECONDARY (2)
|
||
|
||
typedef struct _DNS_ZONE_INFO
|
||
{
|
||
DNS_HANDLE hZone;
|
||
LPSTR pszZoneName;
|
||
DWORD dwZoneType;
|
||
DWORD fReverse;
|
||
DWORD fPaused;
|
||
DWORD fShutdown;
|
||
DWORD fAutoCreated;
|
||
|
||
// Database info
|
||
|
||
DWORD fUseDatabase;
|
||
LPSTR pszDataFile;
|
||
|
||
// Masters
|
||
|
||
PIP_ARRAY aipMasters;
|
||
|
||
// Secondaries
|
||
|
||
PIP_ARRAY aipSecondaries;
|
||
DWORD fSecureSecondaries;
|
||
|
||
// WINS or Nbstat lookup
|
||
|
||
DWORD fUseWins;
|
||
DWORD fUseNbstat;
|
||
|
||
// save some space, just inase
|
||
// avoid versioning issues if possible
|
||
|
||
DWORD pvReserved1;
|
||
DWORD pvReserved2;
|
||
DWORD pvReserved3;
|
||
DWORD pvReserved4;
|
||
DWORD pvReserved5;
|
||
DWORD pvReserved6;
|
||
DWORD pvReserved7;
|
||
DWORD pvReserved8;
|
||
DWORD pvReserved9;
|
||
}
|
||
DNS_ZONE_INFO, *PDNS_ZONE_INFO;
|
||
|
||
|
||
|
||
//
|
||
// Zone configuration API
|
||
//
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsEnumZoneHandles(
|
||
IN LPCSTR pszServer,
|
||
OUT PDWORD pZoneCount,
|
||
IN DWORD dwArrayLength,
|
||
OUT DNS_HANDLE ahZones[]
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsGetZoneInfo(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone,
|
||
OUT PDNS_ZONE_INFO * ppZoneInfo
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsFreeZoneInfo(
|
||
IN OUT PDNS_ZONE_INFO pZoneInfo
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsEnumZoneInfo(
|
||
IN LPCSTR pszServer,
|
||
OUT PDWORD pdwZoneCount,
|
||
IN DWORD dwArrayLength,
|
||
OUT PDNS_ZONE_INFO apZones[]
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsResetZoneType(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone,
|
||
IN DWORD dwZoneType,
|
||
IN DWORD cMasters,
|
||
IN PIP_ADDRESS aipMasters
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsResetZoneDatabase(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone,
|
||
IN DWORD fUseDatabase,
|
||
IN LPCSTR pszDataFile
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsResetZoneMasters(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone,
|
||
IN DWORD cMasters,
|
||
IN PIP_ADDRESS aipMasters
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsResetZoneSecondaries(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone,
|
||
IN DWORD fSecureSecondaries,
|
||
IN DWORD cSecondaries,
|
||
IN PIP_ADDRESS aipSecondaries
|
||
);
|
||
|
||
|
||
//
|
||
// Zone management
|
||
//
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsCreateZone(
|
||
IN LPCSTR pszServer,
|
||
OUT PDNS_HANDLE phZone,
|
||
IN LPCSTR pszZoneName,
|
||
IN DWORD dwZoneType,
|
||
IN LPCSTR pszAdminEmailName,
|
||
IN DWORD cMasters,
|
||
IN PIP_ADDRESS aipMasters,
|
||
IN DWORD dwUseDatabase,
|
||
IN LPCSTR pszDataFile
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsDelegateSubZone(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone,
|
||
IN LPCSTR pszSubZone,
|
||
IN LPCSTR pszNewServer,
|
||
IN IP_ADDRESS ipNewServerAddr
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsIncrementZoneVersion(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsDeleteZone(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsPauseZone(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsResumeZone(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone
|
||
);
|
||
|
||
|
||
|
||
//
|
||
// DNS Resource Records
|
||
//
|
||
|
||
// RFC 1034/1035
|
||
#define DNS_TYPE_A 0x0001 // 1
|
||
#define DNS_TYPE_NS 0x0002 // 2
|
||
#define DNS_TYPE_MD 0x0003 // 3
|
||
#define DNS_TYPE_MF 0x0004 // 4
|
||
#define DNS_TYPE_CNAME 0x0005 // 5
|
||
#define DNS_TYPE_SOA 0x0006 // 6
|
||
#define DNS_TYPE_MB 0x0007 // 7
|
||
#define DNS_TYPE_MG 0x0008 // 8
|
||
#define DNS_TYPE_MR 0x0009 // 9
|
||
#define DNS_TYPE_NULL 0x000a // 10
|
||
#define DNS_TYPE_WKS 0x000b // 11
|
||
#define DNS_TYPE_PTR 0x000c // 12
|
||
#define DNS_TYPE_HINFO 0x000d // 13
|
||
#define DNS_TYPE_MINFO 0x000e // 14
|
||
#define DNS_TYPE_MX 0x000f // 15
|
||
#define DNS_TYPE_TEXT 0x0010 // 16
|
||
|
||
// RFC 1183
|
||
#define DNS_TYPE_RP 0x0011 // 17
|
||
#define DNS_TYPE_AFSDB 0x0012 // 18
|
||
#define DNS_TYPE_X25 0x0013 // 19
|
||
#define DNS_TYPE_ISDN 0x0014 // 20
|
||
#define DNS_TYPE_RT 0x0015 // 21
|
||
|
||
// RFC 1348
|
||
#define DNS_TYPE_NSAP 0x0016 // 22
|
||
#define DNS_TYPE_NSAPPTR 0x0017 // 23
|
||
|
||
// DNS security draft dnssec-secext
|
||
#define DNS_TYPE_SIG 0x0018 // 24
|
||
#define DNS_TYPE_KEY 0x0019 // 25
|
||
|
||
// RFC 1664 (X.400 mail)
|
||
#define DNS_TYPE_PX 0x001a // 26
|
||
|
||
//
|
||
#define DNS_TYPE_GPOS 0x001b // 27
|
||
|
||
// RFC 1886 (IPng Address)
|
||
#define DNS_TYPE_AAAA 0x001c // 28
|
||
|
||
//
|
||
// Query only types (1035, IXFR draft)
|
||
//
|
||
#define DNS_TYPE_IXFR 0x00fb // 251
|
||
#define DNS_TYPE_AXFR 0x00fc // 252
|
||
#define DNS_TYPE_MAILB 0x00fd // 253
|
||
#define DNS_TYPE_MAILA 0x00fe // 254
|
||
#define DNS_TYPE_ALL 0x00ff // 255
|
||
|
||
//
|
||
// Temp Microsoft types -- use until get IANA approval for real type
|
||
//
|
||
#define DNS_TYPE_WINS 0xff01 // 64K - 255
|
||
#define DNS_TYPE_NBSTAT 0xff02 // 64K - 254
|
||
|
||
|
||
|
||
//
|
||
// Node name structure for DNS names on the wire
|
||
//
|
||
|
||
typedef struct _DnsRpcName
|
||
{
|
||
UCHAR cchNameLength;
|
||
CHAR achName[];
|
||
}
|
||
DNS_RPC_NAME, *PDNS_RPC_NAME, DNS_STRING, *PDNS_STRING;
|
||
|
||
|
||
//
|
||
// Node flags
|
||
//
|
||
|
||
#define DNS_RPC_NODE_FLAG_COMPLETE 0x80000000
|
||
#define DNS_RPC_NODE_FLAG_STICKY 0x01000000
|
||
|
||
|
||
//
|
||
// DNS node structure for on the wire
|
||
//
|
||
|
||
typedef struct _DnsRpcNode
|
||
{
|
||
WORD wLength;
|
||
WORD wRecordCount;
|
||
DWORD dwFlags;
|
||
DWORD dwChildCount;
|
||
DNS_RPC_NAME dnsNodeName;
|
||
}
|
||
DNS_RPC_NODE, *PDNS_RPC_NODE;
|
||
|
||
#define SIZEOF_DNS_RPC_NODE_HEADER (3*sizeof(DWORD))
|
||
|
||
|
||
//
|
||
// Resource Record Flags
|
||
//
|
||
|
||
#define DNS_RPC_RECORD_FLAG_CACHE_DATA 0x80000000
|
||
#define DNS_RPC_RECORD_FLAG_ZONE_ROOT 0x40000000
|
||
#define DNS_RPC_RECORD_FLAG_AUTH_ZONE_ROOT 0x20000000
|
||
|
||
#define DNS_RPC_RECORD_FLAG_DEFAULT_TTL 0x08000000
|
||
#define DNS_RPC_RECORD_FLAG_TTL_CHANGE 0x04000000
|
||
#define DNS_RPC_RECORD_FLAG_CREATE_PTR 0x02000000
|
||
#define DNS_RPC_RECORD_FLAG_LOCAL_TYPE 0x01000000
|
||
|
||
|
||
//
|
||
// Resource record structure for passing records on the wire
|
||
//
|
||
// For efficiency, all these fields are aligned.
|
||
// When buffered for transmission, all RR should start on DWORD
|
||
// aligned boundary.
|
||
//
|
||
|
||
typedef struct _DnsRpcRecord
|
||
{
|
||
WORD wRecordLength;
|
||
WORD wType;
|
||
WORD wClass;
|
||
WORD wDataLength;
|
||
|
||
DNS_HANDLE hRecord;
|
||
DWORD dwFlags;
|
||
DWORD dwTtlSeconds;
|
||
|
||
union
|
||
{
|
||
struct
|
||
{
|
||
IP_ADDRESS ipAddress;
|
||
}
|
||
A;
|
||
|
||
struct
|
||
{
|
||
DWORD dwSerialNo;
|
||
DWORD dwRefresh;
|
||
DWORD dwRetry;
|
||
DWORD dwExpire;
|
||
DWORD dwMinimumTtl;
|
||
DNS_RPC_NAME namePrimaryServer;
|
||
|
||
// responsible party follows in buffer
|
||
}
|
||
SOA, Soa;
|
||
|
||
struct
|
||
{
|
||
DNS_RPC_NAME nameNode;
|
||
}
|
||
PTR, Ptr,
|
||
NS, Ns,
|
||
CNAME, Cname,
|
||
MB, Mb,
|
||
MD, Md,
|
||
MF, Mf,
|
||
MG, Mg,
|
||
MR, Mr;
|
||
|
||
struct
|
||
{
|
||
DNS_RPC_NAME nameMailBox;
|
||
|
||
// errors to mailbox follows in buffer
|
||
}
|
||
MINFO, Minfo,
|
||
RP, Rp;
|
||
|
||
struct
|
||
{
|
||
WORD wPreference;
|
||
DNS_RPC_NAME nameExchange;
|
||
}
|
||
MX, Mx,
|
||
AFSDB, Afsdb,
|
||
RT, Rt;
|
||
|
||
struct
|
||
{
|
||
DNS_STRING stringData;
|
||
|
||
// one or more strings may follow
|
||
}
|
||
AAAA,
|
||
HINFO, Hinfo,
|
||
ISDN, Isdn,
|
||
TXT, Txt,
|
||
X25;
|
||
|
||
struct
|
||
{
|
||
BYTE bData[];
|
||
}
|
||
Null;
|
||
|
||
struct
|
||
{
|
||
IP_ADDRESS ipAddress;
|
||
UCHAR chProtocol;
|
||
BYTE bBitMask[1];
|
||
}
|
||
WKS, Wks;
|
||
|
||
//
|
||
// MS types
|
||
//
|
||
|
||
struct
|
||
{
|
||
DWORD dwMappingFlag;
|
||
DWORD dwLookupTimeout;
|
||
DWORD dwCacheTimeout;
|
||
DWORD cWinsServerCount;
|
||
IP_ADDRESS aipWinsServers[];
|
||
}
|
||
WINS, Wins;
|
||
|
||
struct
|
||
{
|
||
DWORD dwMappingFlag;
|
||
DWORD dwLookupTimeout;
|
||
DWORD dwCacheTimeout;
|
||
DNS_RPC_NAME nameResultDomain;
|
||
}
|
||
NBSTAT, Nbstat;
|
||
|
||
} Data;
|
||
}
|
||
DNS_RPC_RECORD, *PDNS_RPC_RECORD;
|
||
|
||
|
||
#define SIZEOF_DNS_RPC_RECORD_HEADER \
|
||
(4*sizeof(WORD) + 2*sizeof(DWORD) + sizeof(DNS_HANDLE))
|
||
|
||
#if 0
|
||
#define SIZEOF_DNS_RPC_RECORD_FIXED_FIELD2 \
|
||
(sizeof(DNS_RPC_RECORD) - sizeof(struct _DnsRpcRecord.Data))
|
||
|
||
#define SIZEOF_DNS_RPC_RECORD_FIXED_FIELD3 \
|
||
(sizeof(DNS_RPC_RECORD) - sizeof(DNS_RPC_RECORD.Data))
|
||
#endif
|
||
|
||
|
||
//
|
||
// WINS + NBSTAT params
|
||
// - flags
|
||
// - default lookup timeout
|
||
// - default cache timeout
|
||
//
|
||
|
||
#define DNS_WINS_FLAG_SCOPE (0x80000000)
|
||
#define DNS_WINS_FLAG_LOCAL (0x00010000)
|
||
|
||
#define DNS_WINS_DEFAULT_LOOKUP_TIMEOUT (5) // 5 secs
|
||
#define DNS_WINS_DEFAULT_CACHE_TIMEOUT (600) // 10 minutes
|
||
|
||
|
||
//
|
||
// Helpful record macros
|
||
// - no side effects in arguments
|
||
//
|
||
|
||
#define DNS_GET_NEXT_NAME(pname) \
|
||
(PDNS_RPC_NAME) (pname->achName + pname->cchNameLength)
|
||
|
||
#define DNS_IS_NAME_IN_RECORD(pRecord, pname) \
|
||
( (PCHAR)pRecord + pRecord->wRecordLength \
|
||
>= \
|
||
pname->achName + pname->cchNameLength )
|
||
|
||
//
|
||
// Note, for simplicity/efficiency ALL structures are DWORD aligned in
|
||
// buffers on the wire.
|
||
//
|
||
// This macro returns DWORD aligned ptr at given ptr our next DWORD
|
||
// aligned postion. Set ptr immediately after record or name structure
|
||
// and this will return starting position of next structure.
|
||
//
|
||
|
||
#define DNS_NEXT_DWORD_PTR(ptr) ((PBYTE) ((DWORD)((PBYTE)ptr + 3) & ~(DWORD)3))
|
||
|
||
#define DNS_IS_DWORD_ALIGNED(p) ( !((DWORD)(p) & (DWORD)3) )
|
||
|
||
|
||
|
||
|
||
//
|
||
// Record viewing API
|
||
//
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsEnumNodeRecords(
|
||
IN LPCSTR pszServer,
|
||
IN LPCSTR pszNodeName,
|
||
IN WORD wRecordType,
|
||
IN DWORD fNoCacheData,
|
||
IN OUT PDWORD pdwBufferLength,
|
||
OUT BYTE abBuffer[]
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsEnumChildNodesAndRecords(
|
||
IN LPCSTR pszServer,
|
||
IN LPCSTR pszNodeName,
|
||
IN LPCSTR pszStartChild,
|
||
IN WORD wRecordType,
|
||
IN DWORD fNoCacheData,
|
||
IN OUT PDWORD pdwBufferLength,
|
||
OUT BYTE abBuffer[]
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
R_DnsGetZoneWinsInfo(
|
||
IN LPCSTR Server,
|
||
IN DNS_HANDLE hZone,
|
||
OUT PDWORD pfUsingWins,
|
||
IN OUT PDWORD pdwBufferLength,
|
||
OUT BYTE abBuffer[]
|
||
);
|
||
|
||
PCHAR
|
||
DNS_API_FUNCTION
|
||
DnsRecordTypeStringForType(
|
||
IN WORD wType
|
||
);
|
||
|
||
//
|
||
// Record management API
|
||
//
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsUpdateRecord(
|
||
IN LPCSTR pszServer,
|
||
IN DNS_HANDLE hZone,
|
||
IN LPCSTR pszNodeName,
|
||
IN OUT PDNS_HANDLE hRecord,
|
||
IN DWORD dwDataLength,
|
||
IN BYTE abData[]
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsDeleteRecord(
|
||
IN LPCSTR pszServer,
|
||
IN LPCSTR pszNodeName,
|
||
IN DNS_HANDLE hRecord
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
DnsDeleteName(
|
||
IN LPCSTR pszServer,
|
||
IN LPCSTR pszNodeName,
|
||
IN DWORD fDeleteSubtree
|
||
);
|
||
|
||
DNS_STATUS
|
||
DNS_API_FUNCTION
|
||
R_DnsUpdateWinsRecord(
|
||
IN LPCSTR Server,
|
||
IN DNS_HANDLE hZone,
|
||
IN DWORD dwDataLength,
|
||
IN BYTE abData[]
|
||
);
|
||
|
||
|
||
//
|
||
// Debug printing utils
|
||
//
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsInitializeDebug(
|
||
IN BOOL fFromConsole
|
||
);
|
||
|
||
#if 0
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintf(
|
||
IN CHAR *Format,
|
||
...
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsEndDebug(
|
||
VOID
|
||
);
|
||
|
||
//
|
||
// Server info printing
|
||
//
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintServerInfo(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN PDNS_SERVER_INFO pServerInfo
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintStatistics(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN PDNS_STATISTICS pStatistics
|
||
);
|
||
|
||
//
|
||
// Zone info printing
|
||
//
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintZoneHandleList(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN DWORD dwZoneCount,
|
||
IN DNS_HANDLE ahZones[]
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintZoneInfo(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN PDNS_ZONE_INFO pZoneInfo
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintZoneInfoList(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN DWORD dwZoneCount,
|
||
IN PDNS_ZONE_INFO apZoneInfo[]
|
||
);
|
||
|
||
//
|
||
// Node and record buffer printing
|
||
//
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintName(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN PDNS_RPC_NAME pName,
|
||
IN LPSTR pszTrailer
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintNode(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN PDNS_RPC_NODE pNode
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintRecord(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN PDNS_RPC_RECORD pRecord
|
||
);
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintRecordsInBuffer(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN DWORD dwBufferLength,
|
||
IN BYTE abBuffer[]
|
||
);
|
||
|
||
//
|
||
// General print utility
|
||
//
|
||
|
||
VOID
|
||
DNS_API_FUNCTION
|
||
DnsPrintIpAddressArray(
|
||
IN VOID PrintRoutine( CHAR * Format, ... ),
|
||
IN LPSTR pszHeader,
|
||
IN LPSTR pszName,
|
||
IN DWORD dwIpAddrCount,
|
||
IN PIP_ADDRESS pIpAddrs
|
||
);
|
||
#endif
|
||
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif // __cplusplus
|
||
|
||
#endif // _DNSAPI_INCLUDED_
|
||
|