home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / windns.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  10KB  |  368 lines

  1. #ifndef _WINDNS_H
  2. #define _WINDNS_H
  3. #if __GNUC__ >= 3
  4. #pragma GCC system_header
  5. #endif
  6.  
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10.  
  11. #define DNS_QUERY_STANDARD 0x0
  12. #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x1
  13. #define DNS_QUERY_USE_TCP_ONLY 0x2
  14. #define DNS_QUERY_NO_RECURSION 0x4
  15. #define DNS_QUERY_BYPASS_CACHE 0x8
  16. #define DNS_QUERY_NO_WIRE_QUERY    0x10
  17. #define DNS_QUERY_NO_LOCAL_NAME 0x20
  18. #define DNS_QUERY_NO_HOSTS_FILE 0x40
  19. #define DNS_QUERY_NO_NETBT 0x80
  20. #define DNS_QUERY_TREAT_AS_FQDN 0x1000
  21. #define DNS_QUERY_WIRE_ONLY 0x100
  22. #define DNS_QUERY_RETURN_MESSAGE 0x200
  23. #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x100000
  24. #define DNS_QUERY_RESERVED 0xff000000
  25.  
  26. #define DNS_UPDATE_SECURITY_USE_DEFAULT    0x0
  27. #define DNS_UPDATE_SECURITY_OFF 0x10
  28. #define DNS_UPDATE_SECURITY_ON 0x20
  29. #define DNS_UPDATE_SECURITY_ONLY 0x100
  30. #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x200
  31. #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x400
  32. #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x800
  33. #define DNS_UPDATE_RESERVED 0xffff0000
  34.  
  35. #ifndef RC_INVOKE
  36. typedef DWORD IP4_ADDRESS;
  37. typedef DWORD DNS_STATUS;
  38. enum {
  39.     DNS_TYPE_A=1,
  40.     DNS_TYPE_NS,
  41.     DNS_TYPE_MD,
  42.     DNS_TYPE_MF,
  43.     DNS_TYPE_CNAME,
  44.     DNS_TYPE_SOA,
  45.     DNS_TYPE_MB,
  46.     DNS_TYPE_MG,
  47.     DNS_TYPE_MR,
  48.     DNS_TYPE_NULL,
  49.     DNS_TYPE_WKS,
  50.     DNS_TYPE_PTR,
  51.     DNS_TYPE_HINFO,
  52.     DNS_TYPE_MINFO,
  53.     DNS_TYPE_MX,
  54.     DNS_TYPE_TEXT
  55. };
  56. typedef enum _DNS_CHARSET
  57. {
  58.     DnsCharSetUnknown, 
  59.     DnsCharSetUnicode, 
  60.     DnsCharSetUtf8, 
  61.     DnsCharSetAnsi
  62. } DNS_CHARSET;
  63. typedef enum 
  64. {
  65.     DnsConfigPrimaryDomainName_W, 
  66.     DnsConfigPrimaryDomainName_A, 
  67.     DnsConfigPrimaryDomainName_UTF8, 
  68.     DnsConfigAdapterDomainName_W, 
  69.     DnsConfigAdapterDomainName_A, 
  70.     DnsConfigAdapterDomainName_UTF8, 
  71.     DnsConfigDnsServerList, 
  72.     DnsConfigSearchList, 
  73.     DnsConfigAdapterInfo, 
  74.     DnsConfigPrimaryHostNameRegistrationEnabled, 
  75.     DnsConfigAdapterHostNameRegistrationEnabled, 
  76.     DnsConfigAddressRegistrationMaxCount, 
  77.     DnsConfigHostName_W, 
  78.     DnsConfigHostName_A, 
  79.     DnsConfigHostName_UTF8, 
  80.     DnsConfigFullHostName_W, 
  81.     DnsConfigFullHostName_A, 
  82.     DnsConfigFullHostName_UTF8
  83. } DNS_CONFIG_TYPE;
  84. typedef enum 
  85. {
  86.     DnsFreeFlat = 0, 
  87.     DnsFreeRecordList, 
  88.     DnsFreeParsedMessageFields
  89. } DNS_FREE_TYPE;
  90. typedef enum _DNS_NAME_FORMAT
  91. {
  92.     DnsNameDomain, 
  93.     DnsNameDomainLabel, 
  94.     DnsNameHostnameFull, 
  95.     DnsNameHostnameLabel, 
  96.     DnsNameWildcard, 
  97.     DnsNameSrvRecord
  98. } DNS_NAME_FORMAT;
  99. typedef enum 
  100. {
  101.     DnsSectionQuestion, 
  102.     DnsSectionAnswer, 
  103.     DnsSectionAuthority, 
  104.     DnsSectionAdditional
  105. } DNS_SECTION;
  106. typedef struct _IP4_ARRAY {
  107.     DWORD AddrCount;
  108.     IP4_ADDRESS AddrArray[1];
  109. } IP4_ARRAY, *PIP4_ARRAY;
  110. typedef struct {
  111.     DWORD IP6Dword[4];
  112. } IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
  113. typedef struct _DNS_HEADER {
  114.     WORD Xid;
  115.     BYTE RecursionDesired;
  116.     BYTE Truncation;
  117.     BYTE Authoritative;
  118.     BYTE Opcode;
  119.     BYTE IsResponse;
  120.     BYTE ResponseCode;
  121.     BYTE Reserved;
  122.     BYTE RecursionAvailable;
  123.     WORD QuestionCount;
  124.     WORD AnswerCount;
  125.     WORD NameServerCount;
  126.     WORD AdditionalCount;
  127. } DNS_HEADER, *PDNS_HEADER;
  128. typedef struct _DNS_MESSAGE_BUFFER {
  129.     DNS_HEADER MessageHead;
  130.     CHAR MessageBody[1];
  131. } DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
  132. typedef struct _DnsRecordFlags {
  133.     DWORD Section    :2;
  134.     DWORD Delete    :1;
  135.     DWORD CharSet    :2;
  136.     DWORD Unused    :3;
  137.     DWORD Reserved    :24;
  138. } DNS_RECORD_FLAGS;
  139. #define DNSREC_QUESTION 0
  140. #define DNSREC_ANSWER 1
  141. #define DNSREC_AUTHORITY 2
  142. #define DNSREC_ADDITIONAL 3
  143. typedef struct {
  144.     IP4_ADDRESS IpAddress;
  145. } DNS_A_DATA, *PDNS_A_DATA;
  146. typedef struct {
  147.     DNS_IP6_ADDRESS Ip6Address;
  148. } DNS_AAAA_DATA, *PDNS_AAAA_DATA;
  149. #define DNS_ATMA_MAX_ADDR_LENGTH 20
  150. typedef struct {
  151.     BYTE AddressType;
  152.     BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
  153. } DNS_ATMA_DATA, *PDNS_ATMA_DATA;
  154. typedef struct {
  155.     WORD wFlags;
  156.     BYTE chProtocol;
  157.     BYTE chAlgorithm;
  158.     BYTE Key[1];
  159. } DNS_KEY_DATA, *PDNS_KEY_DATA;
  160. typedef struct {
  161.     WORD wVersion;
  162.     WORD wSize;
  163.     WORD wHorPrec;
  164.     WORD wVerPrec;
  165.     DWORD dwLatitude;
  166.     DWORD dwLongitude;
  167.     DWORD dwAltitude;
  168. } DNS_LOC_DATA, *PDNS_LOC_DATA;
  169. typedef struct {
  170.     LPTSTR pNameMailbox;
  171.     LPTSTR pNameErrorsMailbox;
  172. } DNS_MINFO_DATA, *PDNS_MINFO_DATA;
  173. typedef struct {
  174.     LPTSTR pNameExchange;
  175.     WORD wPreference;
  176.     WORD Pad;
  177. } DNS_MX_DATA, *PDNS_MX_DATA;
  178. typedef struct {
  179.     DWORD dwByteCount;
  180.     BYTE Data[1];
  181. } DNS_NULL_DATA, *PDNS_NULL_DATA;
  182. typedef struct {
  183.     LPTSTR pNameNext;
  184.     WORD wNumTypes;
  185.     WORD wTypes[1];
  186. } DNS_NXT_DATA, *PDNS_NXT_DATA;
  187. typedef struct {
  188.     LPTSTR pNameHost;
  189. } DNS_PTR_DATA, *PDNS_PTR_DATA;
  190. typedef struct {
  191.     LPTSTR pNameSigner;
  192.     WORD wTypeCovered;
  193.     BYTE chAlgorithm;
  194.     BYTE chLabelCount;
  195.     DWORD dwOriginalTtl;
  196.     DWORD dwExpiration;
  197.     DWORD dwTimeSigned;
  198.     WORD wKeyTag;
  199.     WORD Pad;
  200.     BYTE Signature[1];
  201. } DNS_SIG_DATA, *PDNS_SIG_DATA;
  202. typedef struct {
  203.     LPTSTR pNamePrimaryServer;
  204.     LPTSTR pNameAdministrator;
  205.     DWORD dwSerialNo;
  206.     DWORD dwRefresh;
  207.     DWORD dwRetry;
  208.     DWORD dwExpire;
  209.     DWORD dwDefaultTtl;
  210. } DNS_SOA_DATA, *PDNS_SOA_DATA;
  211. typedef struct {
  212.     LPTSTR pNameTarget;
  213.     WORD wPriority;
  214.     WORD wWeight;
  215.     WORD wPort;
  216.     WORD Pad;
  217. } DNS_SRV_DATA, *PDNS_SRV_DATA;
  218. typedef struct {
  219.     DWORD dwStringCount;
  220.     LPTSTR pStringArray[1];
  221. } DNS_TXT_DATA, *PDNS_TXT_DATA;
  222. typedef struct {
  223.     LPTSTR pNameAlgorithm;
  224.     PBYTE pAlgorithmPacket;
  225.     PBYTE pKey;
  226.     PBYTE pOtherData;
  227.     DWORD dwCreateTime;
  228.     DWORD dwExpireTime;
  229.     WORD wMode;
  230.     WORD wError;
  231.     WORD wKeyLength;
  232.     WORD wOtherLength;
  233.     UCHAR cAlgNameLength;
  234.     BOOL bPacketPointers;
  235. } DNS_TKEY_DATA, *PDNS_TKEY_DATA;
  236. typedef struct {
  237.     LPTSTR pNameAlgorithm;
  238.     PBYTE pAlgorithmPacket;
  239.     PBYTE pSignature;
  240.     PBYTE pOtherData;
  241.     LONGLONG i64CreateTime;
  242.     WORD wFudgeTime;
  243.     WORD wOriginalXid;
  244.     WORD wError;
  245.     WORD wSigLength;
  246.     WORD wOtherLength;
  247.     UCHAR cAlgNameLength;
  248.     BOOL bPacketPointers;
  249. } DNS_TSIG_DATA, *PDNS_TSIG_DATA;
  250. typedef struct {
  251.     DWORD dwMappingFlag;
  252.     DWORD dwLookupTimeout;
  253.     DWORD dwCacheTimeout;
  254.     DWORD cWinsServerCount;
  255.     IP4_ADDRESS WinsServers[1];
  256. } DNS_WINS_DATA, *PDNS_WINS_DATA;
  257. typedef struct {
  258.     DWORD dwMappingFlag;
  259.     DWORD dwLookupTimeout;
  260.     DWORD dwCacheTimeout;
  261.     LPTSTR pNameResultDomain;
  262. } DNS_WINSR_DATA, *PDNS_WINSR_DATA;
  263. typedef struct _DNS_WIRE_QUESTION {
  264.     WORD QuestionType;
  265.     WORD QuestionClass;
  266. } DNS_WIRE_QUESTION, *PDNS_WIRE_QUESTION;
  267. typedef struct _DNS_WIRE_RECORD {
  268.     WORD RecordType;
  269.     WORD RecordClass;
  270.     DWORD TimeToLive;
  271.     WORD DataLength;
  272. } DNS_WIRE_RECORD, *PDNS_WIRE_RECORD;
  273. typedef struct {
  274.     IP4_ADDRESS IpAddress;
  275.     UCHAR chProtocol;
  276.     BYTE BitMask[1];
  277. } DNS_WKS_DATA, *PDNS_WKS_DATA;
  278. typedef struct _DnsRecord {
  279.     struct _DnsRecord* pNext;
  280.     LPTSTR pName;
  281.     WORD wType;
  282.     WORD wDataLength;
  283.     union {
  284.         DWORD DW;
  285.         DNS_RECORD_FLAGS S;
  286.     } Flags;
  287.     DWORD dwTtl;
  288.     DWORD dwReserved;
  289.     union {
  290.         DNS_A_DATA A;
  291.         DNS_SOA_DATA SOA, Soa;
  292.         DNS_PTR_DATA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb,
  293.                  MD, Md, MF, Mf, MG, Mg, MR, Mr;
  294.         DNS_MINFO_DATA MINFO, Minfo, RP, Rp;
  295.         DNS_MX_DATA MX, Mx, AFSDB, Afsdb, RT, Rt;
  296.         DNS_TXT_DATA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
  297.         DNS_NULL_DATA Null;
  298.         DNS_WKS_DATA WKS, Wks;
  299.         DNS_AAAA_DATA AAAA;
  300.         DNS_KEY_DATA KEY, Key;
  301.         DNS_SIG_DATA SIG, Sig;
  302.         DNS_ATMA_DATA ATMA, Atma;
  303.         DNS_NXT_DATA NXT, Nxt;
  304.         DNS_SRV_DATA SRV, Srv;
  305.         DNS_TKEY_DATA TKEY, Tkey;
  306.         DNS_TSIG_DATA TSIG, Tsig;
  307.         DNS_WINS_DATA WINS, Wins;
  308.         DNS_WINSR_DATA WINSR, WinsR, NBSTAT, Nbstat;
  309.     } Data;
  310. } DNS_RECORD, *PDNS_RECORD;
  311. typedef struct _DnsRRSet {
  312.     PDNS_RECORD pFirstRR;
  313.     PDNS_RECORD pLastRR;
  314. } DNS_RRSET, *PDNS_RRSET;
  315.  
  316. DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,HANDLE*);
  317. DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,HANDLE*);
  318. DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
  319. DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
  320. DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
  321. DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
  322. DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
  323. BOOL WINAPI DnsNameCompare_A(LPSTR,LPSTR);
  324. BOOL WINAPI DnsNameCompare_W(LPWSTR,LPWSTR);
  325. DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
  326. DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
  327. DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
  328. DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PWSTR,PVOID,PVOID,PDWORD);
  329. BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
  330. PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
  331. void WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
  332. BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
  333. PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
  334. PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
  335. void WINAPI DnsReleaseContextHandle(HANDLE);
  336. DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
  337. DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
  338. DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
  339. DNS_STATUS WINAPI DnsValidateName_A(LPCSTR,DNS_NAME_FORMAT);
  340. DNS_STATUS WINAPI DnsValidateName_W(LPCWSTR, DNS_NAME_FORMAT);
  341. DNS_STATUS WINAPI DnsValidateName_UTF8(LPCSTR,DNS_NAME_FORMAT);
  342. BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,LPDWORD,LPWSTR,WORD,WORD,BOOL);
  343. BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,LPDWORD,LPSTR,WORD,WORD,BOOL);
  344.  
  345. #ifdef UNICODE
  346. #define DnsAcquireContextHandle DnsAcquireContextHandle_W
  347. #define DnsModifyRecordsInSet DnsModifyRecordsInSet_W
  348. #define DnsNameCompare DnsNameCompare_W
  349. #define DnsQuery DnsQuery_W
  350. #define DnsReplaceRecordSet DnsReplaceRecordSetW
  351. #define DnsValidateName DnsValidateName_W
  352. #else
  353. #define DnsAcquireContextHandle DnsAcquireContextHandle_A
  354. #define DnsModifyRecordsInSet DnsModifyRecordsInSet_A
  355. #define DnsNameCompare DnsNameCompare_A
  356. #define DnsQuery DnsQuery_A
  357. #define DnsReplaceRecordSet DnsReplaceRecordSetA
  358. #define DnsValidateName DnsValidateName_A
  359. #endif
  360.  
  361. #endif /* RC_INVOKED */
  362.  
  363. #ifdef __cplusplus
  364. }
  365. #endif
  366.  
  367. #endif /* _WINDNS_H */
  368.