📄 windns.pas
字号:
PDNS_MINFO_DATA = ^DNS_MINFO_DATA;
{$EXTERNALSYM PDNS_MINFO_DATA}
TDnsMInfoData = DNS_MINFO_DATA;
PDnsMInfoData = PDNS_MINFO_DATA;
DNS_MX_DATA = record
pNameExchange: LPTSTR;
wPreference: WORD;
Pad: WORD; // keep ptrs DWORD aligned
end;
{$EXTERNALSYM DNS_MX_DATA}
PDNS_MX_DATA = ^DNS_MX_DATA;
{$EXTERNALSYM PDNS_MX_DATA}
TDnsMxData = DNS_MX_DATA;
PDnsMxData = PDNS_MX_DATA;
DNS_TXT_DATA = record
dwStringCount: DWORD;
pStringArray: array [0..0] of LPTSTR;
end;
{$EXTERNALSYM DNS_TXT_DATA}
PDNS_TXT_DATA = ^DNS_TXT_DATA;
{$EXTERNALSYM PDNS_TXT_DATA}
TDnsTxtData = DNS_TXT_DATA;
PDnsTxtData = PDNS_TXT_DATA;
DNS_NULL_DATA = record
dwByteCount: DWORD;
Data: array [0..0] of Byte;
end;
{$EXTERNALSYM DNS_NULL_DATA}
PDNS_NULL_DATA = ^DNS_NULL_DATA;
{$EXTERNALSYM PDNS_NULL_DATA}
TDnsNullData = DNS_NULL_DATA;
PDnsNullData = PDNS_NULL_DATA;
DNS_WKS_DATA = record
IpAddress: IP4_ADDRESS;
chProtocol: UCHAR;
BitMask: array [0..0] of Byte;
end;
{$EXTERNALSYM DNS_WKS_DATA}
PDNS_WKS_DATA = ^DNS_WKS_DATA;
{$EXTERNALSYM PDNS_WKS_DATA}
TDnsWksData = DNS_WKS_DATA;
PDnsWksData = PDNS_WKS_DATA;
DNS_AAAA_DATA = record
Ip6Address: DNS_IP6_ADDRESS;
end;
{$EXTERNALSYM DNS_AAAA_DATA}
PDNS_AAAA_DATA = ^DNS_AAAA_DATA;
{$EXTERNALSYM PDNS_AAAA_DATA}
TDnsAAAAData = DNS_AAAA_DATA;
PDnsAAAAData = PDNS_AAAA_DATA;
DNS_SIG_DATA = record
pNameSigner: LPTSTR;
wTypeCovered: Word;
chAlgorithm: Byte;
chLabelCount: Byte;
dwOriginalTtl: DWORD;
dwExpiration: DWORD;
dwTimeSigned: DWORD;
wKeyTag: Word;
Pad: Word; // keep byte field aligned
Signature: array [0..0] of Byte;
end;
{$EXTERNALSYM DNS_SIG_DATA}
PDNS_SIG_DATA = ^DNS_SIG_DATA;
{$EXTERNALSYM PDNS_SIG_DATA}
DNS_KEY_DATA = record
wFlags: WORD;
chProtocol: Byte;
chAlgorithm: Byte;
Key: array [0..0] of Byte;
end;
{$EXTERNALSYM DNS_KEY_DATA}
PDNS_KEY_DATA = ^DNS_KEY_DATA;
{$EXTERNALSYM PDNS_KEY_DATA}
DNS_LOC_DATA = record
wVersion: WORD;
wSize: WORD;
wHorPrec: WORD;
wVerPrec: WORD;
dwLatitude: DWORD;
dwLongitude: DWORD;
dwAltitude: DWORD;
end;
{$EXTERNALSYM DNS_LOC_DATA}
PDNS_LOC_DATA = ^DNS_LOC_DATA;
{$EXTERNALSYM PDNS_LOC_DATA}
TDnsLocData = DNS_LOC_DATA;
PDnsLocData = PDNS_LOC_DATA;
DNS_NXT_DATA = record
pNameNext: LPTSTR;
bTypeBitMap: array [0..0] of Byte;
end;
{$EXTERNALSYM DNS_NXT_DATA}
PDNS_NXT_DATA = ^DNS_NXT_DATA;
{$EXTERNALSYM PDNS_NXT_DATA}
TDnsNxtData = DNS_NXT_DATA;
PDnsNxtData = PDNS_NXT_DATA;
DNS_SRV_DATA = record
pNameTarget: LPTSTR;
wPriority: WORD;
wWeight: WORD;
wPort: WORD;
Pad: WORD; // keep ptrs DWORD aligned
end;
{$EXTERNALSYM DNS_SRV_DATA}
PDNS_SRV_DATA = ^DNS_SRV_DATA;
{$EXTERNALSYM PDNS_SRV_DATA}
TDnsSrvData = DNS_SRV_DATA;
PDnsSrvData = PDNS_SRV_DATA;
DNS_ATMA_DATA = record
AddressType: Byte;
Address: array [0..DNS_ATMA_MAX_ADDR_LENGTH - 1] of Byte;
// E164 -- Null terminated string of less than
// DNS_ATMA_MAX_ADDR_LENGTH
//
// For NSAP (AESA) BCD encoding of exactly
// DNS_ATMA_AESA_ADDR_LENGTH
end;
{$EXTERNALSYM DNS_ATMA_DATA}
PDNS_ATMA_DATA = ^DNS_ATMA_DATA;
{$EXTERNALSYM PDNS_ATMA_DATA}
TDnsAtmaData = DNS_ATMA_DATA;
PDnsAtmaData = PDNS_ATMA_DATA;
DNS_TKEY_DATA = record
pNameAlgorithm: LPTSTR;
pAlgorithmPacket: PByte;
pKey: PByte;
pOtherData: PByte;
dwCreateTime: DWORD;
dwExpireTime: DWORD;
wMode: WORD;
wError: WORD;
wKeyLength: WORD;
wOtherLength: WORD;
cAlgNameLength: UCHAR;
bPacketPointers: BOOL;
end;
{$EXTERNALSYM DNS_TKEY_DATA}
PDNS_TKEY_DATA = ^DNS_TKEY_DATA;
{$EXTERNALSYM PDNS_TKEY_DATA}
TDnsTKeyData = DNS_TKEY_DATA;
PDnsTKeyData = PDNS_TKEY_DATA;
DNS_TSIG_DATA = record
pNameAlgorithm: LPTSTR;
pAlgorithmPacket: PByte;
pSignature: PByte;
pOtherData: PByte;
i64CreateTime: LONGLONG;
wFudgeTime: WORD;
wOriginalXid: WORD;
wError: WORD;
wSigLength: WORD;
wOtherLength: WORD;
cAlgNameLength: UCHAR;
bPacketPointers: BOOL;
end;
{$EXTERNALSYM DNS_TSIG_DATA}
PDNS_TSIG_DATA = ^DNS_TSIG_DATA;
{$EXTERNALSYM PDNS_TSIG_DATA}
TDnsTSigData = DNS_TSIG_DATA;
PDnsTSigData = PDNS_TSIG_DATA;
//
// MS only types -- only hit the wire in MS-MS zone transfer
//
DNS_WINS_DATA = record
dwMappingFlag: DWORD;
dwLookupTimeout: DWORD;
dwCacheTimeout: DWORD;
cWinsServerCount: DWORD;
WinsServers: array [0..0] of IP4_ADDRESS;
end;
{$EXTERNALSYM DNS_WINS_DATA}
PDNS_WINS_DATA = ^DNS_WINS_DATA;
{$EXTERNALSYM PDNS_WINS_DATA}
TDnsWinsData = DNS_WINS_DATA;
PDnsWinsData = PDNS_WINS_DATA;
DNS_WINSR_DATA = record
dwMappingFlag: DWORD;
dwLookupTimeout: DWORD;
dwCacheTimeout: DWORD;
pNameResultDomain: LPTSTR;
end;
{$EXTERNALSYM DNS_WINSR_DATA}
PDNS_WINSR_DATA = ^DNS_WINSR_DATA;
{$EXTERNALSYM PDNS_WINSR_DATA}
TDnsWinsrData = DNS_WINSR_DATA;
PDnsWinsrData = PDNS_WINSR_DATA;
//
// Length of non-fixed-length data types
//
function DNS_TEXT_RECORD_LENGTH(StringCount: Integer): Integer;
{$EXTERNALSYM DNS_TEXT_RECORD_LENGTH}
function DNS_NULL_RECORD_LENGTH(ByteCount: Integer): Integer;
{$EXTERNALSYM DNS_NULL_RECORD_LENGTH}
function DNS_WKS_RECORD_LENGTH(ByteCount: Integer): Integer;
{$EXTERNALSYM DNS_WKS_RECORD_LENGTH}
//function DNS_WINS_RECORD_LENGTH(IpCount: Integer): Integer;
//{$EXTERNALSYM DNS_WINS_RECORD_LENGTH}
//
// Record flags
//
type
_DnsRecordFlags = record
//DWORD Section : 2;
//DWORD Delete : 1;
//DWORD CharSet : 2;
//DWORD Unused : 3;
//DWORD Reserved : 24;
Flags: DWORD;
end;
{$EXTERNALSYM _DnsRecordFlags}
DNS_RECORD_FLAGS = _DnsRecordFlags;
{$EXTERNALSYM DNS_RECORD_FLAGS}
TDnsRecordFlags = DNS_RECORD_FLAGS;
//
// Record flags as bit flags
// These may be or'd together to set the fields
//
// RR Section in packet
const
DNSREC_SECTION = ($00000003);
{$EXTERNALSYM DNSREC_SECTION}
DNSREC_QUESTION = ($00000000);
{$EXTERNALSYM DNSREC_QUESTION}
DNSREC_ANSWER = ($00000001);
{$EXTERNALSYM DNSREC_ANSWER}
DNSREC_AUTHORITY = ($00000002);
{$EXTERNALSYM DNSREC_AUTHORITY}
DNSREC_ADDITIONAL = ($00000003);
{$EXTERNALSYM DNSREC_ADDITIONAL}
// RR Section in packet (update)
DNSREC_ZONE = ($00000000);
{$EXTERNALSYM DNSREC_ZONE}
DNSREC_PREREQ = ($00000001);
{$EXTERNALSYM DNSREC_PREREQ}
DNSREC_UPDATE = ($00000002);
{$EXTERNALSYM DNSREC_UPDATE}
// Delete RR (update) or No-exist (prerequisite)
DNSREC_DELETE = ($00000004);
{$EXTERNALSYM DNSREC_DELETE}
DNSREC_NOEXIST = ($00000004);
{$EXTERNALSYM DNSREC_NOEXIST}
//
// Record \ RR set structure
//
// Note: The dwReserved flag serves to insure that the substructures
// start on 64-bit boundaries. Do NOT pack this structure, as the
// substructures may contain pointers or int64 values which are
// properly aligned unpacked.
//
type
PDNS_RECORD = ^DNS_RECORD;
{$EXTERNALSYM PDNS_RECORD}
_DnsRecord = record
pNext: PDNS_RECORD;
pName: LPTSTR;
wType: WORD;
wDataLength: WORD; // Not referenced for DNS record types defined above.
Flags: record
case Integer of
0: (DW: DWORD); // flags as DWORD
1: (S: DNS_RECORD_FLAGS); // flags as structure
end;
dwTtl: DWORD;
dwReserved: DWORD;
// Record Data
Data: record
case Integer of
0: (A: DNS_A_DATA);
1: (SOA, Soa_: DNS_SOA_DATA);
2: (PTR, Ptr_,
NS, Ns_,
CNAME, Cname_,
MB, Mb_,
MD, Md_,
MF, Mf_,
MG, Mg_,
MR, Mr_: DNS_PTR_DATA);
3: (MINFO, Minfo_,
RP, Rp_: DNS_MINFO_DATA);
4: (MX, Mx_,
AFSDB, Afsdb_,
RT, Rt_: DNS_MX_DATA);
5: (HINFO, Hinfo_,
ISDN, Isdn_,
TXT, Txt_,
X25: DNS_TXT_DATA);
6: (Null: DNS_NULL_DATA);
7: (WKS, Wks_: DNS_WKS_DATA);
8: (AAAA: DNS_AAAA_DATA);
9: (SRV, Srv_: DNS_SRV_DATA);
10: (ATMA, Atma_: DNS_ATMA_DATA);
11: (TKEY, Tkey_: DNS_TKEY_DATA);
12: (TSIG, Tsig_: DNS_TSIG_DATA);
13: (WINS, Wins_: DNS_WINS_DATA);
14: (WINSR, WinsR_, NBSTAT, Nbstat_: DNS_WINSR_DATA);
end;
end;
{$EXTERNALSYM _DnsRecord}
DNS_RECORD = _DnsRecord;
{$EXTERNALSYM DNS_RECORD}
PPDNS_RECORD = ^PDNS_RECORD;
{$NODEFINE PPDNS_RECORD}
TDnsRecord = DNS_RECORD;
PDnsRecord = PDNS_RECORD;
//
// Header or fixed size of DNS_RECORD
//
const
DNS_RECORD_FIXED_SIZE = 24; // FIELD_OFFSET( DNS_RECORD, Data )
{$EXTERNALSYM DNS_RECORD_FIXED_SIZE}
SIZEOF_DNS_RECORD_HEADER = DNS_RECORD_FIXED_SIZE;
{$EXTERNALSYM SIZEOF_DNS_RECORD_HEADER}
//
// Resource record set building
//
// pFirst points to first record in list.
// pLast points to last record in list.
//
type
_DnsRRSet = record
pFirstRR: PDNS_RECORD;
pLastRR: PDNS_RECORD;
end;
{$EXTERNALSYM _DnsRRSet}
DNS_RRSET = _DnsRRSet;
{$EXTERNALSYM DNS_RRSET}
PDNS_RRSET = ^DNS_RRSET;
{$EXTERNALSYM PDNS_RRSET}
TDnsRRSet = DNS_RRSET;
PDnsRRSet = PDNS_RRSET;
//
// To init pFirst is NULL.
// But pLast points at the location of the pFirst pointer -- essentially
// treating the pFirst ptr as a DNS_RECORD. (It is a DNS_RECORD with
// only a pNext field, but that's the only part we use.)
//
// Then when the first record is added to the list, the pNext field of
// this dummy record (which corresponds to pFirst's value) is set to
// point at the first record. So pFirst then properly points at the
// first record.
//
// (This works only because pNext is the first field in a
// DNS_RECORD structure and hence casting a PDNS_RECORD ptr to
// PDNS_RECORD* and dereferencing yields its pNext field)
//
// Use TERMINATE when have built RR set by grabbing records out of
// existing set. This makes sure that at the end, the last RR is
// properly NULL terminated.
//
procedure DNS_RRSET_INIT(rrset: PDNS_RRSET);
{$EXTERNALSYM DNS_RRSET_INIT}
//procedure DNS_RRSET_ADD(rrset, pnewRR: PDNS_RRSET);
//{$EXTERNALSYM DNS_RRSET_ADD}
procedure DNS_RRSET_TERMINATE(rrset: PDNS_RRSET);
{$EXTERNALSYM DNS_RRSET_TERMINATE}
//
// Record set manipulation
//
//
// Record Copy
// Record copy functions also do conversion between character sets.
//
// Note, it might be advisable to directly expose non-Ex copy
// functions _W, _A for record and set, to avoid exposing the
// conversion enum.
//
type
_DNS_CHARSET = (DnsCharSetUnknown, DnsCharSetUnicode, DnsCharSetUtf8, DnsCharSetAnsi);
{$EXTERNALSYM _DNS_CHARSET}
DNS_CHARSET = _DNS_CHARSET;
{$EXTERNALSYM DNS_CHARSET}
TDnsCharSet = DNS_CHARSET;
function DnsRecordCopyEx(pRecord: PDNS_RECORD; CharSetIn, CharSetOut: DNS_CHARSET): PDNS_RECORD; stdcall;
{$EXTERNALSYM DnsRecordCopyEx}
function DnsRecordSetCopyEx(pRecordSet: PDNS_RECORD; CharSetIn, CharSetOut: DNS_CHARSET): PDNS_RECORD; stdcall;
{$EXTERNALSYM DnsRecordSetCopyEx}
{$IFDEF UNICODE}
function DnsRecordCopy(pRR: PDNS_RECORD): PDNS_RECORD;
{$EXTERNALSYM DnsRecordCopy}
function DnsRecordSetCopy(pRR: PDNS_RECORD): PDNS_RECORD;
{$EXTERNALSYM DnsRecordSetCopy}
{$ELSE}
function DnsRecordCopy(pRR: PDNS_RECORD): PDNS_RECORD;
{$EXTERNALSYM DnsRecordCopy}
function DnsRecordSetCopy(pRR: PDNS_RECORD): PDNS_RECORD;
{$EXTERNALSYM DnsRecordSetCopy}
{$ENDIF}
//
// Record Compare
//
// Note: these routines only compare records of the SAME character set.
// (ANSI, unicode or UTF8). Furthermore the routines assume the character
// set is indicated within the record. If compare of user created, rather
// than DNS API created record lists is desired, then caller should use
// DnsRecordCopy API and compare copies.
//
function DnsRecordCompare(pRecord1, pRecord2: PDNS_RECORD): BOOL; stdcall;
{$EXTERNALSYM DnsRecordCompare}
function DnsRecordSetCompare(pRR1, pRR2: PDNS_RECORD; var ppDiff1, ppDiff2: PDNS_RECORD): BOOL; stdcall;
{$EXTERNALSYM DnsRecordSetCompare}
//
// Detach next record set from record list
//
function DnsRecordSetDetach(pRecordList: PDNS_RECORD): PDNS_RECORD; stdcall;
{$EXTERNALSYM DnsRecordSetDetach}
//
// Free record list
//
// Only supported free is deep free of entire record list with LocalFree().
// This correctly frees record list returned by DnsQuery() or DnsRecordSetCopy()
//
type
DNS_FREE_TYPE = (DnsFreeNoOp, DnsFreeRecordListDeep);
{$EXTERNALSYM DNS_FREE_TYPE}
TDnsFreeType = DNS_FREE_TYPE;
procedure DnsRecordListFree(pRecordList: PDNS_RECORD; FreeType: DNS_FREE_TYPE); stdcall;
{$EXTERNALSYM DnsRecordListFree}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -