862 lines
16 KiB
C
862 lines
16 KiB
C
/*++
|
|
|
|
Copyright (c) 2000-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
local.h
|
|
|
|
Abstract:
|
|
|
|
DNS Resolver.
|
|
|
|
DNS Resolver service local include file.
|
|
|
|
Author:
|
|
|
|
Jim Gilroy (jamesg) March 2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _LOCAL_INCLUDED_
|
|
#define _LOCAL_INCLUDED_
|
|
|
|
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#ifndef _WINSOCK2API_
|
|
#include <winsock2.h>
|
|
#endif
|
|
#include <sockreg.h>
|
|
#include <windns.h>
|
|
#include <netevent.h> // DNS events
|
|
|
|
#define DNS_NEW_DEFS 1 // QFE builds use new definitions
|
|
|
|
#include "dnsrslvr.h"
|
|
#include <dnslibp.h>
|
|
#include "registry.h"
|
|
#include "dnsapip.h"
|
|
|
|
#define ENABLE_DEBUG_LOGGING 1
|
|
#include "logit.h"
|
|
#include "dnsmsg.h"
|
|
#include "heapdbg.h"
|
|
|
|
|
|
//
|
|
// Resolver debug flags
|
|
//
|
|
|
|
#define DNS_DBG_CACHE DNS_DBG_QUERY
|
|
|
|
|
|
//
|
|
// Cache definitions
|
|
//
|
|
|
|
#define NO_LOCK 0
|
|
#define LOCKED 1
|
|
|
|
#define ONE_YEAR_IN_SECONDS 60*60*24*365
|
|
|
|
|
|
//
|
|
// Bypassing cache completely check
|
|
//
|
|
|
|
#define COMBINED_BYPASS_CACHE_FLAG (DNS_QUERY_BYPASS_CACHE | DNS_QUERY_NO_HOSTS_FILE)
|
|
|
|
#define SKIP_CACHE_LOOKUP(Flags) \
|
|
( ((Flags) & COMBINED_BYPASS_CACHE_FLAG) == COMBINED_BYPASS_CACHE_FLAG )
|
|
|
|
|
|
//
|
|
// Cache defintion
|
|
//
|
|
// Should be private to cache but is currently
|
|
// exposed in enum routines
|
|
//
|
|
|
|
typedef struct _CacheEntry
|
|
{
|
|
struct _CacheEntry * pNext;
|
|
PWSTR pName;
|
|
DWORD Reserved;
|
|
DWORD MaxCount;
|
|
PDNS_RECORD Records[ 1 ];
|
|
}
|
|
CACHE_ENTRY, *PCACHE_ENTRY;
|
|
|
|
|
|
//
|
|
// Socket context
|
|
//
|
|
|
|
typedef struct _SocketContext
|
|
{
|
|
struct _SocketContext * pNext;
|
|
SOCKET Socket;
|
|
IP_ADDRESS IpAddress;
|
|
OVERLAPPED Overlapped;
|
|
PDNS_MSG_BUF pMsg;
|
|
}
|
|
SOCKET_CONTEXT, * PSOCKET_CONTEXT;
|
|
|
|
|
|
#if 1
|
|
//
|
|
// Config
|
|
//
|
|
// Saved NT5 registry stuff.
|
|
// In typical fashsion this was packed away in a few different places.
|
|
// Keeping around until all of this is properly put to bed.
|
|
//
|
|
//
|
|
// Registry value routine prototypes
|
|
//
|
|
#define DNS_DEFAULT_HASH_TABLE_SIZE 211 // A prime number
|
|
#define DNS_DEFAULT_NEGATIVE_SOA_CACHE_TIME 10 // 10 seconds
|
|
#define DNS_DEFAULT_NET_FAILURE_CACHE_TIME 30 // 30 seconds
|
|
#define DNS_DEFAULT_ADAPTER_TIMEOUT_CACHE_TIME 2*60 // 2 minutes
|
|
#define DNS_DEFAULT_MESSAGE_POPUP_LIMIT 0 // Don't allow!
|
|
#define DNS_DEFAULT_MAX_SOA_TTL_LIMIT 5*60 // 5 minutes
|
|
#define DNS_DEFAULT_RESET_SERVER_PRIORITIES_TIME 5*60 // 5 minutes
|
|
#endif
|
|
|
|
|
|
//
|
|
// Event tags
|
|
// Make recognizable DWORD tags for in memory log.
|
|
//
|
|
|
|
#define FOUR_CHARACTER_CONSTANT(a,b,c,d) \
|
|
((((DWORD)d) << 24) + (((DWORD)c) << 16) + (((DWORD)b) << 8) + ((DWORD)a))
|
|
|
|
#define RES_EVENT_INITNET_START FOUR_CHARACTER_CONSTANT('N','e','t','+')
|
|
#define RES_EVENT_INITNET_END FOUR_CHARACTER_CONSTANT('N','e','t','-')
|
|
#define RES_EVENT_INITCACHE FOUR_CHARACTER_CONSTANT('C','a','c','+')
|
|
#define RES_EVENT_REGISTER_SCH FOUR_CHARACTER_CONSTANT('S','c','h','+')
|
|
#define RES_EVENT_CREATEEVENT FOUR_CHARACTER_CONSTANT('E','v','t','+')
|
|
#define RES_EVENT_STARTRPC FOUR_CHARACTER_CONSTANT('R','p','c','+')
|
|
#define RES_EVENT_STOPRPC FOUR_CHARACTER_CONSTANT('R','p','c','-')
|
|
#define RES_EVENT_STATUS FOUR_CHARACTER_CONSTANT('s','t','a','t')
|
|
#define RES_EVENT_SCH FOUR_CHARACTER_CONSTANT('S','c','h',' ')
|
|
#define RES_EVENT_UPDATE_STATUS FOUR_CHARACTER_CONSTANT('U','p','d',' ')
|
|
#define RES_EVENT_INITCRIT_START FOUR_CHARACTER_CONSTANT('I','C','S','+')
|
|
#define RES_EVENT_INITCRIT_END FOUR_CHARACTER_CONSTANT('I','C','S','-')
|
|
#define RES_EVENT_DELCRIT_START FOUR_CHARACTER_CONSTANT('D','C','S','+')
|
|
#define RES_EVENT_DELCRIT_END FOUR_CHARACTER_CONSTANT('D','C','S','-')
|
|
#define RES_EVENT_SHUTDOWN FOUR_CHARACTER_CONSTANT('S','h','u','t')
|
|
#define RES_EVENT_FLUSH_CACHE FOUR_CHARACTER_CONSTANT('F','l','s','h')
|
|
#define RES_EVENT_PNP_START FOUR_CHARACTER_CONSTANT('P','n','P','+')
|
|
#define RES_EVENT_PNP_END FOUR_CHARACTER_CONSTANT('P','n','P','-')
|
|
|
|
|
|
//
|
|
// Service
|
|
//
|
|
|
|
extern HANDLE g_hStopEvent;
|
|
extern BOOL g_StopFlag;
|
|
extern BOOL g_WakeFlag;
|
|
extern BOOL g_GarbageCollectFlag;
|
|
|
|
extern BOOL g_LogTraceInfo;
|
|
|
|
//
|
|
// Config (config.c)
|
|
//
|
|
|
|
extern DWORD g_MaxSOACacheEntryTtlLimit;
|
|
extern DWORD g_NegativeSOACacheTime;
|
|
extern DWORD g_MessagePopupLimit;
|
|
extern DWORD g_NetFailureCacheTime;
|
|
|
|
//
|
|
// Config info (config.c)
|
|
//
|
|
|
|
extern PDNS_NETINFO g_NetworkInfo;
|
|
extern DWORD g_TimeOfLastPnPUpdate;
|
|
|
|
//
|
|
// Cache (cache.c)
|
|
//
|
|
|
|
extern PCACHE_ENTRY * g_HashTable;
|
|
extern DWORD g_HashTableSize;
|
|
extern DWORD g_EntryCount;
|
|
extern DWORD g_RecordSetCount;
|
|
|
|
//
|
|
// Local IP info (ip.c)
|
|
//
|
|
|
|
extern PDNS_ADDR_ARRAY g_LocalAddrArray;
|
|
|
|
//
|
|
// Network failure caching
|
|
//
|
|
|
|
extern DWORD g_NetFailureTime;
|
|
extern DNS_STATUS g_NetFailureStatus;
|
|
extern DWORD g_TimedOutAdapterTime;
|
|
extern DWORD g_ResetServerPrioritiesTime;
|
|
extern BOOL g_fTimedOutAdapter;
|
|
extern DNS_STATUS g_PreviousNetFailureStatus;
|
|
extern DWORD g_MessagePopupStrikes;
|
|
extern DWORD g_NumberOfMessagePopups;
|
|
|
|
//
|
|
// Multicast globals (mcast.c)
|
|
//
|
|
|
|
extern HANDLE g_hMulticastThread;
|
|
extern BOOL g_MulticastStop;
|
|
|
|
|
|
//
|
|
// Locking
|
|
//
|
|
|
|
extern CRITICAL_SECTION CacheCritSec;
|
|
extern CRITICAL_SECTION NetworkListCritSec;
|
|
extern CRITICAL_SECTION NetworkFailureCritSec;
|
|
|
|
|
|
#define LOCK_CACHE() Cache_Lock( 0 )
|
|
#define LOCK_CACHE_NO_START() Cache_Lock( 1 )
|
|
#define UNLOCK_CACHE() Cache_Unlock()
|
|
|
|
#define LOCK_NET_LIST() EnterCriticalSection( &NetworkListCritSec )
|
|
#define UNLOCK_NET_LIST() LeaveCriticalSection( &NetworkListCritSec )
|
|
|
|
#define LOCK_NET_FAILURE() EnterCriticalSection( &NetworkFailureCritSec )
|
|
#define UNLOCK_NET_FAILURE() LeaveCriticalSection( &NetworkFailureCritSec )
|
|
|
|
|
|
//
|
|
// Cache flush levels
|
|
//
|
|
// Note, these aren't bit flags, just made them that way for
|
|
// easy reading.
|
|
//
|
|
|
|
#define FLUSH_LEVEL_NORMAL (0)
|
|
#define FLUSH_LEVEL_INVALID (1)
|
|
#define FLUSH_LEVEL_WIRE (2)
|
|
#define FLUSH_LEVEL_STRONG (4)
|
|
#define FLUSH_LEVEL_CLEANUP (8)
|
|
|
|
#define FLUSH_LEVEL_GARBAGE (FLUSH_LEVEL_WIRE)
|
|
|
|
|
|
//
|
|
// Cache memory
|
|
//
|
|
// Note, heap global doesn't need exposure if functionalize
|
|
//
|
|
|
|
extern HANDLE g_CacheHeap;
|
|
|
|
#define CACHE_HEAP_ALLOC_ZERO(size) \
|
|
HeapAlloc( g_CacheHeap, HEAP_ZERO_MEMORY, (size) )
|
|
|
|
#define CACHE_HEAP_ALLOC(size) \
|
|
HeapAlloc( g_CacheHeap, 0, (size) )
|
|
|
|
#define CACHE_HEAP_FREE(p) \
|
|
HeapFree( g_CacheHeap, 0, (p) )
|
|
|
|
|
|
//
|
|
// Record and RPC memory:
|
|
//
|
|
// Note: most records are created by dnsapi heap -- from
|
|
// query or hosts file routines. However, we do create
|
|
// name error caching records ourselves using dnslib routines.
|
|
//
|
|
// This means -- until we either
|
|
// - extend query or dnslib record creation interfaces to
|
|
// include heap parameter
|
|
// - explicitly free and recreate
|
|
// - tag records (dnsapi\not) somehow (flags field)
|
|
// that
|
|
// dnsapi and dnslib heaps MUST be the same.
|
|
// With dnsapi now potentially having it's own heap, this means
|
|
// dnslib should use dnsapi heap.
|
|
//
|
|
// So we'll put off using the debug heap for dnslib.
|
|
//
|
|
|
|
//
|
|
// Resolver allocators
|
|
//
|
|
|
|
PVOID
|
|
Res_Alloc(
|
|
IN DWORD Length,
|
|
IN DWORD Tag,
|
|
IN PSTR pszFile,
|
|
IN DWORD LineNo
|
|
);
|
|
|
|
PVOID
|
|
Res_AllocZero(
|
|
IN DWORD Length,
|
|
IN DWORD Tag,
|
|
IN PSTR pszFile,
|
|
IN DWORD LineNo
|
|
);
|
|
|
|
VOID
|
|
Res_Free(
|
|
IN OUT PVOID pMemory,
|
|
IN DWORD Tag
|
|
);
|
|
|
|
#define RESHEAP_TAG_GENERAL 0
|
|
#define RESHEAP_TAG_RECORD 1
|
|
#define RESHEAP_TAG_RPC 2
|
|
#define RESHEAP_TAG_MCAST 3
|
|
|
|
|
|
//
|
|
// General memory
|
|
//
|
|
|
|
#define GENERAL_HEAP_ALLOC(Size) \
|
|
Res_Alloc( \
|
|
Size, \
|
|
RESHEAP_TAG_GENERAL, \
|
|
__FILE__, \
|
|
__LINE__ )
|
|
|
|
#define GENERAL_HEAP_ALLOC_ZERO(Size) \
|
|
Res_AllocZero( \
|
|
Size, \
|
|
RESHEAP_TAG_GENERAL, \
|
|
__FILE__, \
|
|
__LINE__ )
|
|
|
|
#define GENERAL_HEAP_FREE(pMem) \
|
|
Res_Free( \
|
|
pMem, \
|
|
RESHEAP_TAG_GENERAL )
|
|
|
|
|
|
//
|
|
// RPC allocs
|
|
//
|
|
|
|
#define RPC_HEAP_ALLOC(Size) \
|
|
Res_Alloc( \
|
|
Size, \
|
|
RESHEAP_TAG_RPC, \
|
|
__FILE__, \
|
|
__LINE__ )
|
|
|
|
#define RPC_HEAP_ALLOC_ZERO(Size) \
|
|
Res_AllocZero( \
|
|
Size, \
|
|
RESHEAP_TAG_RPC, \
|
|
__FILE__, \
|
|
__LINE__ )
|
|
|
|
#define RPC_HEAP_FREE(pMem) \
|
|
Res_Free( \
|
|
pMem, \
|
|
RESHEAP_TAG_RPC )
|
|
|
|
|
|
//
|
|
// Record heap routines
|
|
//
|
|
|
|
#define RECORD_HEAP_ALLOC(Size) \
|
|
Res_Alloc( \
|
|
Size, \
|
|
RESHEAP_TAG_RECORD, \
|
|
__FILE__, \
|
|
__LINE__ )
|
|
|
|
#define RECORD_HEAP_ALLOC_ZERO(Size) \
|
|
Res_AllocZero( \
|
|
Size, \
|
|
RESHEAP_TAG_RECORD, \
|
|
__FILE__, \
|
|
__LINE__ )
|
|
|
|
#define RECORD_HEAP_FREE(pMem) \
|
|
Res_Free( \
|
|
pMem, \
|
|
RESHEAP_TAG_RECORD )
|
|
|
|
//
|
|
// Mcast heap routines
|
|
//
|
|
|
|
#define MCAST_HEAP_ALLOC(Size) \
|
|
Res_Alloc( \
|
|
Size, \
|
|
RESHEAP_TAG_MCAST, \
|
|
__FILE__, \
|
|
__LINE__ )
|
|
|
|
#define MCAST_HEAP_ALLOC_ZERO(Size) \
|
|
Res_AllocZero( \
|
|
Size, \
|
|
RESHEAP_TAG_MCAST, \
|
|
__FILE__, \
|
|
__LINE__ )
|
|
|
|
#define MCAST_HEAP_FREE(pMem) \
|
|
Res_Free( \
|
|
pMem, \
|
|
RESHEAP_TAG_MCAST )
|
|
|
|
|
|
//
|
|
// RECORD Access control
|
|
//
|
|
|
|
BOOL
|
|
ClientThreadNotAllowedAccess(
|
|
VOID
|
|
);
|
|
|
|
|
|
#if 0
|
|
//
|
|
// Old cache routines (cache.c)
|
|
//
|
|
|
|
VOID
|
|
FlushCacheEntry(
|
|
IN PWSTR pName
|
|
);
|
|
|
|
VOID
|
|
FlushCacheEntryRecord(
|
|
IN PWSTR pName,
|
|
IN WORD Type
|
|
);
|
|
|
|
VOID
|
|
TrimCache(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
TrimCacheBucket(
|
|
IN ULONG ulIndex,
|
|
IN DWORD dwBucketSize,
|
|
IN BOOL fSkipFirst
|
|
);
|
|
|
|
VOID
|
|
ResizeCacheBucket(
|
|
IN ULONG ulIndex,
|
|
IN PDWORD pdwBucketSize
|
|
);
|
|
|
|
PCACHE_ENTRY
|
|
CreateCacheEntry(
|
|
IN PWSTR pName,
|
|
IN BOOL fLoadingHostsFile
|
|
);
|
|
|
|
VOID
|
|
FreeCacheEntry(
|
|
IN OUT PCACHE_ENTRY pCacheEntry
|
|
);
|
|
|
|
VOID
|
|
AddRecordToCacheEntry(
|
|
IN OUT PCACHE_ENTRY pCacheEntry,
|
|
IN PDNS_RECORD pRecordList,
|
|
IN BOOL fFlushExisting,
|
|
IN BOOL fLoadingHostsFile
|
|
);
|
|
|
|
VOID
|
|
CacheAnyAdditionalRecords(
|
|
IN OUT PDNS_RECORD pRecordList,
|
|
IN BOOL fHostFile
|
|
);
|
|
|
|
PCACHE_ENTRY
|
|
FindCacheEntry(
|
|
IN PWSTR pName
|
|
);
|
|
|
|
PCACHE_ENTRY
|
|
FindOrCreateCacheEntry(
|
|
IN PWSTR pName,
|
|
IN BOOL fHostsFile
|
|
);
|
|
|
|
PDNS_RECORD
|
|
FindCacheEntryRecord(
|
|
IN PCACHE_ENTRY pEntry,
|
|
IN WORD Type
|
|
);
|
|
|
|
PDNS_RECORD
|
|
FindCacheRecords(
|
|
IN PWSTR pwsName,
|
|
IN WORD wType
|
|
);
|
|
|
|
#define PrepareRecordSetForRpc(prr) Cache_RestoreRecordListForRpc(prr)
|
|
|
|
#define PrepareRecordSetForCache(prr) Cache_PrepareRecordList(prr)
|
|
#endif
|
|
|
|
//
|
|
// Cache routines (ncache.c)
|
|
//
|
|
|
|
VOID
|
|
Cache_Lock(
|
|
IN BOOL fNoStart
|
|
);
|
|
|
|
VOID
|
|
Cache_Unlock(
|
|
VOID
|
|
);
|
|
|
|
DNS_STATUS
|
|
Cache_Initialize(
|
|
VOID
|
|
);
|
|
|
|
DNS_STATUS
|
|
Cache_Shutdown(
|
|
VOID
|
|
);
|
|
|
|
DNS_STATUS
|
|
Cache_Flush(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
Cache_FlushRecords(
|
|
IN PWSTR pName,
|
|
IN DWORD FlushLevel,
|
|
IN WORD Type
|
|
);
|
|
|
|
BOOL
|
|
Cache_IsRecordTtlValid(
|
|
IN PDNS_RECORD pRecord
|
|
);
|
|
|
|
//
|
|
// Cache operations routines (cache.c)
|
|
//
|
|
|
|
BOOL
|
|
Cache_ReadResults(
|
|
OUT PDNS_RESULTS pResults,
|
|
IN PWSTR pwsName,
|
|
IN WORD wType
|
|
);
|
|
|
|
VOID
|
|
Cache_PrepareRecordList(
|
|
IN OUT PDNS_RECORD pRecordList
|
|
);
|
|
|
|
VOID
|
|
Cache_RestoreRecordListForRpc(
|
|
IN OUT PDNS_RECORD pRecordList
|
|
);
|
|
|
|
VOID
|
|
Cache_RecordList(
|
|
IN OUT PDNS_RECORD pRecordList
|
|
);
|
|
|
|
VOID
|
|
Cache_RecordSetAtomic(
|
|
IN PWSTR pwsName,
|
|
IN WORD wType,
|
|
IN PDNS_RECORD pRecordSet
|
|
);
|
|
|
|
VOID
|
|
Cache_GarbageCollect(
|
|
IN DWORD Flag
|
|
);
|
|
|
|
DNS_STATUS
|
|
Cache_QueryResponse(
|
|
IN OUT PQUERY_BLOB pBlob
|
|
);
|
|
|
|
BOOL
|
|
Cache_GetRecordsForRpc(
|
|
OUT PDNS_RECORD * ppRecordList,
|
|
OUT PDNS_STATUS pStatus,
|
|
IN PWSTR pwsName,
|
|
IN WORD wType,
|
|
IN DWORD Flags
|
|
);
|
|
|
|
//
|
|
// Multicast routines (mcast.c)
|
|
//
|
|
|
|
VOID
|
|
MulticastThread(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
MulticastThreadSignalStop(
|
|
VOID
|
|
);
|
|
|
|
|
|
//
|
|
// Host file routines (notify.c)
|
|
//
|
|
|
|
VOID
|
|
InitCacheWithHostFile(
|
|
VOID
|
|
);
|
|
|
|
|
|
//
|
|
// Notification (notify.c)
|
|
//
|
|
|
|
VOID
|
|
ThreadShutdownWait(
|
|
IN HANDLE hThread
|
|
);
|
|
|
|
HANDLE
|
|
CreateHostsFileChangeHandle(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NotifyThread(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
StartNotify(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
ShutdownNotify(
|
|
VOID
|
|
);
|
|
|
|
|
|
//
|
|
// Config -- Network info (config.c)
|
|
//
|
|
|
|
VOID
|
|
UpdateNetworkInfo(
|
|
IN OUT PDNS_NETINFO pNetworkInfo
|
|
);
|
|
|
|
PDNS_NETINFO
|
|
GrabNetworkInfo(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
ZeroNetworkConfigGlobals(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
CleanupNetworkInfo(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
IsKnownNetFailure(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
SetKnownNetFailure(
|
|
IN DNS_STATUS Status
|
|
);
|
|
|
|
|
|
VOID
|
|
ReadRegistryConfig(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
HandleConfigChange(
|
|
IN PSTR pszReason,
|
|
IN BOOL fCache_Flush
|
|
);
|
|
|
|
|
|
//
|
|
// Net config (still remote.c)
|
|
//
|
|
|
|
#define THREE_MINUTES_FROM_SYSTEM_BOOT 180
|
|
#define MAX_DNS_NOTIFICATION_LIST_SIZE 1000
|
|
#define PNP_REFRESH_UPDATE_WINDOW 60
|
|
|
|
BOOL
|
|
IsKnownTimedOutAdapter(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
IsTimeToResetServerPriorities(
|
|
VOID
|
|
);
|
|
|
|
|
|
//
|
|
// Service notification (notesrv.c)
|
|
//
|
|
|
|
VOID
|
|
SendServiceNotifications(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
CleanupServiceNotification(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// In memory logging (memlog.c)
|
|
//
|
|
|
|
VOID
|
|
LogEventInMemory(
|
|
IN DWORD Checkpoint,
|
|
IN DWORD Data
|
|
);
|
|
|
|
//
|
|
// Event logging (dnsrslvr.c)
|
|
//
|
|
|
|
VOID
|
|
ResolverLogEvent (
|
|
IN DWORD MessageId,
|
|
IN WORD EventType,
|
|
IN DWORD StringCount,
|
|
IN PWSTR * StringArray,
|
|
IN DWORD ErrorCode
|
|
);
|
|
|
|
//
|
|
// IP list and notification (ip.c)
|
|
//
|
|
|
|
DNS_STATUS
|
|
IpNotifyThread(
|
|
IN LPVOID pvDummy
|
|
);
|
|
|
|
VOID
|
|
ZeroInitIpListGlobals(
|
|
VOID
|
|
);
|
|
|
|
DNS_STATUS
|
|
InitIpListAndNotification(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
ShutdownIpListAndNotify(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
ClearLocalAddrArray(
|
|
VOID
|
|
);
|
|
|
|
PDNS_ADDR_ARRAY
|
|
GetLocalAddrArray(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
RemoveClusterIpFromAddrArray(
|
|
IN OUT PDNS_ADDR_ARRAY pAddrArray
|
|
);
|
|
|
|
PDNS_ADDR_ARRAY
|
|
GetLocalAddrArrayFiltered(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
IsClusterAddress(
|
|
IN OUT PQUERY_BLOB pBlob,
|
|
IN PIP_UNION pIpUnion
|
|
);
|
|
|
|
|
|
//
|
|
// Resolver log (logit.c)
|
|
//
|
|
// Special type routines for resolver logging.
|
|
// General log open\print routines defined in logit.h.
|
|
//
|
|
|
|
VOID
|
|
PrintNetworkInfoToLog(
|
|
IN PDNS_NETINFO pNetworkInfo
|
|
);
|
|
|
|
VOID
|
|
PrintIpAddressListToLog (
|
|
IN PDNS_ADDRESS_INFO AddressInfoList,
|
|
IN DWORD AddressInfoListCount
|
|
);
|
|
|
|
|
|
//
|
|
// RPC server (rpc.c)
|
|
//
|
|
|
|
DNS_STATUS
|
|
Rpc_Initialize(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
Rpc_Shutdown(
|
|
VOID
|
|
);
|
|
|
|
|
|
#endif // _LOCAL_INCLUDED_
|
|
|
|
|