1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479 |
- {******************************************************************************}
- { }
- { Domain Naming Services API interface Unit for Object Pascal }
- { }
- { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
- { Corporation. All Rights Reserved. }
- { }
- { The original file is: windns.h, released June 2000. The original Pascal }
- { code is: WinDNS.pas, released December 2000. The initial developer of the }
- { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
- { }
- { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
- { Marcel van Brakel. All Rights Reserved. }
- { }
- { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
- { }
- { You may retrieve the latest version of this file at the Project JEDI }
- { APILIB home page, located at http://jedi-apilib.sourceforge.net }
- { }
- { The contents of this file are used with permission, subject to the Mozilla }
- { Public License Version 1.1 (the "License"); you may not use this file except }
- { in compliance with the License. You may obtain a copy of the License at }
- { http://www.mozilla.org/MPL/MPL-1.1.html }
- { }
- { Software distributed under the License is distributed on an "AS IS" basis, }
- { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
- { the specific language governing rights and limitations under the License. }
- { }
- { Alternatively, the contents of this file may be used under the terms of the }
- { GNU Lesser General Public License (the "LGPL License"), in which case the }
- { provisions of the LGPL License are applicable instead of those above. }
- { If you wish to allow use of your version of this file only under the terms }
- { of the LGPL License and not to allow others to use your version of this file }
- { under the MPL, indicate your decision by deleting the provisions above and }
- { replace them with the notice and other provisions required by the LGPL }
- { License. If you do not delete the provisions above, a recipient may use }
- { your version of this file under either the MPL or the LGPL License. }
- { }
- { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
- { }
- {******************************************************************************}
- {******************************************************************}
- { Notes (TODO): }
- { DnsRecordSetDetach() and DnsValidateName_X() didn't have a cc }
- { IP_ADDRESS_STRING_LENGTH is defined nowhere }
- { DNS_WINS_RECORD macro untranslatable due to IP_ADDRESS }
- { DNS_RRSET_ADD macro untranslatable }
- {******************************************************************}
- unit JwaWinDNS;
- {$WEAKPACKAGEUNIT}
- {$HPPEMIT ''}
- {$HPPEMIT '#include "WinDNS.h"'}
- {$HPPEMIT ''}
- {$HPPEMIT 'typeded PDNS_RECORD *PPDNS_RECORD'}
- {$HPPEMIT ''}
- {$I jediapilib.inc}
- interface
- uses
- JwaWinsock2, JwaWinType, JwaWS2atm;
- type
- IN6_ADDR = Pointer; // todo
- //
- // Define QWORD -- not yet defined globally
- //
- type
- QWORD = Int64;
- {$EXTERNALSYM QWORD}
- //
- // DNS public types
- //
- type
- DNS_STATUS = Longint;
- {$EXTERNALSYM DNS_STATUS}
- PDNS_STATUS = ^DNS_STATUS;
- {$EXTERNALSYM PDNS_STATUS}
- TDnsStatus = DNS_STATUS;
- PDnsStatus = PDNS_STATUS;
- //
- // IP Address
- //
- type
- IP4_ADDRESS = DWORD;
- {$EXTERNALSYM IP4_ADDRESS}
- PIP4_ADDRESS = ^IP4_ADDRESS;
- {$EXTERNALSYM PIP4_ADDRESS}
- TIP4Address = IP4_ADDRESS;
- PIP4Address = PIP4_ADDRESS;
- const
- SIZEOF_IP4_ADDRESS = 4;
- {$EXTERNALSYM SIZEOF_IP4_ADDRESS}
- IP4_ADDRESS_STRING_LENGTH = 15;
- {$EXTERNALSYM IP4_ADDRESS_STRING_LENGTH}
- IP4_ADDRESS_STRING_BUFFER_LENGTH = 16;
- {$EXTERNALSYM IP4_ADDRESS_STRING_BUFFER_LENGTH}
- //
- // IP Address Array type
- //
- type
- PIP4_ARRAY = ^IP4_ARRAY;
- {$EXTERNALSYM PIP4_ARRAY}
- _IP4_ARRAY = record
- AddrCount: DWORD;
- AddrArray: array [0..0] of IP4_ADDRESS;
- end;
- {$EXTERNALSYM _IP4_ARRAY}
- IP4_ARRAY = _IP4_ARRAY;
- {$EXTERNALSYM IP4_ARRAY}
- TIp4Array = IP4_ARRAY;
- PIp4Array = PIP4_ARRAY;
- //
- // IPv6 Address
- //
- PIP6_ADDRESS = ^IP6_ADDRESS;
- {$EXTERNALSYM PIP6_ADDRESS}
- IP6_ADDRESS = record
- case Integer of
- 0: (IP6Qword: array [0..1] of QWORD);
- 1: (IP6Dword: array [0..3] of DWORD);
- 2: (IP6Word: array [0..7] of WORD);
- 3: (IP6Byte: array [0..15] of BYTE);
- 4: (In6: IN6_ADDR);
- end;
- {$EXTERNALSYM IP6_ADDRESS}
- TIp6Address = IP6_ADDRESS;
- PIp6Address = PIP6_ADDRESS;
- // Backward compatibility
- DNS_IP6_ADDRESS = IP6_ADDRESS;
- {$EXTERNALSYM DNS_IP6_ADDRESS}
- PDNS_IP6_ADDRESS = ^IP6_ADDRESS;
- {$EXTERNALSYM PDNS_IP6_ADDRESS}
- TDnsIp6Address = DNS_IP6_ADDRESS;
- PDnsIp6Address = PDNS_IP6_ADDRESS;
- //
- // IP6 string max is 45 bytes
- // - 6 WORDs in colon+hex (5 chars)
- // - last DWORD as IP4 (15 chars)
- //
- const
- IP6_ADDRESS_STRING_LENGTH = 47;
- {$EXTERNALSYM IP6_ADDRESS_STRING_LENGTH}
- IP6_ADDRESS_STRING_BUFFER_LENGTH = 48;
- {$EXTERNALSYM IP6_ADDRESS_STRING_BUFFER_LENGTH}
- // backcompat
- IPV6_ADDRESS_STRING_LENGTH = IP6_ADDRESS_STRING_LENGTH;
- {$EXTERNALSYM IPV6_ADDRESS_STRING_LENGTH}
- //
- // Inline byte flipping -- can be done in registers
- //
- procedure INLINE_WORD_FLIP(var Out_: WORD; In_: WORD);
- {$EXTERNALSYM INLINE_WORD_FLIP}
- procedure INLINE_HTONS(var Out_: WORD; In_: WORD);
- {$EXTERNALSYM INLINE_HTONS}
- procedure INLINE_NTOHS(var Out_: WORD; In_: WORD);
- {$EXTERNALSYM INLINE_NTOHS}
- procedure INLINE_DWORD_FLIP(var Out_: DWORD; In_: DWORD);
- {$EXTERNALSYM INLINE_DWORD_FLIP}
- procedure INLINE_NTOHL(var Out_: DWORD; In_: DWORD);
- {$EXTERNALSYM INLINE_NTOHL}
- procedure INLINE_HTONL(var Out_: DWORD; In_: DWORD);
- {$EXTERNALSYM INLINE_HTONL}
- //
- // Inline byte flip and write to packet (unaligned)
- //
- procedure INLINE_WRITE_FLIPPED_WORD(pout: PWORD; In_: WORD);
- {$EXTERNALSYM INLINE_WRITE_FLIPPED_WORD}
- procedure INLINE_WRITE_FLIPPED_DWORD(pout: PDWORD; In_: DWORD);
- {$EXTERNALSYM INLINE_WRITE_FLIPPED_DWORD}
- //
- // Basic DNS definitions
- //
- //
- // DNS port for both UDP and TCP is 53.
- //
- const
- DNS_PORT_HOST_ORDER = $0035; // port 53
- {$EXTERNALSYM DNS_PORT_HOST_ORDER}
- DNS_PORT_NET_ORDER = $3500;
- {$EXTERNALSYM DNS_PORT_NET_ORDER}
- //
- // DNS UDP packets no more than 512 bytes
- //
- DNS_RFC_MAX_UDP_PACKET_LENGTH = 512;
- {$EXTERNALSYM DNS_RFC_MAX_UDP_PACKET_LENGTH}
- //
- // DNS Names limited to 255, 63 in any one label
- //
- DNS_MAX_NAME_LENGTH = 255;
- {$EXTERNALSYM DNS_MAX_NAME_LENGTH}
- DNS_MAX_LABEL_LENGTH = 63;
- {$EXTERNALSYM DNS_MAX_LABEL_LENGTH}
- DNS_MAX_NAME_BUFFER_LENGTH = 256;
- {$EXTERNALSYM DNS_MAX_NAME_BUFFER_LENGTH}
- DNS_MAX_LABEL_BUFFER_LENGTH = 64;
- {$EXTERNALSYM DNS_MAX_LABEL_BUFFER_LENGTH}
- //
- // Reverse lookup domain names
- //
- DNS_IP4_REVERSE_DOMAIN_STRING = 'in-addr.arpa.';
- {$EXTERNALSYM DNS_IP4_REVERSE_DOMAIN_STRING}
- //DNS_MAX_IP4_REVERSE_NAME_LENGTH = IP_ADDRESS_STRING_LENGTH + 1 + SizeOf(DNS_IP4_REVERSE_DOMAIN_STRING);
- //{$EXTERNALSYM DNS_MAX_IP4_REVERSE_NAME_LENGTH}
- //DNS_MAX_IP4_REVERSE_NAME_BUFFER_LENGTH = DNS_MAX_IP4_REVERSE_NAME_LENGTH + 1;
- //{$EXTERNALSYM DNS_MAX_IP4_REVERSE_NAME_BUFFER_LENGTH}
- DNS_IP6_REVERSE_DOMAIN_STRING = 'ip6.int.';
- {$EXTERNALSYM DNS_IP6_REVERSE_DOMAIN_STRING}
- DNS_MAX_IP6_REVERSE_NAME_LENGTH = 64 + SizeOf(DNS_IP6_REVERSE_DOMAIN_STRING);
- {$EXTERNALSYM DNS_MAX_IP6_REVERSE_NAME_LENGTH}
- DNS_MAX_IP6_REVERSE_NAME_BUFFER_LENGTH = DNS_MAX_IP6_REVERSE_NAME_LENGTH + 1;
- {$EXTERNALSYM DNS_MAX_IP6_REVERSE_NAME_BUFFER_LENGTH}
- // Combined
- DNS_MAX_REVERSE_NAME_LENGTH = DNS_MAX_IP6_REVERSE_NAME_LENGTH;
- {$EXTERNALSYM DNS_MAX_REVERSE_NAME_LENGTH}
- DNS_MAX_REVERSE_NAME_BUFFER_LENGTH = DNS_MAX_IP6_REVERSE_NAME_BUFFER_LENGTH;
- {$EXTERNALSYM DNS_MAX_REVERSE_NAME_BUFFER_LENGTH}
- //
- // DNS Text string limited by size representable
- // in a single byte length field
- DNS_MAX_TEXT_STRING_LENGTH = 255;
- {$EXTERNALSYM DNS_MAX_TEXT_STRING_LENGTH}
- //
- // DNS On-The-Wire Structures
- //
- //
- // DNS Message Header
- //
- type
- _DNS_HEADER = packed record
- Xid: WORD;
- Flags: Byte;
- //BYTE RecursionDesired : 1;
- //BYTE Truncation : 1;
- //BYTE Authoritative : 1;
- //BYTE Opcode : 4;
- //BYTE IsResponse : 1;
- Flags2: Byte;
- //BYTE ResponseCode : 4;
- //BYTE Reserved : 3;
- //BYTE RecursionAvailable : 1;
- QuestionCount: WORD;
- AnswerCount: WORD;
- NameServerCount: WORD;
- AdditionalCount: WORD;
- end;
- {$EXTERNALSYM _DNS_HEADER}
- DNS_HEADER = _DNS_HEADER;
- {$EXTERNALSYM DNS_HEADER}
- PDNS_HEADER = ^DNS_HEADER;
- {$EXTERNALSYM PDNS_HEADER}
- TDnsHeader = DNS_HEADER;
- PDnsHeader = PDNS_HEADER;
- //
- // Flags as WORD
- //
- function DNS_HEADER_FLAGS(pHead: PDNS_HEADER): WORD;
- {$EXTERNALSYM DNS_HEADER_FLAGS}
- //
- // Byte flip DNS header to\from host order.
- //
- // Note that this does NOT flip flags, as definition above defines
- // flags as individual bytes for direct access to net byte order.
- //
- procedure DNS_BYTE_FLIP_HEADER_COUNTS(var pHeader: PDNS_HEADER);
- {$EXTERNALSYM DNS_BYTE_FLIP_HEADER_COUNTS}
- //
- // Question name follows header
- //
- const
- DNS_OFFSET_TO_QUESTION_NAME = SizeOf(DNS_HEADER);
- {$EXTERNALSYM DNS_OFFSET_TO_QUESTION_NAME}
- //
- // Question immediately follows header so compressed question name
- // 0xC000 | sizeof(DNS_HEADER)
- DNS_COMPRESSED_QUESTION_NAME = $C00C;
- {$EXTERNALSYM DNS_COMPRESSED_QUESTION_NAME}
- //
- // Packet extraction macros
- //
- {
- #define DNS_QUESTION_NAME_FROM_HEADER( _pHeader_ ) \
- ( (PCHAR)( (PDNS_HEADER)(_pHeader_) + 1 ) )
- #define DNS_ANSWER_FROM_QUESTION( _pQuestion_ ) \
- ( (PCHAR)( (PDNS_QUESTION)(_pQuestion_) + 1 ) )
- }
- //
- // DNS Question
- //
- type
- PDNS_WIRE_QUESTION = ^DNS_WIRE_QUESTION;
- {$EXTERNALSYM PDNS_WIRE_QUESTION}
- _DNS_WIRE_QUESTION = packed record
- // Preceded by question name
- QuestionType: WORD;
- QuestionClass: WORD;
- end;
- {$EXTERNALSYM _DNS_WIRE_QUESTION}
- DNS_WIRE_QUESTION = _DNS_WIRE_QUESTION;
- {$EXTERNALSYM DNS_WIRE_QUESTION}
- TDnsWireQuestion = DNS_WIRE_QUESTION;
- PDnsWireQuestion = PDNS_WIRE_QUESTION;
- //
- // DNS Resource Record
- //
- PDNS_WIRE_RECORD = ^DNS_WIRE_RECORD;
- {$EXTERNALSYM PDNS_WIRE_RECORD}
- _DNS_WIRE_RECORD = packed record
- // Preceded by record owner name
- RecordType: WORD;
- RecordClass: WORD;
- TimeToLive: DWORD;
- DataLength: WORD;
- // Followed by record data
- end;
- {$EXTERNALSYM _DNS_WIRE_RECORD}
- DNS_WIRE_RECORD = _DNS_WIRE_RECORD;
- {$EXTERNALSYM DNS_WIRE_RECORD}
- TDnsWireRecord = DNS_WIRE_RECORD;
- PDnsWireRecord = PDNS_WIRE_RECORD;
- //
- // DNS Query Types
- //
- const
- DNS_OPCODE_QUERY = 0; // Query
- {$EXTERNALSYM DNS_OPCODE_QUERY}
- DNS_OPCODE_IQUERY = 1; // Obsolete: IP to name
- {$EXTERNALSYM DNS_OPCODE_IQUERY}
- DNS_OPCODE_SERVER_STATUS = 2; // Obsolete: DNS ping
- {$EXTERNALSYM DNS_OPCODE_SERVER_STATUS}
- DNS_OPCODE_UNKNOWN = 3; // Unknown
- {$EXTERNALSYM DNS_OPCODE_UNKNOWN}
- DNS_OPCODE_NOTIFY = 4; // Notify
- {$EXTERNALSYM DNS_OPCODE_NOTIFY}
- DNS_OPCODE_UPDATE = 5; // Dynamic Update
- {$EXTERNALSYM DNS_OPCODE_UPDATE}
- //
- // DNS response codes.
- //
- // Sent in the "ResponseCode" field of a DNS_HEADER.
- //
- DNS_RCODE_NOERROR = 0;
- {$EXTERNALSYM DNS_RCODE_NOERROR}
- DNS_RCODE_FORMERR = 1; // Format error
- {$EXTERNALSYM DNS_RCODE_FORMERR}
- DNS_RCODE_SERVFAIL = 2; // Server failure
- {$EXTERNALSYM DNS_RCODE_SERVFAIL}
- DNS_RCODE_NXDOMAIN = 3; // Name error
- {$EXTERNALSYM DNS_RCODE_NXDOMAIN}
- DNS_RCODE_NOTIMPL = 4; // Not implemented
- {$EXTERNALSYM DNS_RCODE_NOTIMPL}
- DNS_RCODE_REFUSED = 5; // Refused
- {$EXTERNALSYM DNS_RCODE_REFUSED}
- DNS_RCODE_YXDOMAIN = 6; // Domain name should not exist
- {$EXTERNALSYM DNS_RCODE_YXDOMAIN}
- DNS_RCODE_YXRRSET = 7; // RR set should not exist
- {$EXTERNALSYM DNS_RCODE_YXRRSET}
- DNS_RCODE_NXRRSET = 8; // RR set does not exist
- {$EXTERNALSYM DNS_RCODE_NXRRSET}
- DNS_RCODE_NOTAUTH = 9; // Not authoritative for zone
- {$EXTERNALSYM DNS_RCODE_NOTAUTH}
- DNS_RCODE_NOTZONE = 10; // Name is not zone
- {$EXTERNALSYM DNS_RCODE_NOTZONE}
- DNS_RCODE_MAX = 15;
- {$EXTERNALSYM DNS_RCODE_MAX}
- //
- // Extended RCODEs
- //
- DNS_RCODE_BADVERS = 16; // Bad EDNS version
- {$EXTERNALSYM DNS_RCODE_BADVERS}
- DNS_RCODE_BADSIG = 16; // Bad signature
- {$EXTERNALSYM DNS_RCODE_BADSIG}
- DNS_RCODE_BADKEY = 17; // Bad key
- {$EXTERNALSYM DNS_RCODE_BADKEY}
- DNS_RCODE_BADTIME = 18; // Bad timestamp
- {$EXTERNALSYM DNS_RCODE_BADTIME}
- //
- // Mappings to friendly names
- //
- DNS_RCODE_NO_ERROR = DNS_RCODE_NOERROR;
- {$EXTERNALSYM DNS_RCODE_NO_ERROR}
- DNS_RCODE_FORMAT_ERROR = DNS_RCODE_FORMERR;
- {$EXTERNALSYM DNS_RCODE_FORMAT_ERROR}
- DNS_RCODE_SERVER_FAILURE = DNS_RCODE_SERVFAIL;
- {$EXTERNALSYM DNS_RCODE_SERVER_FAILURE}
- DNS_RCODE_NAME_ERROR = DNS_RCODE_NXDOMAIN;
- {$EXTERNALSYM DNS_RCODE_NAME_ERROR}
- DNS_RCODE_NOT_IMPLEMENTED = DNS_RCODE_NOTIMPL;
- {$EXTERNALSYM DNS_RCODE_NOT_IMPLEMENTED}
- //
- // DNS Classes
- //
- // Classes are on the wire as WORDs.
- //
- // _CLASS_ defines in host order.
- // _RCLASS_ defines in net byte order.
- //
- // Generally we'll avoid byte flip and test class in net byte order.
- //
- DNS_CLASS_INTERNET = $0001; // 1
- {$EXTERNALSYM DNS_CLASS_INTERNET}
- DNS_CLASS_CSNET = $0002; // 2
- {$EXTERNALSYM DNS_CLASS_CSNET}
- DNS_CLASS_CHAOS = $0003; // 3
- {$EXTERNALSYM DNS_CLASS_CHAOS}
- DNS_CLASS_HESIOD = $0004; // 4
- {$EXTERNALSYM DNS_CLASS_HESIOD}
- DNS_CLASS_NONE = $00fe; // 254
- {$EXTERNALSYM DNS_CLASS_NONE}
- DNS_CLASS_ALL = $00ff; // 255
- {$EXTERNALSYM DNS_CLASS_ALL}
- DNS_CLASS_ANY = $00ff; // 255
- {$EXTERNALSYM DNS_CLASS_ANY}
- DNS_RCLASS_INTERNET = $0100; // 1
- {$EXTERNALSYM DNS_RCLASS_INTERNET}
- DNS_RCLASS_CSNET = $0200; // 2
- {$EXTERNALSYM DNS_RCLASS_CSNET}
- DNS_RCLASS_CHAOS = $0300; // 3
- {$EXTERNALSYM DNS_RCLASS_CHAOS}
- DNS_RCLASS_HESIOD = $0400; // 4
- {$EXTERNALSYM DNS_RCLASS_HESIOD}
- DNS_RCLASS_NONE = $fe00; // 254
- {$EXTERNALSYM DNS_RCLASS_NONE}
- DNS_RCLASS_ALL = $ff00; // 255
- {$EXTERNALSYM DNS_RCLASS_ALL}
- DNS_RCLASS_ANY = $ff00; // 255
- {$EXTERNALSYM DNS_RCLASS_ANY}
- //
- // DNS Record Types
- //
- // _TYPE_ defines are in host byte order.
- // _RTYPE_ defines are in net byte order.
- //
- // Generally always deal with types in host byte order as we index
- // resource record functions by type.
- //
- DNS_TYPE_ZERO = $0000;
- {$EXTERNALSYM DNS_TYPE_ZERO}
- // RFC 1034/1035
- DNS_TYPE_A = $0001; // 1
- {$EXTERNALSYM DNS_TYPE_A}
- DNS_TYPE_NS = $0002; // 2
- {$EXTERNALSYM DNS_TYPE_NS}
- DNS_TYPE_MD = $0003; // 3
- {$EXTERNALSYM DNS_TYPE_MD}
- DNS_TYPE_MF = $0004; // 4
- {$EXTERNALSYM DNS_TYPE_MF}
- DNS_TYPE_CNAME = $0005; // 5
- {$EXTERNALSYM DNS_TYPE_CNAME}
- DNS_TYPE_SOA = $0006; // 6
- {$EXTERNALSYM DNS_TYPE_SOA}
- DNS_TYPE_MB = $0007; // 7
- {$EXTERNALSYM DNS_TYPE_MB}
- DNS_TYPE_MG = $0008; // 8
- {$EXTERNALSYM DNS_TYPE_MG}
- DNS_TYPE_MR = $0009; // 9
- {$EXTERNALSYM DNS_TYPE_MR}
- DNS_TYPE_NULL = $000a; // 10
- {$EXTERNALSYM DNS_TYPE_NULL}
- DNS_TYPE_WKS = $000b; // 11
- {$EXTERNALSYM DNS_TYPE_WKS}
- DNS_TYPE_PTR = $000c; // 12
- {$EXTERNALSYM DNS_TYPE_PTR}
- DNS_TYPE_HINFO = $000d; // 13
- {$EXTERNALSYM DNS_TYPE_HINFO}
- DNS_TYPE_MINFO = $000e; // 14
- {$EXTERNALSYM DNS_TYPE_MINFO}
- DNS_TYPE_MX = $000f; // 15
- {$EXTERNALSYM DNS_TYPE_MX}
- DNS_TYPE_TEXT = $0010; // 16
- {$EXTERNALSYM DNS_TYPE_TEXT}
- // RFC 1183
- DNS_TYPE_RP = $0011; // 17
- {$EXTERNALSYM DNS_TYPE_RP}
- DNS_TYPE_AFSDB = $0012; // 18
- {$EXTERNALSYM DNS_TYPE_AFSDB}
- DNS_TYPE_X25 = $0013; // 19
- {$EXTERNALSYM DNS_TYPE_X25}
- DNS_TYPE_ISDN = $0014; // 20
- {$EXTERNALSYM DNS_TYPE_ISDN}
- DNS_TYPE_RT = $0015; // 21
- {$EXTERNALSYM DNS_TYPE_RT}
- // RFC 1348
- DNS_TYPE_NSAP = $0016; // 22
- {$EXTERNALSYM DNS_TYPE_NSAP}
- DNS_TYPE_NSAPPTR = $0017; // 23
- {$EXTERNALSYM DNS_TYPE_NSAPPTR}
- // RFC 2065 (DNS security)
- DNS_TYPE_SIG = $0018; // 24
- {$EXTERNALSYM DNS_TYPE_SIG}
- DNS_TYPE_KEY = $0019; // 25
- {$EXTERNALSYM DNS_TYPE_KEY}
- // RFC 1664 (X.400 mail)
- DNS_TYPE_PX = $001a; // 26
- {$EXTERNALSYM DNS_TYPE_PX}
- // RFC 1712 (Geographic position)
- DNS_TYPE_GPOS = $001b; // 27
- {$EXTERNALSYM DNS_TYPE_GPOS}
- // RFC 1886 (IPv6 Address)
- DNS_TYPE_AAAA = $001c; // 28
- {$EXTERNALSYM DNS_TYPE_AAAA}
- // RFC 1876 (Geographic location)
- DNS_TYPE_LOC = $001d; // 29
- {$EXTERNALSYM DNS_TYPE_LOC}
- // RFC 2065 (Secure negative response)
- DNS_TYPE_NXT = $001e; // 30
- {$EXTERNALSYM DNS_TYPE_NXT}
- // Patton (Endpoint Identifier)
- DNS_TYPE_EID = $001f; // 31
- {$EXTERNALSYM DNS_TYPE_EID}
- // Patton (Nimrod Locator)
- DNS_TYPE_NIMLOC = $0020; // 32
- {$EXTERNALSYM DNS_TYPE_NIMLOC}
- // RFC 2052 (Service location)
- DNS_TYPE_SRV = $0021; // 33
- {$EXTERNALSYM DNS_TYPE_SRV}
- // ATM Standard something-or-another (ATM Address)
- DNS_TYPE_ATMA = $0022; // 34
- {$EXTERNALSYM DNS_TYPE_ATMA}
- // RFC 2168 (Naming Authority Pointer)
- DNS_TYPE_NAPTR = $0023; // 35
- {$EXTERNALSYM DNS_TYPE_NAPTR}
- // RFC 2230 (Key Exchanger)
- DNS_TYPE_KX = $0024; // 36
- {$EXTERNALSYM DNS_TYPE_KX}
- // RFC 2538 (CERT)
- DNS_TYPE_CERT = $0025; // 37
- {$EXTERNALSYM DNS_TYPE_CERT}
- // A6 Draft (A6)
- DNS_TYPE_A6 = $0026; // 38
- {$EXTERNALSYM DNS_TYPE_A6}
- // DNAME Draft (DNAME)
- DNS_TYPE_DNAME = $0027; // 39
- {$EXTERNALSYM DNS_TYPE_DNAME}
- // Eastlake (Kitchen Sink)
- DNS_TYPE_SINK = $0028; // 40
- {$EXTERNALSYM DNS_TYPE_SINK}
- // RFC 2671 (EDNS OPT)
- DNS_TYPE_OPT = $0029; // 41
- {$EXTERNALSYM DNS_TYPE_OPT}
- //
- // IANA Reserved
- //
- DNS_TYPE_UINFO = $0064; // 100
- {$EXTERNALSYM DNS_TYPE_UINFO}
- DNS_TYPE_UID = $0065; // 101
- {$EXTERNALSYM DNS_TYPE_UID}
- DNS_TYPE_GID = $0066; // 102
- {$EXTERNALSYM DNS_TYPE_GID}
- DNS_TYPE_UNSPEC = $0067; // 103
- {$EXTERNALSYM DNS_TYPE_UNSPEC}
- //
- // Query only types (1035, 1995)
- // - Crawford (ADDRS)
- // - TKEY draft (TKEY)
- // - TSIG draft (TSIG)
- // - RFC 1995 (IXFR)
- // - RFC 1035 (AXFR up)
- //
- DNS_TYPE_ADDRS = $00f8; // 248
- {$EXTERNALSYM DNS_TYPE_ADDRS}
- DNS_TYPE_TKEY = $00f9; // 249
- {$EXTERNALSYM DNS_TYPE_TKEY}
- DNS_TYPE_TSIG = $00fa; // 250
- {$EXTERNALSYM DNS_TYPE_TSIG}
- DNS_TYPE_IXFR = $00fb; // 251
- {$EXTERNALSYM DNS_TYPE_IXFR}
- DNS_TYPE_AXFR = $00fc; // 252
- {$EXTERNALSYM DNS_TYPE_AXFR}
- DNS_TYPE_MAILB = $00fd; // 253
- {$EXTERNALSYM DNS_TYPE_MAILB}
- DNS_TYPE_MAILA = $00fe; // 254
- {$EXTERNALSYM DNS_TYPE_MAILA}
- DNS_TYPE_ALL = $00ff; // 255
- {$EXTERNALSYM DNS_TYPE_ALL}
- DNS_TYPE_ANY = $00ff; // 255
- {$EXTERNALSYM DNS_TYPE_ANY}
- //
- // Temp Microsoft types -- use until get IANA approval for real type
- //
- DNS_TYPE_WINS = $ff01; // 64K - 255
- {$EXTERNALSYM DNS_TYPE_WINS}
- DNS_TYPE_WINSR = $ff02; // 64K - 254
- {$EXTERNALSYM DNS_TYPE_WINSR}
- DNS_TYPE_NBSTAT = DNS_TYPE_WINSR;
- {$EXTERNALSYM DNS_TYPE_NBSTAT}
- //
- // DNS Record Types -- Net Byte Order
- //
- DNS_RTYPE_A = $0100; // 1
- {$EXTERNALSYM DNS_RTYPE_A}
- DNS_RTYPE_NS = $0200; // 2
- {$EXTERNALSYM DNS_RTYPE_NS}
- DNS_RTYPE_MD = $0300; // 3
- {$EXTERNALSYM DNS_RTYPE_MD}
- DNS_RTYPE_MF = $0400; // 4
- {$EXTERNALSYM DNS_RTYPE_MF}
- DNS_RTYPE_CNAME = $0500; // 5
- {$EXTERNALSYM DNS_RTYPE_CNAME}
- DNS_RTYPE_SOA = $0600; // 6
- {$EXTERNALSYM DNS_RTYPE_SOA}
- DNS_RTYPE_MB = $0700; // 7
- {$EXTERNALSYM DNS_RTYPE_MB}
- DNS_RTYPE_MG = $0800; // 8
- {$EXTERNALSYM DNS_RTYPE_MG}
- DNS_RTYPE_MR = $0900; // 9
- {$EXTERNALSYM DNS_RTYPE_MR}
- DNS_RTYPE_NULL = $0a00; // 10
- {$EXTERNALSYM DNS_RTYPE_NULL}
- DNS_RTYPE_WKS = $0b00; // 11
- {$EXTERNALSYM DNS_RTYPE_WKS}
- DNS_RTYPE_PTR = $0c00; // 12
- {$EXTERNALSYM DNS_RTYPE_PTR}
- DNS_RTYPE_HINFO = $0d00; // 13
- {$EXTERNALSYM DNS_RTYPE_HINFO}
- DNS_RTYPE_MINFO = $0e00; // 14
- {$EXTERNALSYM DNS_RTYPE_MINFO}
- DNS_RTYPE_MX = $0f00; // 15
- {$EXTERNALSYM DNS_RTYPE_MX}
- DNS_RTYPE_TEXT = $1000; // 16
- {$EXTERNALSYM DNS_RTYPE_TEXT}
- DNS_RTYPE_RP = $1100; // 17
- {$EXTERNALSYM DNS_RTYPE_RP}
- DNS_RTYPE_AFSDB = $1200; // 18
- {$EXTERNALSYM DNS_RTYPE_AFSDB}
- DNS_RTYPE_X25 = $1300; // 19
- {$EXTERNALSYM DNS_RTYPE_X25}
- DNS_RTYPE_ISDN = $1400; // 20
- {$EXTERNALSYM DNS_RTYPE_ISDN}
- DNS_RTYPE_RT = $1500; // 21
- {$EXTERNALSYM DNS_RTYPE_RT}
- DNS_RTYPE_NSAP = $1600; // 22
- {$EXTERNALSYM DNS_RTYPE_NSAP}
- DNS_RTYPE_NSAPPTR = $1700; // 23
- {$EXTERNALSYM DNS_RTYPE_NSAPPTR}
- DNS_RTYPE_SIG = $1800; // 24
- {$EXTERNALSYM DNS_RTYPE_SIG}
- DNS_RTYPE_KEY = $1900; // 25
- {$EXTERNALSYM DNS_RTYPE_KEY}
- DNS_RTYPE_PX = $1a00; // 26
- {$EXTERNALSYM DNS_RTYPE_PX}
- DNS_RTYPE_GPOS = $1b00; // 27
- {$EXTERNALSYM DNS_RTYPE_GPOS}
- DNS_RTYPE_AAAA = $1c00; // 28
- {$EXTERNALSYM DNS_RTYPE_AAAA}
- DNS_RTYPE_LOC = $1d00; // 29
- {$EXTERNALSYM DNS_RTYPE_LOC}
- DNS_RTYPE_NXT = $1e00; // 30
- {$EXTERNALSYM DNS_RTYPE_NXT}
- DNS_RTYPE_EID = $1f00; // 31
- {$EXTERNALSYM DNS_RTYPE_EID}
- DNS_RTYPE_NIMLOC = $2000; // 32
- {$EXTERNALSYM DNS_RTYPE_NIMLOC}
- DNS_RTYPE_SRV = $2100; // 33
- {$EXTERNALSYM DNS_RTYPE_SRV}
- DNS_RTYPE_ATMA = $2200; // 34
- {$EXTERNALSYM DNS_RTYPE_ATMA}
- DNS_RTYPE_NAPTR = $2300; // 35
- {$EXTERNALSYM DNS_RTYPE_NAPTR}
- DNS_RTYPE_KX = $2400; // 36
- {$EXTERNALSYM DNS_RTYPE_KX}
- DNS_RTYPE_CERT = $2500; // 37
- {$EXTERNALSYM DNS_RTYPE_CERT}
- DNS_RTYPE_A6 = $2600; // 38
- {$EXTERNALSYM DNS_RTYPE_A6}
- DNS_RTYPE_DNAME = $2700; // 39
- {$EXTERNALSYM DNS_RTYPE_DNAME}
- DNS_RTYPE_SINK = $2800; // 40
- {$EXTERNALSYM DNS_RTYPE_SINK}
- DNS_RTYPE_OPT = $2900; // 41
- {$EXTERNALSYM DNS_RTYPE_OPT}
- //
- // IANA Reserved
- //
- DNS_RTYPE_UINFO = $6400; // 100
- {$EXTERNALSYM DNS_RTYPE_UINFO}
- DNS_RTYPE_UID = $6500; // 101
- {$EXTERNALSYM DNS_RTYPE_UID}
- DNS_RTYPE_GID = $6600; // 102
- {$EXTERNALSYM DNS_RTYPE_GID}
- DNS_RTYPE_UNSPEC = $6700; // 103
- {$EXTERNALSYM DNS_RTYPE_UNSPEC}
- //
- // Query only types
- //
- DNS_RTYPE_TKEY = $f900; // 249
- {$EXTERNALSYM DNS_RTYPE_TKEY}
- DNS_RTYPE_TSIG = $fa00; // 250
- {$EXTERNALSYM DNS_RTYPE_TSIG}
- DNS_RTYPE_IXFR = $fb00; // 251
- {$EXTERNALSYM DNS_RTYPE_IXFR}
- DNS_RTYPE_AXFR = $fc00; // 252
- {$EXTERNALSYM DNS_RTYPE_AXFR}
- DNS_RTYPE_MAILB = $fd00; // 253
- {$EXTERNALSYM DNS_RTYPE_MAILB}
- DNS_RTYPE_MAILA = $fe00; // 254
- {$EXTERNALSYM DNS_RTYPE_MAILA}
- DNS_RTYPE_ALL = $ff00; // 255
- {$EXTERNALSYM DNS_RTYPE_ALL}
- DNS_RTYPE_ANY = $ff00; // 255
- {$EXTERNALSYM DNS_RTYPE_ANY}
- //
- // Temp Microsoft types -- use until get IANA approval for real type
- //
- DNS_RTYPE_WINS = $01ff; // 64K - 255
- {$EXTERNALSYM DNS_RTYPE_WINS}
- DNS_RTYPE_WINSR = $02ff; // 64K - 254
- {$EXTERNALSYM DNS_RTYPE_WINSR}
- //
- // Record type specific definitions
- //
- //
- // ATMA (ATM address type) formats
- //
- // Define these directly for any environment (ex NT4)
- // without winsock2 ATM support (ws2atm.h)
- //
- DNS_ATMA_FORMAT_E164 = ATM_E164;
- {$EXTERNALSYM DNS_ATMA_FORMAT_E164}
- DNS_ATMA_FORMAT_AESA = ATM_AESA;
- {$EXTERNALSYM DNS_ATMA_FORMAT_AESA}
- DNS_ATMA_MAX_ADDR_LENGTH = ATM_ADDR_SIZE;
- {$EXTERNALSYM DNS_ATMA_MAX_ADDR_LENGTH}
- DNS_ATMA_AESA_ADDR_LENGTH = 20;
- {$EXTERNALSYM DNS_ATMA_AESA_ADDR_LENGTH}
- DNS_ATMA_MAX_RECORD_LENGTH = DNS_ATMA_MAX_ADDR_LENGTH + 1;
- {$EXTERNALSYM DNS_ATMA_MAX_RECORD_LENGTH}
- //
- // DNSSEC defs
- //
- // DNSSEC algorithms
- DNSSEC_ALGORITHM_RSAMD5 = 1;
- {$EXTERNALSYM DNSSEC_ALGORITHM_RSAMD5}
- DNSSEC_ALGORITHM_NULL = 253;
- {$EXTERNALSYM DNSSEC_ALGORITHM_NULL}
- DNSSEC_ALGORITHM_PRIVATE = 254;
- {$EXTERNALSYM DNSSEC_ALGORITHM_PRIVATE}
- // DNSSEC KEY protocol table
- DNSSEC_PROTOCOL_NONE = 0;
- {$EXTERNALSYM DNSSEC_PROTOCOL_NONE}
- DNSSEC_PROTOCOL_TLS = 1;
- {$EXTERNALSYM DNSSEC_PROTOCOL_TLS}
- DNSSEC_PROTOCOL_EMAIL = 2;
- {$EXTERNALSYM DNSSEC_PROTOCOL_EMAIL}
- DNSSEC_PROTOCOL_DNSSEC = 3;
- {$EXTERNALSYM DNSSEC_PROTOCOL_DNSSEC}
- DNSSEC_PROTOCOL_IPSEC = 4;
- {$EXTERNALSYM DNSSEC_PROTOCOL_IPSEC}
- // DNSSEC KEY flag field
- DNSSEC_KEY_FLAG_NOAUTH = $0001;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_NOAUTH}
- DNSSEC_KEY_FLAG_NOCONF = $0002;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_NOCONF}
- DNSSEC_KEY_FLAG_FLAG2 = $0004;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_FLAG2}
- DNSSEC_KEY_FLAG_EXTEND = $0008;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_EXTEND}
- {$DEFINE DNSSEC_KEY_FLAG_}
- DNSSEC_KEY_FLAG_FLAG4 = $0010;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_FLAG4}
- DNSSEC_KEY_FLAG_FLAG5 = $0020;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_FLAG5}
- // bits 6,7 are name type
- DNSSEC_KEY_FLAG_USER = $0000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_USER}
- DNSSEC_KEY_FLAG_ZONE = $0040;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_ZONE}
- DNSSEC_KEY_FLAG_HOST = $0080;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_HOST}
- DNSSEC_KEY_FLAG_NTPE3 = $00c0;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_NTPE3}
- // bits 8-11 are reserved for future use
- DNSSEC_KEY_FLAG_FLAG8 = $0100;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_FLAG8}
- DNSSEC_KEY_FLAG_FLAG9 = $0200;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_FLAG9}
- DNSSEC_KEY_FLAG_FLAG10 = $0400;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_FLAG10}
- DNSSEC_KEY_FLAG_FLAG11 = $0800;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_FLAG11}
- // bits 12-15 are sig field
- DNSSEC_KEY_FLAG_SIG0 = $0000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG0}
- DNSSEC_KEY_FLAG_SIG1 = $1000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG1}
- DNSSEC_KEY_FLAG_SIG2 = $2000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG2}
- DNSSEC_KEY_FLAG_SIG3 = $3000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG3}
- DNSSEC_KEY_FLAG_SIG4 = $4000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG4}
- DNSSEC_KEY_FLAG_SIG5 = $5000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG5}
- DNSSEC_KEY_FLAG_SIG6 = $6000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG6}
- DNSSEC_KEY_FLAG_SIG7 = $7000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG7}
- DNSSEC_KEY_FLAG_SIG8 = $8000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG8}
- DNSSEC_KEY_FLAG_SIG9 = $9000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG9}
- DNSSEC_KEY_FLAG_SIG10 = $a000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG10}
- DNSSEC_KEY_FLAG_SIG11 = $b000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG11}
- DNSSEC_KEY_FLAG_SIG12 = $c000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG12}
- DNSSEC_KEY_FLAG_SIG13 = $d000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG13}
- DNSSEC_KEY_FLAG_SIG14 = $e000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG14}
- DNSSEC_KEY_FLAG_SIG15 = $f000;
- {$EXTERNALSYM DNSSEC_KEY_FLAG_SIG15}
- //
- // TKEY modes
- //
- DNS_TKEY_MODE_SERVER_ASSIGN = 1;
- {$EXTERNALSYM DNS_TKEY_MODE_SERVER_ASSIGN}
- DNS_TKEY_MODE_DIFFIE_HELLMAN = 2;
- {$EXTERNALSYM DNS_TKEY_MODE_DIFFIE_HELLMAN}
- DNS_TKEY_MODE_GSS = 3;
- {$EXTERNALSYM DNS_TKEY_MODE_GSS}
- DNS_TKEY_MODE_RESOLVER_ASSIGN = 4;
- {$EXTERNALSYM DNS_TKEY_MODE_RESOLVER_ASSIGN}
- //
- // WINS + NBSTAT flag field
- //
- DNS_WINS_FLAG_SCOPE = DWORD($80000000);
- {$EXTERNALSYM DNS_WINS_FLAG_SCOPE}
- DNS_WINS_FLAG_LOCAL = $00010000;
- {$EXTERNALSYM DNS_WINS_FLAG_LOCAL}
- //
- // Helpful checks
- //
- function IS_WORD_ALIGNED(P: Pointer): BOOL;
- {$EXTERNALSYM IS_DWORD_ALIGNED}
- function IS_DWORD_ALIGNED(P: Pointer): BOOL;
- {$EXTERNALSYM IS_DWORD_ALIGNED}
- function IS_QWORD_ALIGNED(P: Pointer): BOOL;
- {$EXTERNALSYM IS_QWORD_ALIGNED}
- //
- // DNS config API
- //
- //
- // Types of DNS configuration info
- //
- type
- DNS_CONFIG_TYPE = (
- // In Win2K
- DnsConfigPrimaryDomainName_W,
- DnsConfigPrimaryDomainName_A,
- DnsConfigPrimaryDomainName_UTF8,
- // Not available yet
- DnsConfigAdapterDomainName_W,
- DnsConfigAdapterDomainName_A,
- DnsConfigAdapterDomainName_UTF8,
- // In Win2K
- DnsConfigDnsServerList,
- // Not available yet
- DnsConfigSearchList,
- DnsConfigAdapterInfo,
- // In Win2K
- DnsConfigPrimaryHostNameRegistrationEnabled,
- DnsConfigAdapterHostNameRegistrationEnabled,
- DnsConfigAddressRegistrationMaxCount,
- // In WindowsXP
- DnsConfigHostName_W,
- DnsConfigHostName_A,
- DnsConfigHostName_UTF8,
- DnsConfigFullHostName_W,
- DnsConfigFullHostName_A,
- DnsConfigFullHostName_UTF8);
- {$EXTERNALSYM DNS_CONFIG_TYPE}
- TDnsConfigType = DNS_CONFIG_TYPE;
- //
- // Config API flags
- //
- //
- // Causes config info to be allocated with LocalAlloc()
- //
- const
- DNS_CONFIG_FLAG_ALLOC = $00000001;
- {$EXTERNALSYM DNS_CONFIG_FLAG_ALLOC}
- function DnsQueryConfig(Config: DNS_CONFIG_TYPE; Flag: DWORD; pwsAdapterName: PWSTR; pReserved, pBuffer: PVOID; pBufferLength: PDWORD): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsQueryConfig}
- //
- // DNS resource record structure
- //
- //
- // Record data for specific types
- //
- type
- PDNS_A_DATA = ^DNS_A_DATA;
- {$EXTERNALSYM PDNS_A_DATA}
- DNS_A_DATA = record
- IpAddress: IP4_ADDRESS;
- end;
- {$EXTERNALSYM DNS_A_DATA}
- TDnsAData = DNS_A_DATA;
- PDnsAData = PDNS_A_DATA;
- PDNS_PTR_DATA = ^DNS_PTR_DATA;
- {$EXTERNALSYM PDNS_PTR_DATA}
- DNS_PTR_DATA = record
- pNameHost: LPTSTR;
- end;
- {$EXTERNALSYM DNS_PTR_DATA}
- TDnsPtrData = DNS_PTR_DATA;
- PDnsPtrData = PDNS_PTR_DATA;
- PDNS_SOA_DATA = ^DNS_SOA_DATA;
- {$EXTERNALSYM PDNS_SOA_DATA}
- DNS_SOA_DATA = record
- pNamePrimaryServer: LPTSTR;
- pNameAdministrator: LPTSTR;
- dwSerialNo: DWORD;
- dwRefresh: DWORD;
- dwRetry: DWORD;
- dwExpire: DWORD;
- dwDefaultTtl: DWORD;
- end;
- {$EXTERNALSYM DNS_SOA_DATA}
- TDnsSoaData = DNS_SOA_DATA;
- PDnsSoaData = PDNS_SOA_DATA;
- PDNS_MINFO_DATA = ^DNS_MINFO_DATA;
- {$EXTERNALSYM PDNS_MINFO_DATA}
- DNS_MINFO_DATA = record
- pNameMailbox: LPTSTR;
- pNameErrorsMailbox: LPTSTR;
- end;
- {$EXTERNALSYM DNS_MINFO_DATA}
- TDnsMinfoData = DNS_MINFO_DATA;
- PDnsMinfoData = PDNS_MINFO_DATA;
- PDNS_MX_DATA = ^DNS_MX_DATA;
- {$EXTERNALSYM PDNS_MX_DATA}
- DNS_MX_DATA = record
- pNameExchange: LPTSTR;
- wPreference: WORD;
- Pad: WORD; // keep ptrs DWORD aligned
- end;
- {$EXTERNALSYM DNS_MX_DATA}
- TDnsMxData = DNS_MX_DATA;
- PDnsMxData = PDNS_MX_DATA;
- PDNS_TXT_DATA = ^DNS_TXT_DATA;
- {$EXTERNALSYM PDNS_TXT_DATA}
- DNS_TXT_DATA = record
- dwStringCount: DWORD;
- pStringArray: array [0..0] of LPTSTR;
- end;
- {$EXTERNALSYM DNS_TXT_DATA}
- TDnsTxtData = DNS_TXT_DATA;
- PDnsTxtData = PDNS_TXT_DATA;
- PDNS_NULL_DATA = ^DNS_NULL_DATA;
- {$EXTERNALSYM PDNS_NULL_DATA}
- DNS_NULL_DATA = record
- dwByteCount: DWORD;
- Data: array [0..0] of BYTE;
- end;
- {$EXTERNALSYM DNS_NULL_DATA}
- TDnsNullData = DNS_NULL_DATA;
- PDnsNullData = PDNS_NULL_DATA;
- PDNS_WKS_DATA = ^DNS_WKS_DATA;
- {$EXTERNALSYM PDNS_WKS_DATA}
- DNS_WKS_DATA = record
- IpAddress: IP4_ADDRESS;
- chProtocol: UCHAR;
- BitMask: array [0..0] of BYTE;
- end;
- {$EXTERNALSYM DNS_WKS_DATA}
- TDnsWksData = DNS_WKS_DATA;
- PDnsWksData = PDNS_WKS_DATA;
- PDNS_AAAA_DATA = ^DNS_AAAA_DATA;
- {$EXTERNALSYM PDNS_AAAA_DATA}
- DNS_AAAA_DATA = record
- Ip6Address: DNS_IP6_ADDRESS;
- end;
- {$EXTERNALSYM DNS_AAAA_DATA}
- TDnsAaaaData = DNS_AAAA_DATA;
- PDnsAaaaData = PDNS_AAAA_DATA;
- PDNS_SIG_DATA = ^DNS_SIG_DATA;
- {$EXTERNALSYM PDNS_SIG_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}
- TDnsSigData = DNS_SIG_DATA;
- PDnsSigData = PDNS_SIG_DATA;
- PDNS_KEY_DATA = ^DNS_KEY_DATA;
- {$EXTERNALSYM PDNS_KEY_DATA}
- DNS_KEY_DATA = record
- wFlags: WORD;
- chProtocol: BYTE;
- chAlgorithm: BYTE;
- Key: array [0..1 - 1] of BYTE;
- end;
- {$EXTERNALSYM DNS_KEY_DATA}
- TDnsKeyData = DNS_KEY_DATA;
- PDnsKeyData = PDNS_KEY_DATA;
- PDNS_LOC_DATA = ^DNS_LOC_DATA;
- {$EXTERNALSYM PDNS_LOC_DATA}
- DNS_LOC_DATA = record
- wVersion: WORD;
- wSize: WORD;
- wHorPrec: WORD;
- wVerPrec: WORD;
- dwLatitude: DWORD;
- dwLongitude: DWORD;
- dwAltitude: DWORD;
- end;
- {$EXTERNALSYM DNS_LOC_DATA}
- TDnsLocData = DNS_LOC_DATA;
- PDnsLocData = PDNS_LOC_DATA;
- PDNS_NXT_DATA = ^DNS_NXT_DATA;
- {$EXTERNALSYM PDNS_NXT_DATA}
- DNS_NXT_DATA = record
- pNameNext: LPTSTR;
- wNumTypes: WORD;
- wTypes: array [0..0] of WORD;
- end;
- {$EXTERNALSYM DNS_NXT_DATA}
- TDnsNxtData = DNS_NXT_DATA;
- PDnsNxtData = PDNS_NXT_DATA;
- PDNS_SRV_DATA = ^DNS_SRV_DATA;
- {$EXTERNALSYM PDNS_SRV_DATA}
- DNS_SRV_DATA = record
- pNameTarget: LPTSTR;
- wPriority: WORD;
- wWeight: WORD;
- wPort: WORD;
- Pad: WORD; // keep ptrs DWORD aligned
- end;
- {$EXTERNALSYM DNS_SRV_DATA}
- TDnsSrvData = DNS_SRV_DATA;
- PDnsSrvData = PDNS_SRV_DATA;
- PDNS_ATMA_DATA = ^DNS_ATMA_DATA;
- {$EXTERNALSYM PDNS_ATMA_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}
- TDnsAtmaData = DNS_ATMA_DATA;
- PDnsAtmaData = PDNS_ATMA_DATA;
- PDNS_TKEY_DATA = ^DNS_TKEY_DATA;
- {$EXTERNALSYM PDNS_TKEY_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}
- TDnsTkeyData = DNS_TKEY_DATA;
- PDnsTkeyData = PDNS_TKEY_DATA;
- PDNS_TSIG_DATA = ^DNS_TSIG_DATA;
- {$EXTERNALSYM PDNS_TSIG_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}
- TDnsTsigData = DNS_TSIG_DATA;
- PDnsTsigData = PDNS_TSIG_DATA;
- //
- // MS only types -- only hit the wire in MS-MS zone transfer
- //
- PDNS_WINS_DATA = ^DNS_WINS_DATA;
- {$EXTERNALSYM PDNS_WINS_DATA}
- DNS_WINS_DATA = record
- dwMappingFlag: DWORD;
- dwLookupTimeout: DWORD;
- dwCacheTimeout: DWORD;
- cWinsServerCount: DWORD;
- WinsServers: array [0..0] of IP4_ADDRESS;
- end;
- {$EXTERNALSYM DNS_WINS_DATA}
- TDnsWinsData = DNS_WINS_DATA;
- PDnsWinsData = PDNS_WINS_DATA;
- PDNS_WINSR_DATA = ^DNS_WINSR_DATA;
- {$EXTERNALSYM PDNS_WINSR_DATA}
- DNS_WINSR_DATA = record
- dwMappingFlag: DWORD;
- dwLookupTimeout: DWORD;
- dwCacheTimeout: DWORD;
- pNameResultDomain: LPTSTR;
- end;
- {$EXTERNALSYM DNS_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;
- PDnsRecordFlags = ^DNS_RECORD_FLAGS;
- //
- // Wire Record Sections
- //
- // Useable both in record flags "Section" and as index into
- // wire message header section counts.
- //
- _DnsSection = (
- DnsSectionQuestion,
- DnsSectionAnswer,
- DnsSectionAuthority,
- DnsSectionAddtional);
- {$EXTERNALSYM _DnsSection}
- DNS_SECTION = _DnsSection;
- TDnsSection = _DnsSection;
- // Update message section names
- const
- DnsSectionZone = DnsSectionQuestion;
- {$EXTERNALSYM DnsSectionZone}
- DnsSectionPrereq = DnsSectionAnswer;
- {$EXTERNALSYM DnsSectionPrereq}
- DnsSectionUpdate = DnsSectionAuthority;
- {$EXTERNALSYM DnsSectionUpdate}
- //
- // Record flags as bit flags
- // These may be or'd together to set the fields
- //
- // RR Section in packet
- 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: (KEY, Key_: DNS_KEY_DATA);
- 10: (SIG, Sig_: DNS_SIG_DATA);
- 11: (ATMA, Atma_: DNS_ATMA_DATA);
- 12: (NXT, Nxt_: DNS_NXT_DATA);
- 13: (SRV, Srv_: DNS_SRV_DATA);
- 14: (TKEY, Tkey_: DNS_TKEY_DATA);
- 15: (TSIG, Tsig_: DNS_TSIG_DATA);
- 16: (WINS, Wins_: DNS_WINS_DATA);
- 17: (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
- PDnsRRSet = ^DnsRRSet;
- {$EXTERNALSYM PDnsRRSet}
- _DnsRRSet = record
- pFirstRR: PDNS_RECORD;
- pLastRR: PDNS_RECORD;
- end;
- {$EXTERNALSYM _DnsRRSet}
- DnsRRSet = _DnsRRSet;
- {$EXTERNALSYM DnsRRSet}
- TDnsrrset = DnsRRSet;
- //
- // 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: PDnsRRSet);
- {$EXTERNALSYM DNS_RRSET_INIT}
- //procedure DNS_RRSET_ADD(rrset, pnewRR: PDNS_RRSET);
- //{$EXTERNALSYM DNS_RRSET_ADD}
- procedure DNS_RRSET_TERMINATE(rrset: PDnsRRSet);
- {$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;
- PDnsCharSet = ^DNS_CHARSET;
- function DnsRecordCopyEx(pRecord: PDNS_RECORD; CharSetIn: DNS_CHARSET; CharSetOut: DNS_CHARSET): PDNS_RECORD; stdcall;
- {$EXTERNALSYM DnsRecordCopyEx}
- function DnsRecordSetCopyEx(pRecordSet: PDNS_RECORD; CharSetIn: DNS_CHARSET; CharSetOut: DNS_CHARSET): PDNS_RECORD; stdcall;
- {$EXTERNALSYM DnsRecordSetCopyEx}
- function DnsRecordCopy(pRR: PDNS_RECORD): PDNS_RECORD;
- {$EXTERNALSYM DnsRecordCopy}
- function DnsRecordSetCopy(pRR: PDNS_RECORD): PDNS_RECORD;
- {$EXTERNALSYM DnsRecordSetCopy}
- //
- // 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: PDNS_RECORD; pRecord2: PDNS_RECORD): BOOL; stdcall;
- {$EXTERNALSYM DnsRecordCompare}
- function DnsRecordSetCompare(pRR1: PDNS_RECORD; 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 = (DnsFreeFlat, DnsFreeRecordList);
- {$EXTERNALSYM DNS_FREE_TYPE}
- TDnsFreeType = DNS_FREE_TYPE;
- procedure DnsFreeRecordListDeep(pRecordList: PDNS_RECORD; FreeType: DNS_FREE_TYPE); stdcall;
- {$EXTERNALSYM DnsFreeRecordListDeep}
- procedure DnsRecordListFree(pRecordList: PDNS_RECORD; FreeType: DNS_FREE_TYPE); stdcall;
- {$EXTERNALSYM DnsRecordListFree}
- procedure DnsFree(pData: PVOID; FreeType: DNS_FREE_TYPE); stdcall;
- {$EXTERNALSYM DnsFree}
- //
- // DNS Query API
- //
- //
- // Options for DnsQuery
- //
- const
- DNS_QUERY_STANDARD = $00000000;
- {$EXTERNALSYM DNS_QUERY_STANDARD}
- DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE = $00000001;
- {$EXTERNALSYM DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE}
- DNS_QUERY_USE_TCP_ONLY = $00000002;
- {$EXTERNALSYM DNS_QUERY_USE_TCP_ONLY}
- DNS_QUERY_NO_RECURSION = $00000004;
- {$EXTERNALSYM DNS_QUERY_NO_RECURSION}
- DNS_QUERY_BYPASS_CACHE = $00000008;
- {$EXTERNALSYM DNS_QUERY_BYPASS_CACHE}
- DNS_QUERY_NO_WIRE_QUERY = $00000010;
- {$EXTERNALSYM DNS_QUERY_NO_WIRE_QUERY}
- DNS_QUERY_NO_LOCAL_NAME = $00000020;
- {$EXTERNALSYM DNS_QUERY_NO_LOCAL_NAME}
- DNS_QUERY_NO_HOSTS_FILE = $00000040;
- {$EXTERNALSYM DNS_QUERY_NO_HOSTS_FILE}
- DNS_QUERY_NO_NETBT = $00000080;
- {$EXTERNALSYM DNS_QUERY_NO_NETBT}
- DNS_QUERY_WIRE_ONLY = $00000100;
- {$EXTERNALSYM DNS_QUERY_WIRE_ONLY}
- DNS_QUERY_RETURN_MESSAGE = $00000200;
- {$EXTERNALSYM DNS_QUERY_RETURN_MESSAGE}
- DNS_QUERY_TREAT_AS_FQDN = $00001000;
- {$EXTERNALSYM DNS_QUERY_TREAT_AS_FQDN}
- DNS_QUERY_DONT_RESET_TTL_VALUES = $00100000;
- {$EXTERNALSYM DNS_QUERY_DONT_RESET_TTL_VALUES}
- DNS_QUERY_RESERVED = DWORD($ff000000);
- {$EXTERNALSYM DNS_QUERY_RESERVED}
- // Backward compatibility with Win2K
- // Do not use
- DNS_QUERY_CACHE_ONLY = DNS_QUERY_NO_WIRE_QUERY;
- {$EXTERNALSYM DNS_QUERY_CACHE_ONLY}
- function DnsQuery_A(pszName: PCSTR; wType: WORD; Options: DWORD; aipServers: PIP4_ARRAY; ppQueryResults: PPDNS_RECORD; pReserved: PPVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsQuery_A}
- function DnsQuery_UTF8(pszName: PCSTR; wType: WORD; Options: DWORD; aipServers: PIP4_ARRAY; ppQueryResults: PPDNS_RECORD; pReserved: PPVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsQuery_UTF8}
- function DnsQuery_W(pszName: LPCWSTR; wType: WORD; Options: DWORD; aipServers: PIP4_ARRAY; ppQueryResults: PPDNS_RECORD; pReserved: PPVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsQuery_W}
- function DnsQuery(pszName: LPCTSTR; wType: WORD; Options: DWORD; aipServers: PIP4_ARRAY; ppQueryResults: PPDNS_RECORD; pReserved: PPVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsQuery}
- //
- // DNS Update API
- //
- // DnsAcquireContextHandle
- // DnsReleaseContextHandle
- // DnsModifyRecordsInSet
- // DnsReplaceRecordSet
- //
- //
- // Update flags
- //
- const
- DNS_UPDATE_SECURITY_USE_DEFAULT = $00000000;
- {$EXTERNALSYM DNS_UPDATE_SECURITY_USE_DEFAULT}
- DNS_UPDATE_SECURITY_OFF = $00000010;
- {$EXTERNALSYM DNS_UPDATE_SECURITY_OFF}
- DNS_UPDATE_SECURITY_ON = $00000020;
- {$EXTERNALSYM DNS_UPDATE_SECURITY_ON}
- DNS_UPDATE_SECURITY_ONLY = $00000100;
- {$EXTERNALSYM DNS_UPDATE_SECURITY_ONLY}
- DNS_UPDATE_CACHE_SECURITY_CONTEXT = $00000200;
- {$EXTERNALSYM DNS_UPDATE_CACHE_SECURITY_CONTEXT}
- DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT = $00000400;
- {$EXTERNALSYM DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT}
- DNS_UPDATE_FORCE_SECURITY_NEGO = $00000800;
- {$EXTERNALSYM DNS_UPDATE_FORCE_SECURITY_NEGO}
- DNS_UPDATE_TRY_ALL_MASTER_SERVERS = $00001000;
- {$EXTERNALSYM DNS_UPDATE_TRY_ALL_MASTER_SERVERS}
- DNS_UPDATE_SKIP_NO_UPDATE_ADAPTERS = $00002000;
- {$EXTERNALSYM DNS_UPDATE_SKIP_NO_UPDATE_ADAPTERS}
- DNS_UPDATE_RESERVED = DWORD($ffff0000);
- {$EXTERNALSYM DNS_UPDATE_RESERVED}
- //
- // Note: pCredentials paramater is currently respectively
- // PSEC_WINNT_AUTH_IDENTITY_W or PSEC_WINNT_AUTH_IDENTITY_A.
- // Using PVOID to obviate the need for including rpcdce.h
- // in order to include this file and to leave open the
- // possibility of alternative credential specifications in
- // the future.
- //
- function DnsAcquireContextHandle_W(CredentialFlags: DWORD; pCredentials: PVOID; pContextHandle: PHANDLE): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsAcquireContextHandle_W}
- function DnsAcquireContextHandle_A(CredentialFlags: DWORD; pCredentials: PVOID; pContextHandle: PHANDLE): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsAcquireContextHandle_A}
- function DnsAcquireContextHandle(CredentialFlags: DWORD; pCredentials: PVOID; pContextHandle: PHANDLE): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsAcquireContextHandle}
- procedure DnsReleaseContextHandle(hContext: HANDLE); stdcall;
- {$EXTERNALSYM DnsReleaseContextHandle}
- //
- // Dynamic Update API
- //
- function DnsModifyRecordsInSet_W(pAddRecords: PDNS_RECORD; pDeleteRecords: PDNS_RECORD; Options: DWORD; hContext: HANDLE; pServerList: PIP4_ARRAY; pReserved: PVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsModifyRecordsInSet_W}
- function DnsModifyRecordsInSet_A(pAddRecords: PDNS_RECORD; pDeleteRecords: PDNS_RECORD; Options: DWORD; hContext: HANDLE; pServerList: PIP4_ARRAY; pReserved: PVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsModifyRecordsInSet_A}
- function DnsModifyRecordsInSet_UTF8(pAddRecords: PDNS_RECORD; pDeleteRecords: PDNS_RECORD; Options: DWORD; hContext: HANDLE; pServerList: PIP4_ARRAY; pReserved: PVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsModifyRecordsInSet_UTF8}
- function DnsModifyRecordsInSet(pAddRecords: PDNS_RECORD; pDeleteRecords: PDNS_RECORD; Options: DWORD; hContext: HANDLE; pServerList: PIP4_ARRAY; pReserved: PVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsModifyRecordsInSet}
- function DnsReplaceRecordSetW(pNewSet: PDNS_RECORD; Options: DWORD; hContext: HANDLE; pServerList: PIP4_ARRAY; pReserved: PVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsReplaceRecordSetW}
- function DnsReplaceRecordSetA(pNewSet: PDNS_RECORD; Options: DWORD; hContext: HANDLE; pServerList: PIP4_ARRAY; pReserved: PVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsReplaceRecordSetA}
- function DnsReplaceRecordSetUTF8(pNewSet: PDNS_RECORD; Options: DWORD; hContext: HANDLE; pServerList: PIP4_ARRAY; pReserved: PVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsReplaceRecordSetUTF8}
- function DnsReplaceRecordSet(pNewSet: PDNS_RECORD; Options: DWORD; hContext: HANDLE; pServerList: PIP4_ARRAY; pReserved: PVOID): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsReplaceRecordSet}
- //
- // DNS name validation
- //
- type
- _DNS_NAME_FORMAT = (
- DnsNameDomain,
- DnsNameDomainLabel,
- DnsNameHostnameFull,
- DnsNameHostnameLabel,
- DnsNameWildcard,
- DnsNameSrvRecord);
- {$EXTERNALSYM _DNS_NAME_FORMAT}
- DNS_NAME_FORMAT = _DNS_NAME_FORMAT;
- {$EXTERNALSYM DNS_NAME_FORMAT}
- TDnsNameFormat = DNS_NAME_FORMAT;
- PDnsNameFormat = ^DNS_NAME_FORMAT;
- function DnsValidateName_UTF8(pszName: LPCSTR; Format: DNS_NAME_FORMAT): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsValidateName_UTF8}
- function DnsValidateName_W(pwszName: LPCWSTR; Format: DNS_NAME_FORMAT): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsValidateName_W}
- function DnsValidateName_A(pszName: LPCSTR; Format: DNS_NAME_FORMAT): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsValidateName_A}
- function DnsValidateName(pszName: LPCTSTR; Format: DNS_NAME_FORMAT): DNS_STATUS;
- {$EXTERNALSYM DnsValidateName}
- //
- // DNS name comparison
- //
- function DnsNameCompare_A(pName1: LPSTR; pName2: LPSTR): BOOL; stdcall;
- {$EXTERNALSYM DnsNameCompare_A}
- function DnsNameCompare_W(pName1: LPWSTR; pName2: LPWSTR): BOOL; stdcall;
- {$EXTERNALSYM DnsNameCompare_W}
- function DnsNameCompare(pName1: LPTSTR; pName2: LPTSTR): BOOL; stdcall;
- {$EXTERNALSYM DnsNameCompare}
- //
- // DNS message "roll-your-own" routines
- //
- type
- PDNS_MESSAGE_BUFFER = ^DNS_MESSAGE_BUFFER;
- {$EXTERNALSYM PDNS_MESSAGE_BUFFER}
- _DNS_MESSAGE_BUFFER = record
- MessageHead: DNS_HEADER;
- MessageBody: array [0..0] of CHAR;
- end;
- {$EXTERNALSYM _DNS_MESSAGE_BUFFER}
- DNS_MESSAGE_BUFFER = _DNS_MESSAGE_BUFFER;
- {$EXTERNALSYM DNS_MESSAGE_BUFFER}
- TDnsMessageBuffer = DNS_MESSAGE_BUFFER;
- PDnsMessageBuffer = PDNS_MESSAGE_BUFFER;
- function DnsWriteQuestionToBuffer_W(pDnsBuffer: PDNS_MESSAGE_BUFFER; pdwBufferSize: LPDWORD; pszName: LPWSTR; wType: WORD; Xid: WORD; fRecursionDesired: BOOL): BOOL; stdcall;
- {$EXTERNALSYM DnsWriteQuestionToBuffer_W}
- function DnsWriteQuestionToBuffer_UTF8(pDnsBuffer: PDNS_MESSAGE_BUFFER; pdwBufferSize: LPDWORD; pszName: LPSTR; wType: WORD; Xid: WORD; fRecursionDesired: BOOL): BOOL; stdcall;
- {$EXTERNALSYM DnsWriteQuestionToBuffer_UTF8}
- function DnsExtractRecordsFromMessage_W(pDnsBuffer: PDNS_MESSAGE_BUFFER; wMessageLength: WORD; ppRecord: PPDNS_RECORD): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsExtractRecordsFromMessage_W}
- function DnsExtractRecordsFromMessage_UTF8(pDnsBuffer: PDNS_MESSAGE_BUFFER; wMessageLength: WORD; ppRecord: PPDNS_RECORD): DNS_STATUS; stdcall;
- {$EXTERNALSYM DnsExtractRecordsFromMessage_UTF8}
- implementation
- const
- dnsapi = 'dnsapi.dll';
- {$IFDEF UNICODE}
- AWSuffix = 'W';
- {$ELSE}
- AWSuffix = 'A';
- {$ENDIF UNICODE}
- procedure INLINE_WORD_FLIP(var Out_: WORD; In_: WORD);
- begin
- Out_ := (In_ shl 8) or (In_ shr 8);
- end;
- procedure INLINE_HTONS(var Out_: WORD; In_: WORD);
- begin
- INLINE_WORD_FLIP(Out_, In_);
- end;
- procedure INLINE_NTOHS(var Out_: WORD; In_: WORD);
- begin
- INLINE_WORD_FLIP(Out_, In_);
- end;
- procedure INLINE_DWORD_FLIP(var Out_: DWORD; In_: DWORD);
- begin
- Out_ := ((In_ shl 8) and $00ff0000) or (In_ shl 24) or
- ((In_ shr 8) and $0000ff00) or (In_ shr 24);
- end;
- procedure INLINE_NTOHL(var Out_: DWORD; In_: DWORD);
- begin
- INLINE_DWORD_FLIP(Out_, In_);
- end;
- procedure INLINE_HTONL(var Out_: DWORD; In_: DWORD);
- begin
- INLINE_DWORD_FLIP(Out_, In_);
- end;
- procedure INLINE_WRITE_FLIPPED_WORD(pout: PWORD; In_: WORD);
- begin
- INLINE_WORD_FLIP(pout^, In_);
- end;
- procedure INLINE_WRITE_FLIPPED_DWORD(pout: PDWORD; In_: DWORD);
- begin
- INLINE_DWORD_FLIP(pout^, In_);
- end;
- function DNS_HEADER_FLAGS(pHead: PDNS_HEADER): WORD;
- begin
- Result := PWORD(Integer(pHead) + SizeOf(WORD))^;
- end;
- procedure DNS_BYTE_FLIP_HEADER_COUNTS(var pHeader: PDNS_HEADER);
- var
- _head: PDNS_HEADER;
- begin
- _head := pHeader;
- INLINE_HTONS(_head^.Xid, _head^.Xid);
- INLINE_HTONS(_head^.QuestionCount, _head^.QuestionCount);
- INLINE_HTONS(_head^.AnswerCount, _head^.AnswerCount);
- INLINE_HTONS(_head^.NameServerCount, _head^.NameServerCount);
- INLINE_HTONS(_head^.AdditionalCount, _head^.AdditionalCount);
- end;
- {
- #define DNS_QUESTION_NAME_FROM_HEADER( _pHeader_ ) \
- ( (PCHAR)( (PDNS_HEADER)(_pHeader_) + 1 ) )
- #define DNS_ANSWER_FROM_QUESTION( _pQuestion_ ) \
- ( (PCHAR)( (PDNS_QUESTION)(_pQuestion_) + 1 ) )
- }
- function IS_WORD_ALIGNED(P: Pointer): BOOL;
- begin
- Result := (Integer(P) and 1) = 0;
- end;
- function IS_DWORD_ALIGNED(P: Pointer): BOOL;
- begin
- Result := (Integer(P) and 3) = 0;
- end;
- function IS_QWORD_ALIGNED(P: Pointer): BOOL;
- begin
- Result := (Integer(P) and 7) = 0;
- end;
- function DNS_TEXT_RECORD_LENGTH(StringCount: Integer): Integer;
- begin
- Result := SizeOf(DWORD) + ((StringCount) * SizeOf(PChar));
- end;
- function DNS_NULL_RECORD_LENGTH(ByteCount: Integer): Integer;
- begin
- Result := SizeOf(DWORD) + (ByteCount);
- end;
- function DNS_WKS_RECORD_LENGTH(ByteCount: Integer): Integer;
- begin
- Result := SizeOf(DNS_WKS_DATA) + (ByteCount - 1);
- end;
- //#define DNS_WINS_RECORD_LENGTH(IpCount) \
- // (FIELD_OFFSET(DNS_WINS_DATA, WinsServers) + ((IpCount) * sizeof(IP4_ADDRESS)))
- procedure DNS_RRSET_INIT(rrset: PDnsRRSet);
- begin
- rrset^.pFirstRR := nil;
- rrset^.pLastRR := (@rrset^.pFirstRR);
- end;
- //#define DNS_RRSET_ADD( rrset, pnewRR ) \
- // { \
- // PDNS_RRSET _prrset = &(rrset); \
- // PDNS_RECORD _prrnew = (pnewRR); \
- // _prrset->pLastRR->pNext = _prrnew; \
- // _prrset->pLastRR = _prrnew; \
- // }
- procedure DNS_RRSET_TERMINATE(rrset: PDnsRRSet);
- begin
- rrset^.pLastRR^.pNext := nil;
- end;
- {$IFDEF UNICODE}
- function DnsRecordCopy(pRR: PDNS_RECORD): PDNS_RECORD;
- begin
- Result := DnsRecordCopyEx(pRR, DnsCharSetUnicode, DnsCharSetUnicode);
- end;
- function DnsRecordSetCopy(pRR: PDNS_RECORD): PDNS_RECORD;
- begin
- Result := DnsRecordSetCopyEx(pRR, DnsCharSetUnicode, DnsCharSetUnicode);
- end;
- function DnsValidateName(pszName: LPCWSTR; Format: DNS_NAME_FORMAT): DNS_STATUS;
- begin
- Result := DnsValidateName_W(pszName, Format);
- end;
- {$ELSE}
- function DnsRecordCopy(pRR: PDNS_RECORD): PDNS_RECORD;
- begin
- Result := DnsRecordCopyEx(pRR, DnsCharSetAnsi, DnsCharSetAnsi);
- end;
- function DnsRecordSetCopy(pRR: PDNS_RECORD): PDNS_RECORD;
- begin
- Result := DnsRecordSetCopyEx(pRR, DnsCharSetAnsi, DnsCharSetAnsi);
- end;
- function DnsValidateName(pszName: LPCSTR; Format: DNS_NAME_FORMAT): DNS_STATUS;
- begin
- Result := DnsValidateName_A(pszName, Format);
- end;
- {$ENDIF UNICODE}
- {$IFDEF DYNAMIC_LINK}
- var
- _DnsQueryConfig: Pointer;
- function DnsQueryConfig;
- begin
- GetProcedureAddress(_DnsQueryConfig, dnsapi, 'DnsQueryConfig');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsQueryConfig]
- end;
- end;
- var
- _DnsRecordCopyEx: Pointer;
- function DnsRecordCopyEx;
- begin
- GetProcedureAddress(_DnsRecordCopyEx, dnsapi, 'DnsRecordCopyEx');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsRecordCopyEx]
- end;
- end;
- var
- _DnsRecordSetCopyEx: Pointer;
- function DnsRecordSetCopyEx;
- begin
- GetProcedureAddress(_DnsRecordSetCopyEx, dnsapi, 'DnsRecordSetCopyEx');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsRecordSetCopyEx]
- end;
- end;
- var
- _DnsRecordCompare: Pointer;
- function DnsRecordCompare;
- begin
- GetProcedureAddress(_DnsRecordCompare, dnsapi, 'DnsRecordCompare');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsRecordCompare]
- end;
- end;
- var
- _DnsRecordSetCompare: Pointer;
- function DnsRecordSetCompare;
- begin
- GetProcedureAddress(_DnsRecordSetCompare, dnsapi, 'DnsRecordSetCompare');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsRecordSetCompare]
- end;
- end;
- var
- _DnsRecordSetDetach: Pointer;
- function DnsRecordSetDetach;
- begin
- GetProcedureAddress(_DnsRecordSetDetach, dnsapi, 'DnsRecordSetDetach');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsRecordSetDetach]
- end;
- end;
- var
- _DnsFreeRecordListDeep: Pointer;
- procedure DnsFreeRecordListDeep;
- begin
- GetProcedureAddress(_DnsFreeRecordListDeep, dnsapi, 'DnsRecordListFree');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsFreeRecordListDeep]
- end;
- end;
- var
- _DnsRecordListFree: Pointer;
- procedure DnsRecordListFree;
- begin
- GetProcedureAddress(_DnsRecordListFree, dnsapi, 'DnsRecordListFree');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsRecordListFree]
- end;
- end;
- var
- _DnsFree: Pointer;
- procedure DnsFree;
- begin
- GetProcedureAddress(_DnsFree, dnsapi, 'DnsFree');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsFree]
- end;
- end;
- var
- _DnsQuery_A: Pointer;
- function DnsQuery_A;
- begin
- GetProcedureAddress(_DnsQuery_A, dnsapi, 'DnsQuery_A');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsQuery_A]
- end;
- end;
- var
- _DnsQuery_UTF8: Pointer;
- function DnsQuery_UTF8;
- begin
- GetProcedureAddress(_DnsQuery_UTF8, dnsapi, 'DnsQuery_UTF8');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsQuery_UTF8]
- end;
- end;
- var
- _DnsQuery_W: Pointer;
- function DnsQuery_W;
- begin
- GetProcedureAddress(_DnsQuery_W, dnsapi, 'DnsQuery_W');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsQuery_W]
- end;
- end;
- var
- _DnsQuery: Pointer;
- function DnsQuery;
- begin
- GetProcedureAddress(_DnsQuery, dnsapi, 'DnsQuery_' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsQuery]
- end;
- end;
- var
- _DnsAcquireContextHandle_W: Pointer;
- function DnsAcquireContextHandle_W;
- begin
- GetProcedureAddress(_DnsAcquireContextHandle_W, dnsapi, 'DnsAcquireContextHandle_W');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsAcquireContextHandle_W]
- end;
- end;
- var
- _DnsAcquireContextHandle_A: Pointer;
- function DnsAcquireContextHandle_A;
- begin
- GetProcedureAddress(_DnsAcquireContextHandle_A, dnsapi, 'DnsAcquireContextHandle_A');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsAcquireContextHandle_A]
- end;
- end;
- var
- _DnsAcquireContextHandle: Pointer;
- function DnsAcquireContextHandle;
- begin
- GetProcedureAddress(_DnsAcquireContextHandle, dnsapi, 'DnsAcquireContextHandle_' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsAcquireContextHandle]
- end;
- end;
- var
- _DnsReleaseContextHandle: Pointer;
- procedure DnsReleaseContextHandle;
- begin
- GetProcedureAddress(_DnsReleaseContextHandle, dnsapi, 'DnsReleaseContextHandle');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsReleaseContextHandle]
- end;
- end;
- var
- _DnsModifyRecordsInSet_W: Pointer;
- function DnsModifyRecordsInSet_W;
- begin
- GetProcedureAddress(_DnsModifyRecordsInSet_W, dnsapi, 'DnsModifyRecordsInSet_W');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsModifyRecordsInSet_W]
- end;
- end;
- var
- _DnsModifyRecordsInSet_A: Pointer;
- function DnsModifyRecordsInSet_A;
- begin
- GetProcedureAddress(_DnsModifyRecordsInSet_A, dnsapi, 'DnsModifyRecordsInSet_A');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsModifyRecordsInSet_A]
- end;
- end;
- var
- _DnsModifyRecordsInSet_UTF8: Pointer;
- function DnsModifyRecordsInSet_UTF8;
- begin
- GetProcedureAddress(_DnsModifyRecordsInSet_UTF8, dnsapi, 'DnsModifyRecordsInSet_UTF8');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsModifyRecordsInSet_UTF8]
- end;
- end;
- var
- _DnsModifyRecordsInSet: Pointer;
- function DnsModifyRecordsInSet;
- begin
- GetProcedureAddress(_DnsModifyRecordsInSet, dnsapi, 'DnsModifyRecordsInSet_' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsModifyRecordsInSet]
- end;
- end;
- var
- _DnsReplaceRecordSetW: Pointer;
- function DnsReplaceRecordSetW;
- begin
- GetProcedureAddress(_DnsReplaceRecordSetW, dnsapi, 'DnsReplaceRecordSetW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsReplaceRecordSetW]
- end;
- end;
- var
- _DnsReplaceRecordSetA: Pointer;
- function DnsReplaceRecordSetA;
- begin
- GetProcedureAddress(_DnsReplaceRecordSetA, dnsapi, 'DnsReplaceRecordSetA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsReplaceRecordSetA]
- end;
- end;
- var
- _DnsReplaceRecordSetUTF8: Pointer;
- function DnsReplaceRecordSetUTF8;
- begin
- GetProcedureAddress(_DnsReplaceRecordSetUTF8, dnsapi, 'DnsReplaceRecordSetUTF8');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsReplaceRecordSetUTF8]
- end;
- end;
- var
- _DnsReplaceRecordSet: Pointer;
- function DnsReplaceRecordSet;
- begin
- GetProcedureAddress(_DnsReplaceRecordSet, dnsapi, 'DnsReplaceRecordSet' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsReplaceRecordSet]
- end;
- end;
- var
- _DnsValidateName_UTF8: Pointer;
- function DnsValidateName_UTF8;
- begin
- GetProcedureAddress(_DnsValidateName_UTF8, dnsapi, 'DnsValidateName_UTF8');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsValidateName_UTF8]
- end;
- end;
- var
- _DnsValidateName_W: Pointer;
- function DnsValidateName_W;
- begin
- GetProcedureAddress(_DnsValidateName_W, dnsapi, 'DnsValidateName_W');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsValidateName_W]
- end;
- end;
- var
- _DnsValidateName_A: Pointer;
- function DnsValidateName_A;
- begin
- GetProcedureAddress(_DnsValidateName_A, dnsapi, 'DnsValidateName_A');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsValidateName_A]
- end;
- end;
- var
- _DnsNameCompare_A: Pointer;
- function DnsNameCompare_A;
- begin
- GetProcedureAddress(_DnsNameCompare_A, dnsapi, 'DnsNameCompare_A');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsNameCompare_A]
- end;
- end;
- var
- _DnsNameCompare_W: Pointer;
- function DnsNameCompare_W;
- begin
- GetProcedureAddress(_DnsNameCompare_W, dnsapi, 'DnsNameCompare_W');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsNameCompare_W]
- end;
- end;
- var
- _DnsNameCompare: Pointer;
- function DnsNameCompare;
- begin
- GetProcedureAddress(_DnsNameCompare, dnsapi, 'DnsNameCompare_' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsNameCompare]
- end;
- end;
- var
- _DnsWriteQuestionToBuffer_W: Pointer;
- function DnsWriteQuestionToBuffer_W;
- begin
- GetProcedureAddress(_DnsWriteQuestionToBuffer_W, dnsapi, 'DnsWriteQuestionToBuffer_W');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsWriteQuestionToBuffer_W]
- end;
- end;
- var
- _DnsWriteQuestionToBuffer_UTF8: Pointer;
- function DnsWriteQuestionToBuffer_UTF8;
- begin
- GetProcedureAddress(_DnsWriteQuestionToBuffer_UTF8, dnsapi, 'DnsWriteQuestionToBuffer_UTF8');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsWriteQuestionToBuffer_UTF8]
- end;
- end;
- var
- _DnsExtractRecordsFromMessage_W: Pointer;
- function DnsExtractRecordsFromMessage_W;
- begin
- GetProcedureAddress(_DnsExtractRecordsFromMessage_W, dnsapi, 'DnsExtractRecordsFromMessage_W');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsExtractRecordsFromMessage_W]
- end;
- end;
- var
- _DnsExtractRecFromMessage_UTF8: Pointer;
- function DnsExtractRecordsFromMessage_UTF8;
- begin
- GetProcedureAddress(_DnsExtractRecFromMessage_UTF8, dnsapi, 'DnsExtractRecordsFromMessage_UTF8');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DnsExtractRecFromMessage_UTF8]
- end;
- end;
- {$ELSE}
- function DnsQueryConfig; external dnsapi name 'DnsQueryConfig';
- function DnsRecordCopyEx; external dnsapi name 'DnsRecordCopyEx';
- function DnsRecordSetCopyEx; external dnsapi name 'DnsRecordSetCopyEx';
- function DnsRecordCompare; external dnsapi name 'DnsRecordCompare';
- function DnsRecordSetCompare; external dnsapi name 'DnsRecordSetCompare';
- function DnsRecordSetDetach; external dnsapi name 'DnsRecordSetDetach';
- procedure DnsFreeRecordListDeep; external dnsapi name 'DnsRecordListFree';
- procedure DnsRecordListFree; external dnsapi name 'DnsRecordListFree';
- procedure DnsFree; external dnsapi name 'DnsFree';
- function DnsQuery_A; external dnsapi name 'DnsQuery_A';
- function DnsQuery_UTF8; external dnsapi name 'DnsQuery_UTF8';
- function DnsQuery_W; external dnsapi name 'DnsQuery_W';
- function DnsQuery; external dnsapi name 'DnsQuery_' + AWSuffix;
- function DnsAcquireContextHandle_W; external dnsapi name 'DnsAcquireContextHandle_W';
- function DnsAcquireContextHandle_A; external dnsapi name 'DnsAcquireContextHandle_A';
- function DnsAcquireContextHandle; external dnsapi name 'DnsAcquireContextHandle_' + AWSuffix;
- procedure DnsReleaseContextHandle; external dnsapi name 'DnsReleaseContextHandle';
- function DnsModifyRecordsInSet_W; external dnsapi name 'DnsModifyRecordsInSet_W';
- function DnsModifyRecordsInSet_A; external dnsapi name 'DnsModifyRecordsInSet_A';
- function DnsModifyRecordsInSet_UTF8; external dnsapi name 'DnsModifyRecordsInSet_UTF8';
- function DnsModifyRecordsInSet; external dnsapi name 'DnsModifyRecordsInSet_' + AWSuffix;
- function DnsReplaceRecordSetW; external dnsapi name 'DnsReplaceRecordSetW';
- function DnsReplaceRecordSetA; external dnsapi name 'DnsReplaceRecordSetA';
- function DnsReplaceRecordSetUTF8; external dnsapi name 'DnsReplaceRecordSetUTF8';
- function DnsReplaceRecordSet; external dnsapi name 'DnsReplaceRecordSet' + AWSuffix;
- function DnsValidateName_UTF8; external dnsapi name 'DnsValidateName_UTF8';
- function DnsValidateName_W; external dnsapi name 'DnsValidateName_W';
- function DnsValidateName_A; external dnsapi name 'DnsValidateName_A';
- function DnsNameCompare_A; external dnsapi name 'DnsNameCompare_A';
- function DnsNameCompare_W; external dnsapi name 'DnsNameCompare_W';
- function DnsNameCompare; external dnsapi name 'DnsNameCompare_' + AWSuffix;
- function DnsWriteQuestionToBuffer_W; external dnsapi name 'DnsWriteQuestionToBuffer_W';
- function DnsWriteQuestionToBuffer_UTF8; external dnsapi name 'DnsWriteQuestionToBuffer_UTF8';
- function DnsExtractRecordsFromMessage_W; external dnsapi name 'DnsExtractRecordsFromMessage_W';
- function DnsExtractRecordsFromMessage_UTF8; external dnsapi name 'DnsExtractRecordsFromMessage_UTF8';
- {$ENDIF DYNAMIC_LINK}
- end.
|