windows-nt/Source/XPSP1/NT/admin/burnslib/inc/dns.hpp
2020-09-26 16:20:57 +08:00

159 lines
3.5 KiB
C++

// Copyright (c) 1997-1999 Microsoft Corporation
//
// DNS API wrappers
//
// 12-16-97 sburns
#ifndef DNS_HPP_INCLUDED
#define DNS_HPP_INCLUDED
// A collection of DNS related names.
namespace Dns
{
// the number of bytes in a full DNS name to reserve for stuff
// netlogon pre-/appends to DNS names when registering them
const size_t SRV_RECORD_RESERVE = 100;
// the max lengths, in bytes, of strings when represented in the UTF-8
// character set. These are the limits we expose to the user
const size_t MAX_NAME_LENGTH = DNS_MAX_NAME_LENGTH - SRV_RECORD_RESERVE;
const size_t MAX_LABEL_LENGTH = DNS_MAX_LABEL_LENGTH;
// Compares DNS names with DnsNameCompareEx (see private\inc\dnsapi.h),
// returning the result.
DNS_NAME_COMPARE_STATUS
CompareNames(const String& dnsNameLeft, const String& dnsNameRight);
// Returns the name of the parent DNS domain. E.g. if "foo.bar.com" is
// passed, then "bar.com" is the result. If "com" is passed, then "."
// (the root zone) is the result.
//
// domainName - the name of the domain
String
GetParentDomainName(const String& domainName);
// Returns corresponding NetBIOS name, or empty string if mapping failed.
// Not for domain names -- just computer names!
//
// hostname - the name to be mapped to a NetBIOS name. This name must be a
// valid DNS name.
//
// err - ptr to a variable that will accept the win error code returned if
// the conversion fails. If the conversion fails, the return value is
// the empty string.
String
HostnameToNetbiosName(const String& hostname, HRESULT* err=0);
// returns true if the DNS client is configured, false if not.
bool
IsClientConfigured();
// returns true if the Microsoft DNS server is installed on this computer,
// false if not.
bool
IsServiceInstalled();
// returns true if the Microsoft DNS server is currently running on this
// computer, false if not.
bool
IsServiceRunning();
enum ValidateResult
{
VALID,
INVALID,
NON_RFC,
TOO_LONG,
NUMERIC,
BAD_CHARS
};
// Validates a single DNS label for proper length (in the UTF-8
// character set) and syntax.
//
// candidateDNSLabel - the label to be validated
ValidateResult
ValidateDnsLabelSyntax(const String& candidateDNSLabel);
// Validates the format, not the existence, of a DNS name. Checks for
// proper length in the UTF-8 character set, and proper syntax.
//
// candidateDNSName - in, the DNS name to verify.
//
// maxUnicodeCharacters - in, maximum number of uncode characters to
// allow in the name. If the name contains more characters than this,
// TOO_LONG is returned.
//
// maxUTF8Bytes - in, maximum number of bytes allowed to represent the name
// in the UTF-8 character set. Since a unicode character requires at
// least one byte in UTF-8, this value must be >= maxUnicodeCharacters.
ValidateResult
ValidateDnsNameSyntax(
const String& candidateDNSName,
size_t maxUnicodeCharacters = Dns::MAX_NAME_LENGTH,
size_t maxUTF8Bytes = Dns::MAX_NAME_LENGTH);
}
DNS_STATUS
MyDnsValidateName(const String& name, DNS_NAME_FORMAT format);
String
MyDnsStatusString(DNS_STATUS status);
// caller must free the result with MyDnsRecordListFree
DNS_STATUS
MyDnsQuery(
const String& name,
WORD type,
DWORD options,
DNS_RECORD*& result);
void
MyDnsRecordListFree(DNS_RECORD* rl);
#endif // DNS_HPP_INCLUDED