123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475 |
- {******************************************************************************}
- { }
- { 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 }
- { }
- {******************************************************************************}
- // $Id: JwaWinDNS.pas,v 1.10 2005/09/06 16:36:50 marquardt Exp $
- {******************************************************************}
- { 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, JwaWindows, 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
- uses
- JwaWinDLLNames;
- 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.
|