217 lines
4.8 KiB
C
217 lines
4.8 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1996-2001 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
local.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Domain Name System (DNS)
|
|||
|
|
|||
|
DNS Library local include file
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Jim Gilroy December 1996
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
#ifndef _DNSLIB_LOCAL_INCLUDED_
|
|||
|
#define _DNSLIB_LOCAL_INCLUDED_
|
|||
|
|
|||
|
|
|||
|
//#pragma warning(disable:4214)
|
|||
|
//#pragma warning(disable:4514)
|
|||
|
//#pragma warning(disable:4152)
|
|||
|
|
|||
|
#include <nt.h>
|
|||
|
#include <ntrtl.h>
|
|||
|
#include <nturtl.h>
|
|||
|
#include <windows.h>
|
|||
|
#include <winsock2.h>
|
|||
|
#include <ws2tcpip.h>
|
|||
|
#include <basetyps.h>
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <limits.h>
|
|||
|
//#include <tchar.h>
|
|||
|
#include <align.h> // Alignment macros
|
|||
|
|
|||
|
#include <windns.h> // Public DNS definitions
|
|||
|
|
|||
|
#define NO_DNSAPI_DLL
|
|||
|
//#define DNSLIB_SECURITY
|
|||
|
#define DNSAPI_INTERNAL
|
|||
|
#include "..\..\resolver\idl\resrpc.h"
|
|||
|
#include "dnslibp.h" // Private DNS definitions
|
|||
|
#include "..\dnsapi\dnsapip.h"
|
|||
|
|
|||
|
#include "message.h"
|
|||
|
//#include "..\dnsapi\registry.h"
|
|||
|
//#include "rtlstuff.h" // Handy macros from NT RTL
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Use winsock2
|
|||
|
//
|
|||
|
|
|||
|
#define DNS_WINSOCK_VERSION (0x0202) // Winsock 2.2
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Debugging
|
|||
|
//
|
|||
|
|
|||
|
#define DNS_LOG_EVENT(a,b,c,d)
|
|||
|
|
|||
|
|
|||
|
// use DNS_ASSERT for dnslib debugging
|
|||
|
|
|||
|
#undef ASSERT
|
|||
|
#define ASSERT(expr) DNS_ASSERT(expr)
|
|||
|
|
|||
|
//
|
|||
|
// Single async socket for internal use
|
|||
|
//
|
|||
|
// If want async socket i/o then can create single async socket, with
|
|||
|
// corresponding event and always use it. Requires winsock 2.2
|
|||
|
//
|
|||
|
|
|||
|
extern SOCKET DnsSocket;
|
|||
|
extern OVERLAPPED DnsSocketOverlapped;
|
|||
|
extern HANDLE hDnsSocketEvent;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// App shutdown flag
|
|||
|
//
|
|||
|
|
|||
|
extern BOOLEAN fApplicationShutdown;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Heap operations
|
|||
|
//
|
|||
|
|
|||
|
#define ALLOCATE_HEAP(size) Dns_AllocZero( size )
|
|||
|
#define REALLOCATE_HEAP(p,size) Dns_Realloc( (p), (size) )
|
|||
|
#define FREE_HEAP(p) Dns_Free( p )
|
|||
|
#define ALLOCATE_HEAP_ZERO(size) Dns_AllocZero( size )
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// RPC Exception filters
|
|||
|
//
|
|||
|
|
|||
|
#define DNS_RPC_EXCEPTION_FILTER \
|
|||
|
(((RpcExceptionCode() != STATUS_ACCESS_VIOLATION) && \
|
|||
|
(RpcExceptionCode() != STATUS_DATATYPE_MISALIGNMENT) && \
|
|||
|
(RpcExceptionCode() != STATUS_PRIVILEGED_INSTRUCTION) && \
|
|||
|
(RpcExceptionCode() != STATUS_ILLEGAL_INSTRUCTION)) \
|
|||
|
? 0x1 : EXCEPTION_CONTINUE_SEARCH )
|
|||
|
|
|||
|
// Not defined (RpcExceptionCode() != STATUS_POSSIBLE_DEADLOCK) && \
|
|||
|
// Not defined (RpcExceptionCode() != STATUS_INSTRUCTION_MISALIGNMENT) && \
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Table lookup.
|
|||
|
//
|
|||
|
// Many DNS Records have human readable mnemonics for given data values.
|
|||
|
// These are used for data file formats, and display in nslookup or debug
|
|||
|
// output or cmdline tools.
|
|||
|
//
|
|||
|
// To simplify this process, have a single mapping functionality that
|
|||
|
// supports DWORD \ LPSTR mapping tables. Tables for indivual types
|
|||
|
// may then be layered on top of this.
|
|||
|
//
|
|||
|
// Support two table types.
|
|||
|
// VALUE_TABLE_ENTRY is simple value-string mapping
|
|||
|
// FLAG_TABLE_ENTRY is designed for bit field flag mappings where
|
|||
|
// several flag strings might be contained in flag; this table
|
|||
|
// contains additional mask field to allow multi-bit fields
|
|||
|
// within the flag
|
|||
|
//
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
DWORD dwValue; // flag value
|
|||
|
PCHAR pszString; // string representation of value
|
|||
|
}
|
|||
|
DNS_VALUE_TABLE_ENTRY, *PDNS_VALUE_TABLE;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
DWORD dwFlag; // flag value
|
|||
|
DWORD dwMask; // flag value mask
|
|||
|
PCHAR pszString; // string representation of value
|
|||
|
}
|
|||
|
DNS_FLAG_TABLE_ENTRY, *PDNS_FLAG_TABLE;
|
|||
|
|
|||
|
|
|||
|
// Error return on unmatched string
|
|||
|
|
|||
|
#define DNS_TABLE_LOOKUP_ERROR (-1)
|
|||
|
|
|||
|
|
|||
|
DWORD
|
|||
|
Dns_ValueForString(
|
|||
|
IN PDNS_VALUE_TABLE Table,
|
|||
|
IN BOOL fIgnoreCase,
|
|||
|
IN PCHAR pchName,
|
|||
|
IN INT cchNameLength
|
|||
|
);
|
|||
|
|
|||
|
PCHAR
|
|||
|
Dns_GetStringForValue(
|
|||
|
IN PDNS_VALUE_TABLE Table,
|
|||
|
IN DWORD dwValue
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
DnsPrint_ValueTable(
|
|||
|
IN PRINT_ROUTINE PrintRoutine,
|
|||
|
IN PPRINT_CONTEXT pPrintContext,
|
|||
|
IN LPSTR pszHeader,
|
|||
|
IN PDNS_VALUE_TABLE Table
|
|||
|
);
|
|||
|
|
|||
|
DWORD
|
|||
|
Dns_FlagForString(
|
|||
|
IN PDNS_FLAG_TABLE Table,
|
|||
|
IN BOOL fIgnoreCase,
|
|||
|
IN PCHAR pchName,
|
|||
|
IN INT cchNameLength
|
|||
|
);
|
|||
|
|
|||
|
PCHAR
|
|||
|
Dns_WriteStringsForFlag(
|
|||
|
IN PDNS_FLAG_TABLE Table,
|
|||
|
IN DWORD dwFlag,
|
|||
|
IN OUT PCHAR pchFlag
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Random -- back to dnslib.h when it goes private again
|
|||
|
//
|
|||
|
// DCR: return these to dnslib.h when private
|
|||
|
//
|
|||
|
|
|||
|
PCHAR
|
|||
|
Dns_ParsePacketRecord(
|
|||
|
IN PCHAR pchPacket,
|
|||
|
IN PCHAR pchMsgEnd,
|
|||
|
IN OUT PDNS_PARSED_RR pParsedRR
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
#endif // _DNSLIB_LOCAL_INCLUDED_
|