|
|
/*++
Copyright (c) 1996-2001 Microsoft Corporation
Module Name:
dnslibp.h
Abstract:
Domain Name System (DNS) Library
Private DNS Library Routines
Author:
Jim Gilroy (jamesg) December 7, 1996
Revision History:
--*/
#ifndef _DNSLIBP_INCLUDED_
#define _DNSLIBP_INCLUDED_
#include <winsock2.h>
#include <ws2tcpip.h>
#include <ws2atm.h>
#include <windns.h>
#include <dnsapi.h>
#include <dnslib.h>
#include <dnsip.h>
#ifdef __cplusplus
extern "C" { #endif // __cplusplus
// headers are screwed up
// neither ntdef.h nor winnt.h brings in complete set, so depending
// on whether you include nt.h or not you end up with different set
#define MINCHAR 0x80
#define MAXCHAR 0x7f
#define MINSHORT 0x8000
#define MAXSHORT 0x7fff
#define MINLONG 0x80000000
#define MAXLONG 0x7fffffff
#define MAXBYTE 0xff
#define MAXUCHAR 0xff
#define MAXWORD 0xffff
#define MAXUSHORT 0xffff
#define MAXDWORD 0xffffffff
#define MAXULONG 0xffffffff
//
// Handy bad ptr
//
#define DNS_BAD_PTR ((PVOID)(-1))
//
// "Wire" char set
//
// Explicitly create wire char set in case the ACE format
// wins out.
//
#define DnsCharSetWire DnsCharSetUtf8
//
// DCR: move these to windns.h
//
#define DNS_IP4_REVERSE_DOMAIN_STRING_W (L"in-addr.arpa.")
#define DNS_IP6_REVERSE_DOMAIN_STRING_W (L"ip6.arpa.")
//
// Private DNS_RECORD Flag field structure definition and macros
//
typedef struct _PrivateRecordFlags { DWORD Section : 2; DWORD Delete : 1; DWORD CharSet : 2;
DWORD Cached : 1; // or maybe a "Source" field
DWORD HostsFile : 1; DWORD Cluster : 1;
DWORD Unused : 3; DWORD Matched : 1; DWORD FreeData : 1; DWORD FreeOwner : 1;
DWORD Reserved : 18; } PRIV_RR_FLAGS, *PPRIV_RR_FLAGS;
#define RRFLAGS( pRecord ) ((PPRIV_RR_FLAGS)&pRecord->Flags.DW)
// Defined in dnslib.h too late to pull now
//#define FLAG_Section( pRecord ) (RRFLAGS( pRecord )->Section)
//#define FLAG_Delete( pRecord ) (RRFLAGS( pRecord )->Delete)
//#define FLAG_CharSet( pRecord ) (RRFLAGS( pRecord )->CharSet)
//#define FLAG_FreeData( pRecord ) (RRFLAGS( pRecord )->FreeData)
//#define FLAG_FreeOwner( pRecord ) (RRFLAGS( pRecord )->FreeOwner)
//#define FLAG_Matched( pRecord ) (RRFLAGS( pRecord )->Matched)
//#define FLAG_Cached( pRecord ) (RRFLAGS( pRecord )->Cached)
#define FLAG_HostsFile( pRecord ) (RRFLAGS( pRecord )->HostsFile)
#define FLAG_Cluster( pRecord ) (RRFLAGS( pRecord )->Cluster)
//#define SET_FREE_OWNER(pRR) (FLAG_FreeOwner(pRR) = TRUE)
//#define SET_FREE_DATA(pRR) (FLAG_FreeData(pRR) = TRUE)
//#define SET_RR_MATCHED(pRR) (FLAG_Matched(pRR) = TRUE)
#define SET_RR_HOSTS_FILE(pRR) (FLAG_HostsFile(pRR) = TRUE)
#define SET_RR_CLUSTER(pRR) (FLAG_Cluster(pRR) = TRUE)
//#define CLEAR_FREE_OWNER(pRR) (FLAG_FreeOwner(pRR) = FALSE)
//#define CLEAR_FREE_DATA(pRR) (FLAG_FreeData(pRR) = FALSE)
//#define CLEAR_RR_MATCHED(pRR) (FLAG_Matched(pRR) = FALSE)
#define CLEAR_RR_HOSTS_FILE(pRR) (FLAG_HostsFile(pRR) = FALSE)
//#define IS_FREE_OWNER(pRR) (FLAG_FreeOwner(pRR))
//#define IS_FREE_DATA(pRR) (FLAG_FreeData(pRR))
//#define IS_RR_MATCHED(pRR) (FLAG_Matched(pRR))
#define IS_HOSTS_FILE_RR(pRR) (FLAG_HostsFile(pRR))
#define IS_CLUSTER_RR(pRR) (FLAG_Cluster(pRR))
//#define IS_ANSWER_RR(pRR) (FLAG_Section(pRR) == DNSREC_ANSWER)
//#define IS_AUTHORITY_RR(pRR) (FLAG_Section(pRR) == DNSREC_AUTHORITY)
//#define IS_ADDITIONAL_RR(pRR) (FLAG_Section(pRR) == DNSREC_ADDITIONAL)
//
// DWORD flag definitions
// #defines to match the windns.h ones for private fields
// Charset
#define DNSREC_CHARSET (0x00000018) // bits 4 and 5
#define DNSREC_UNICODE (0x00000008) // DnsCharSetUnicode = 1
#define DNSREC_UTF8 (0x00000010) // DnsCharSetUtf8 = 2
#define DNSREC_ANSI (0x00000018) // DnsCharSetAnsi = 3
//
// Address family info (addr.c)
//
typedef struct _AddrFamilyInfo { WORD Family; WORD DnsType; DWORD LengthAddr; DWORD LengthSockaddr; DWORD OffsetToAddrInSockaddr; } FAMILY_INFO, *PFAMILY_INFO;
extern FAMILY_INFO AddrFamilyTable[];
#define FamilyInfoIp4 (AddrFamilyTable[0])
#define FamilyInfoIp6 (AddrFamilyTable[1])
#define FamilyInfoAtm (AddrFamilyTable[2])
#define pFamilyInfoIp4 (&AddrFamilyTable[0])
#define pFamilyInfoIp6 (&AddrFamilyTable[1])
#define pFamilyInfoAtm (&AddrFamilyTable[2])
PFAMILY_INFO FamilyInfo_GetForFamily( IN DWORD Family );
#define FamilyInfo_GetForSockaddr(pSA) \
FamilyInfo_GetForFamily( (pSA)->sa_family )
WORD Family_DnsType( IN WORD Family );
DWORD Family_SockaddrLength( IN WORD Family );
DWORD Family_GetFromDnsType( IN WORD wType );
//
// Sockaddr
//
DWORD Sockaddr_Length( IN PSOCKADDR pSockaddr );
IP6_ADDRESS Sockaddr_GetIp6( IN PSOCKADDR pSockaddr );
VOID Sockaddr_BuildFromIp6( OUT PSOCKADDR pSockaddr, IN IP6_ADDRESS Ip6Addr, IN WORD Port );
DNS_STATUS Sockaddr_BuildFromFlatAddr( OUT PSOCKADDR pSockaddr, IN OUT PDWORD pSockaddrLength, IN BOOL fClearSockaddr, IN PBYTE pAddr, IN DWORD AddrLength, IN DWORD AddrFamily );
//
// Hostents (hostent.c)
// (used by sablob.c)
//
PHOSTENT Hostent_Init( IN OUT PBYTE * ppBuffer, IN INT Family, IN INT AddrLength, IN DWORD AddrCount, IN DWORD AliasCount );
VOID Hostent_ConvertToOffsets( IN OUT PHOSTENT pHostent );
//
// Sting to address (straddr.c)
//
//
// Need for hostent routine which doesn't unicode\ANSI.
//
BOOL Dns_StringToAddressEx( OUT PCHAR pAddrBuf, IN OUT PDWORD pBufLength, IN PCSTR pString, IN OUT PDWORD pAddrFamily, IN BOOL fUnicode, IN BOOL fReverse );
BOOL Dns_StringToDnsAddrEx( OUT PDNS_ADDR pAddr, IN PCSTR pString, IN DWORD Family, OPTIONAL IN BOOL fUnicode, IN BOOL fReverse );
//
// Handle non-NULL terminated strings for DNS server file load.
//
BOOL Dns_Ip4StringToAddressEx_A( OUT PIP4_ADDRESS pIp4Addr, IN PCSTR pchString, IN DWORD StringLength );
BOOL Dns_Ip6StringToAddressEx_A( OUT PIP6_ADDRESS pIp6Addr, IN PCSTR pchString, IN DWORD StringLength );
//
// Random
//
BOOL Dns_ReverseNameToSockaddrPrivate( OUT PSOCKADDR pSockaddr, IN OUT PDWORD pSockaddrLength, IN PCSTR pString, IN BOOL fUnicode );
//
// UPNP IP6 literal hack
//
VOID Dns_Ip6AddressToLiteralName( OUT PWCHAR pBuffer, IN PIP6_ADDRESS pIp6 );
BOOL Dns_Ip6LiteralNameToAddress( OUT PSOCKADDR_IN6 pSockAddr, IN PCWSTR pwsString );
//
// Mcast address build (dnsaddr.c)
//
BOOL DnsAddr_BuildMcast( OUT PDNS_ADDR pAddr, IN DWORD Family, IN PWSTR pName );
//
// IP6 mcast address (ip6.c)
//
BOOL Ip6_McastCreate( OUT PIP6_ADDRESS pIp, IN PWSTR pName );
//
// IP4 networking (dnsutil.c)
//
BOOL Dns_AreIp4InSameDefaultNetwork( IN IP4_ADDRESS IpAddr1, IN IP4_ADDRESS IpAddr2 );
//
// RPC-able type (record.c)
//
BOOL Dns_IsRpcRecordType( IN WORD wType );
//
// Record copy (rrcopy.c)
//
PDNS_RECORD WINAPI Dns_RecordCopy_W( IN PDNS_RECORD pRecord );
PDNS_RECORD WINAPI Dns_RecordCopy_A( IN PDNS_RECORD pRecord );
PDNS_RECORD Dns_RecordListCopyEx( IN PDNS_RECORD pRR, IN DWORD ScreenFlag, IN DNS_CHARSET CharSetIn, IN DNS_CHARSET CharSetOut );
//
// Record list routines (rrlist.c)
//
//
// Record screening (rrlist.c)
//
#define SCREEN_OUT_ANSWER (0x00000001)
#define SCREEN_OUT_AUTHORITY (0x00000010)
#define SCREEN_OUT_ADDITIONAL (0x00000100)
#define SCREEN_OUT_NON_RPC (0x00100000)
#define SCREEN_OUT_SECTION \
(SCREEN_OUT_ANSWER | SCREEN_OUT_AUTHORITY | SCREEN_OUT_ADDITIONAL)
BOOL Dns_ScreenRecord( IN PDNS_RECORD pRR, IN DWORD ScreenFlag );
PDNS_RECORD Dns_RecordListScreen( IN PDNS_RECORD pRR, IN DWORD ScreenFlag );
DWORD Dns_RecordListGetMinimumTtl( IN PDNS_RECORD pRRList );
//
// Record priorities (rrlist.c)
//
PDNS_RECORD Dns_PrioritizeSingleRecordSet( IN OUT PDNS_RECORD pRecordSet, IN PDNS_ADDR_ARRAY pArray );
PDNS_RECORD Dns_PrioritizeRecordList( IN OUT PDNS_RECORD pRecordList, IN PDNS_ADDR_ARRAY pArray );
//
// Record comparison (rrcomp.c)
//
BOOL WINAPI Dns_DeleteRecordFromList( IN OUT PDNS_RECORD * ppRRList, IN PDNS_RECORD pRRDelete );
//
// New free
// DCR: switch to dnslib.h when world builds clean
//
#undef Dns_RecordListFree
VOID WINAPI Dns_RecordListFree( IN OUT PDNS_RECORD pRRList );
//
// String (string.c)
//
DWORD MultiSz_Size_A( IN PCSTR pmszString );
PSTR MultiSz_NextString_A( IN PCSTR pmszString );
PSTR MultiSz_Copy_A( IN PCSTR pmszString );
BOOL MultiSz_Equal_A( IN PCSTR pmszString1, IN PCSTR pmszString2 );
DWORD MultiSz_Size_W( IN PCWSTR pmszString );
PWSTR MultiSz_NextString_W( IN PCWSTR pmszString );
PWSTR MultiSz_Copy_W( IN PCWSTR pmszString );
BOOL MultiSz_Equal_W( IN PCWSTR pmszString1, IN PCWSTR pmszString2 );
BOOL MultiSz_ContainsName_W( IN PCWSTR pmszString, IN PCWSTR pString );
DWORD String_ReplaceCharW( IN OUT PWSTR pwsString, IN WCHAR TargetChar, IN WCHAR ReplaceChar );
DWORD String_ReplaceCharA( IN OUT PSTR pszString, IN CHAR TargetChar, IN CHAR ReplaceChar );
PSTR * Argv_CopyEx( IN DWORD Argc, IN PCHAR * Argv, IN DNS_CHARSET CharSetIn, IN DNS_CHARSET CharSetOut );
VOID Argv_Free( IN OUT PSTR * Argv );
//
// Timed locks (locks.c)
//
typedef struct _TimedLock { HANDLE hEvent; DWORD ThreadId; LONG RecursionCount; DWORD WaitTime; } TIMED_LOCK, *PTIMED_LOCK;
#define TIMED_LOCK_DEFAULT_WAIT (0xf0000000)
DWORD TimedLock_Initialize( OUT PTIMED_LOCK pTimedLock, IN DWORD DefaultWait );
BOOL TimedLock_Enter( IN OUT PTIMED_LOCK pTimedLock, IN DWORD WaitTime );
VOID TimedLock_Leave( IN OUT PTIMED_LOCK pTimedLock );
VOID TimedLock_Cleanup( IN OUT PTIMED_LOCK pTimedLock );
//
// Name utilities (name.c)
//
DWORD Dns_MakeCanonicalNameW( OUT PWSTR pBuffer, IN DWORD BufLength, IN PWSTR pwsString, IN DWORD StringLength );
DWORD Dns_MakeCanonicalNameInPlaceW( IN PWCHAR pwString, IN DWORD StringLength );
INT Dns_DowncaseNameLabel( OUT PCHAR pchResult, IN PCHAR pchLabel, IN DWORD cchLabel, IN DWORD dwFlags );
//
// Name checking -- server name checking levels
//
#define DNS_ALLOW_RFC_NAMES_ONLY (0)
#define DNS_ALLOW_NONRFC_NAMES (1)
#define DNS_ALLOW_MULTIBYTE_NAMES (2)
#define DNS_ALLOW_ALL_NAMES (3)
PCHAR _fastcall Dns_GetDomainNameA( IN PCSTR pszName );
PWSTR _fastcall Dns_GetDomainNameW( IN PCWSTR pwsName );
PSTR _fastcall Dns_GetTldForNameA( IN PCSTR pszName );
PWSTR _fastcall Dns_GetTldForNameW( IN PCWSTR pszName );
BOOL _fastcall Dns_IsNameShortA( IN PCSTR pszName );
BOOL _fastcall Dns_IsNameShortW( IN PCWSTR pszName );
BOOL _fastcall Dns_IsNameNumericA( IN PCSTR pszName );
BOOL _fastcall Dns_IsNameNumericW( IN PCWSTR pszName );
BOOL _fastcall Dns_IsNameFQDN_A( IN PCSTR pszName );
BOOL _fastcall Dns_IsNameFQDN_W( IN PCWSTR pszName );
DWORD _fastcall Dns_GetNameAttributesA( IN PCSTR pszName );
DWORD _fastcall Dns_GetNameAttributesW( IN PCWSTR pszName );
DNS_STATUS Dns_ValidateAndCategorizeDnsNameA( IN PCSTR pszName, OUT PDWORD pLabelCount );
DNS_STATUS Dns_ValidateAndCategorizeDnsNameW( IN PCWSTR pszName, OUT PDWORD pLabelCount );
DWORD Dns_NameLabelCountA( IN PCSTR pszName );
DWORD Dns_NameLabelCountW( IN PCWSTR pszName );
PSTR Dns_NameAppend_A( OUT PCHAR pNameBuffer, IN DWORD BufferLength, IN PSTR pszName, IN PSTR pszDomain );
PWSTR Dns_NameAppend_W( OUT PWCHAR pNameBuffer, IN DWORD BufferLength, IN PWSTR pwsName, IN PWSTR pwsDomain );
PSTR Dns_SplitHostFromDomainNameA( IN PSTR pszName );
PWSTR Dns_SplitHostFromDomainNameW( IN PWSTR pszName );
BOOL Dns_CopyNameLabelA( OUT PCHAR pBuffer, IN PCSTR pszName );
BOOL Dns_CopyNameLabelW( OUT PWCHAR pBuffer, IN PCWSTR pszName );
//
// Common name transformations
//
DWORD Dns_NameCopyWireToUnicode( OUT PWCHAR pBufferUnicode, IN PCSTR pszNameWire );
DWORD Dns_NameCopyUnicodeToWire( OUT PCHAR pBufferWire, IN PCWSTR pwsNameUnicode );
DWORD Dns_NameCopyStandard_W( OUT PWCHAR pBuffer, IN PCWSTR pwsNameUnicode );
DWORD Dns_NameCopyStandard_A( OUT PCHAR pBuffer, IN PCSTR pszName );
//
// Special record creation (rralloc.c)
//
PDNS_RECORD Dns_CreateFlatRecord( IN PDNS_NAME pOwnerName, IN WORD wType, IN PCHAR pData, IN DWORD DataLength, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreatePtrTypeRecord( IN PDNS_NAME pOwnerName, IN BOOL fCopyName, IN PDNS_NAME pTargetName, IN WORD wType, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreatePtrRecordEx( IN PDNS_ADDR pAddr, IN PDNS_NAME pszHostName, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreatePtrRecordExEx( IN PDNS_ADDR pAddr, IN PSTR pszHostName, IN PSTR pszDomainName, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateARecord( IN PDNS_NAME pOwnerName, IN IP4_ADDRESS Ip4Address, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateAAAARecord( IN PDNS_NAME pOwnerName, IN IP6_ADDRESS Ip6Address, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateForwardRecord( IN PDNS_NAME pOwnerName, IN WORD wType, OPTIONAL IN PDNS_ADDR pAddr, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateForwardRecordFromIp6( IN PDNS_NAME pOwnerName, IN PIP6_ADDRESS pIp, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateForwardRecordFromSockaddr( IN PDNS_NAME pOwnerName, IN PSOCKADDR pSockaddr, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateRecordForIpString_W( IN PCWSTR pwsName, IN WORD wType, IN DWORD Ttl );
//
// Record read\write (rrwrite.c rrread.c)
//
// Need here to export to dnsapi\packet.c
//
typedef PCHAR (* RR_WRITE_FUNCTION)( PDNS_RECORD, PCHAR, PCHAR );
extern RR_WRITE_FUNCTION RR_WriteTable[];
typedef PDNS_RECORD (* RR_READ_FUNCTION)( PDNS_RECORD, DNS_CHARSET, PCHAR, PCHAR, PCHAR );
extern RR_READ_FUNCTION RR_ReadTable[];
//
// Security stuff (security.c)
//
#define SECURITY_WIN32
#include <sspi.h>
#define DNS_SPN_SERVICE_CLASS "DNS"
#define DNS_SPN_SERVICE_CLASS_W L"DNS"
//
// Some useful stats
//
extern DWORD SecContextCreate; extern DWORD SecContextFree; extern DWORD SecContextQueue; extern DWORD SecContextQueueInNego; extern DWORD SecContextDequeue; extern DWORD SecContextTimeout; extern DWORD SecPackAlloc; extern DWORD SecPackFree;
// Security packet verifications
extern DWORD SecTkeyInvalid; extern DWORD SecTkeyBadTime; extern DWORD SecTsigFormerr; extern DWORD SecTsigEcho; extern DWORD SecTsigBadKey; extern DWORD SecTsigVerifySuccess; extern DWORD SecTsigVerifyOldSig; extern DWORD SecTsigVerifyFailed;
// Hacks
// Allowing old TSIG off by default, server can turn on.
// Big Time skew on by default
extern BOOL SecAllowOldTsig; extern DWORD SecTsigVerifyOldSig; extern DWORD SecTsigVerifyOldFailed; extern DWORD SecBigTimeSkew; extern DWORD SecBigTimeSkewBypass;
//
// Security globals
// expose some of these which may be accessed by update library
//
extern BOOL g_fSecurityPackageInitialized; extern DWORD g_SecurityTokenMaxLength;
//
// Security context cache
//
VOID Dns_TimeoutSecurityContextList( IN BOOL fClearList );
//
// Security API
//
BOOL Dns_DnsNameToKerberosTargetName( IN LPSTR pszDnsName, IN LPSTR pszKerberosTargetName );
DNS_STATUS Dns_StartSecurity( IN BOOL fProcessAttach );
DNS_STATUS Dns_StartServerSecurity( VOID );
VOID Dns_TerminateSecurityPackage( VOID );
HANDLE Dns_CreateAPIContext( IN DWORD Flags, IN PVOID Credentials, OPTIONAL IN BOOL fUnicode );
VOID Dns_FreeAPIContext( IN OUT HANDLE hContextHandle );
PVOID Dns_GetApiContextCredentials( IN HANDLE hContextHandle );
DWORD Dns_GetCurrentRid( VOID );
BOOL Dns_CreateUserCredentials( IN PCHAR pszUser, IN DWORD dwUserLength, IN PCHAR pszDomain, IN DWORD dwDomainLength, IN PCHAR pszPassword, IN DWORD dwPasswordLength, IN BOOL FromWide, OUT PCHAR * ppCreds );
PSEC_WINNT_AUTH_IDENTITY_W Dns_AllocateAndInitializeCredentialsW( IN PSEC_WINNT_AUTH_IDENTITY_W pAuthIn );
PSEC_WINNT_AUTH_IDENTITY_A Dns_AllocateAndInitializeCredentialsA( IN PSEC_WINNT_AUTH_IDENTITY_A pAuthIn );
VOID Dns_FreeAuthIdentityCredentials( IN PVOID pAuthIn );
DNS_STATUS Dns_SignMessageWithGssTsig( IN HANDLE hContext, IN PDNS_HEADER pMsgHead, IN PCHAR pMsgBufEnd, IN OUT PCHAR * ppCurrent );
#if 1
DNS_STATUS Dns_RefreshSSpiCredentialsHandle( IN BOOL bDnsSvr, IN PCHAR pCreds ); #endif
VOID Dns_FreeSecurityContextList( VOID );
//
// Server security routines
//
DNS_STATUS Dns_FindSecurityContextFromAndVerifySignature( OUT PHANDLE phContext, IN PDNS_ADDR pRemoteAddr, IN PDNS_HEADER pMsgHead, IN PCHAR pMsgEnd );
DNS_STATUS Dns_FindSecurityContextFromAndVerifySignature_Ip4( IN PHANDLE phContext, IN IP4_ADDRESS IpRemote, IN PDNS_HEADER pMsgHead, IN PCHAR pMsgEnd );
DNS_STATUS Dns_ServerNegotiateTkey( IN PDNS_ADDR pRemoteAddr, IN PDNS_HEADER pMsgHead, IN PCHAR pMsgEnd, IN PCHAR pMsgBufEnd, IN BOOL fBreakOnAscFailure, OUT PCHAR * ppCurrent );
DNS_STATUS Dns_ServerNegotiateTkey_Ip4( IN IP4_ADDRESS IpRemote, IN PDNS_HEADER pMsgHead, IN PCHAR pMsgEnd, IN PCHAR pMsgBufEnd, IN BOOL fBreakOnAscFailure, OUT PCHAR * ppCurrent );
DNS_STATUS Dns_SrvImpersonateClient( IN HANDLE hContext );
DNS_STATUS Dns_SrvRevertToSelf( IN HANDLE hContext );
VOID Dns_CleanupSessionAndEnlistContext( IN OUT HANDLE hSession );
DWORD Dns_GetKeyVersion( IN LPSTR pszContext );
//
// Security utilities
//
DNS_STATUS Dns_CreateSecurityDescriptor( OUT PSECURITY_DESCRIPTOR * ppSD, IN DWORD AclCount, IN PSID * SidPtrArray, IN DWORD * AccessMaskArray );
//
// Security credentials
//
// Only defined if WINNT_AUTH_IDENTITY defined
#ifdef __RPCDCE_H__
PSEC_WINNT_AUTH_IDENTITY_W Dns_AllocateCredentials( IN PWSTR pwsUserName, IN PWSTR pwsDomain, IN PWSTR pwsPassword ); #endif
DNS_STATUS Dns_ImpersonateUser( IN PDNS_CREDENTIALS pCreds );
VOID Dns_FreeCredentials( IN PDNS_CREDENTIALS pCreds );
PDNS_CREDENTIALS Dns_CopyCredentials( IN PDNS_CREDENTIALS pCreds );
//
// Debug globals
//
// Expose here to allow debug file sharing
//
typedef struct _DnsDebugInfo { DWORD Flag; HANDLE hFile;
DWORD FileCurrentSize; DWORD FileWrapCount; DWORD FileWrapSize;
DWORD LastThreadId; DWORD LastSecond;
BOOL fConsole;
CHAR FileName[ MAX_PATH ]; } DNS_DEBUG_INFO, *PDNS_DEBUG_INFO;
// WANING: MUST ONLY be called in dnsapi.dll
PDNS_DEBUG_INFO Dns_SetDebugGlobals( IN OUT PDNS_DEBUG_INFO pInfo );
#ifdef __cplusplus
} #endif // __cplusplus
#endif // _DNSLIBP_INCLUDED_
|