windows-nt/Source/XPSP1/NT/net/rras/ip/nathlp/dns/dnslookup.h
2020-09-26 16:20:57 +08:00

211 lines
3.4 KiB
C

/*++
Copyright (c) 1998, Microsoft Corporation
Module Name:
dnslookup.h
Abstract:
This module contains declarations related to the DNS server's
lookup table.
Author:
Tom Brown (tbrown) 25-Oct-1999
Revision History:
Raghu Gatta (rgatta) 21-Oct-2000
Time macros + New Functions
--*/
#ifndef _NATHLP_DNSLOOKUP_H_
#define _NATHLP_DNSLOOKUP_H_
#define LOCAL_DOMAIN L"local"
#define LOCAL_DOMAIN_ANSI "local"
//
// move to somewhere else if necessary
//
//
// Time conversion constants and macros
//
#define SYSTIME_UNITS_IN_1_MSEC (1000 * 10)
#define SYSTIME_UNITS_IN_1_SEC (1000 * SYSTIME_UNITS_IN_1_MSEC)
//
// macro to get system time in 100-nanosecond units
//
#define DnsQuerySystemTime(p) NtQuerySystemTime((p))
//
// macros to convert time between 100-nanosecond, 1millsec, and 1 sec units
//
#define DnsSystemTimeToMillisecs(p) { \
DWORD _r; \
*(p) = RtlExtendedLargeIntegerDivide(*(p), SYSTIME_UNITS_IN_1_MSEC, &_r);\
}
#define DnsMillisecsToSystemTime(p) \
*(p) = RtlExtendedIntegerMultiply(*(p), SYSTIME_UNITS_IN_1_MSEC)
#define DnsSecsToSystemTime(p) \
*(p) = RtlExtendedIntegerMultiply(*(p), SYSTIME_UNITS_IN_1_SEC)
#define CACHE_ENTRY_EXPIRY (7 * 24 * 60 * 60) // (matches DHCP lease time)
typedef ULONG DNS_ADDRESS;
typedef struct
{
DNS_ADDRESS ulAddress;
FILETIME ftExpires;
//ULONG ulExpires;
} ADDRESS_INFO, *PADDRESS_INFO;
typedef struct
{
WCHAR *pszName;
UINT cAddresses;
DWORD cAddressesAllocated;
PADDRESS_INFO aAddressInfo;
} DNS_ENTRY, *PDNS_ENTRY;
typedef struct
{
DNS_ADDRESS ulAddress;
WCHAR *pszName; // do not free this! It is the same pointer as used in the
// forward lookup table.
} REVERSE_DNS_ENTRY, *PREVERSE_DNS_ENTRY;
extern CRITICAL_SECTION DnsTableLock; // protects both tables
extern RTL_GENERIC_TABLE g_DnsTable,
g_ReverseDnsTable;
ULONG
DnsInitializeTableManagement(
VOID
);
VOID
DnsShutdownTableManagement(
VOID
);
VOID
DnsEmptyTables(
VOID
);
BOOL
DnsRegisterName(
WCHAR *pszName,
UINT cAddresses,
ADDRESS_INFO aAddressInfo[]
);
VOID
DnsAddAddressForName(
WCHAR *pszName,
DNS_ADDRESS ulAddress,
FILETIME ftExpires
//ULONG ulExpires
);
VOID
DnsDeleteAddressForName(
WCHAR *pszName,
DNS_ADDRESS ulAddress
);
PDNS_ENTRY
DnsLookupAddress(
WCHAR *pszName
);
PREVERSE_DNS_ENTRY
DnsLookupName(
DNS_ADDRESS ulAddress
);
VOID
DnsDeleteName(
WCHAR *pszName
);
VOID
DnsUpdateName(
WCHAR *pszName,
DNS_ADDRESS ulAddress
);
VOID
DnsUpdate(
CHAR *pszName,
ULONG len,
ULONG ulAddress
);
VOID
DnsAddSelf(
VOID
);
VOID
DnsCleanupTables(
VOID
);
DWORD
DnsConvertHostNametoUnicode(
UINT CodePage,
CHAR *pszHostName,
PWCHAR DnsICSDomainSuffix,
PWCHAR *ppszUnicodeFQDN
);
BOOL
ConvertToUtf8(
IN UINT CodePage,
IN LPSTR pszName,
OUT PCHAR *ppszUtf8Name,
OUT ULONG *pUtf8NameSize
);
BOOL
ConvertUTF8ToUnicode(
IN LPBYTE UTF8String,
OUT LPWSTR *ppszUnicodeName,
OUT DWORD *pUnicodeNameSize
);
#endif