mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
888 lines
15 KiB
888 lines
15 KiB
/*++
|
|
|
|
Copyright (c) 1997-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
export.c
|
|
|
|
Abstract:
|
|
|
|
Domain Name System (DNS) API
|
|
|
|
Covering functions for exported routines that are actually in
|
|
dnslib.lib.
|
|
|
|
Author:
|
|
|
|
Jim Gilroy (jamesg) November, 1997
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "local.h"
|
|
|
|
|
|
//
|
|
// SDK routines
|
|
//
|
|
|
|
//
|
|
// Name comparison
|
|
//
|
|
|
|
BOOL
|
|
WINAPI
|
|
DnsNameCompare_A(
|
|
IN LPSTR pName1,
|
|
IN LPSTR pName2
|
|
)
|
|
{
|
|
return Dns_NameCompare_A( pName1, pName2 );
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
DnsNameCompare_UTF8(
|
|
IN LPSTR pName1,
|
|
IN LPSTR pName2
|
|
)
|
|
{
|
|
return Dns_NameCompare_UTF8( pName1, pName2 );
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
DnsNameCompare_W(
|
|
IN LPWSTR pName1,
|
|
IN LPWSTR pName2
|
|
)
|
|
{
|
|
return Dns_NameCompare_W( pName1, pName2 );
|
|
}
|
|
|
|
|
|
DNS_NAME_COMPARE_STATUS
|
|
DnsNameCompareEx_A(
|
|
IN LPCSTR pszLeftName,
|
|
IN LPCSTR pszRightName,
|
|
IN DWORD dwReserved
|
|
)
|
|
{
|
|
return Dns_NameCompareEx(
|
|
pszLeftName,
|
|
pszRightName,
|
|
dwReserved,
|
|
DnsCharSetAnsi );
|
|
}
|
|
|
|
DNS_NAME_COMPARE_STATUS
|
|
DnsNameCompareEx_UTF8(
|
|
IN LPCSTR pszLeftName,
|
|
IN LPCSTR pszRightName,
|
|
IN DWORD dwReserved
|
|
)
|
|
{
|
|
return Dns_NameCompareEx(
|
|
pszLeftName,
|
|
pszRightName,
|
|
dwReserved,
|
|
DnsCharSetUtf8 );
|
|
}
|
|
|
|
DNS_NAME_COMPARE_STATUS
|
|
DnsNameCompareEx_W(
|
|
IN LPCWSTR pszLeftName,
|
|
IN LPCWSTR pszRightName,
|
|
IN DWORD dwReserved
|
|
)
|
|
{
|
|
return Dns_NameCompareEx(
|
|
(LPSTR) pszLeftName,
|
|
(LPSTR) pszRightName,
|
|
dwReserved,
|
|
DnsCharSetUnicode );
|
|
}
|
|
|
|
|
|
//
|
|
// Name validation
|
|
//
|
|
|
|
DNS_STATUS
|
|
DnsValidateName_UTF8(
|
|
IN LPCSTR pszName,
|
|
IN DNS_NAME_FORMAT Format
|
|
)
|
|
{
|
|
return Dns_ValidateName_UTF8( pszName, Format );
|
|
}
|
|
|
|
|
|
DNS_STATUS
|
|
DnsValidateName_W(
|
|
IN LPCWSTR pszName,
|
|
IN DNS_NAME_FORMAT Format
|
|
)
|
|
{
|
|
return Dns_ValidateName_W( pszName, Format );
|
|
}
|
|
|
|
DNS_STATUS
|
|
DnsValidateName_A(
|
|
IN LPCSTR pszName,
|
|
IN DNS_NAME_FORMAT Format
|
|
)
|
|
{
|
|
return Dns_ValidateName_A( pszName, Format );
|
|
}
|
|
|
|
|
|
//
|
|
// Record List
|
|
//
|
|
|
|
BOOL
|
|
DnsRecordCompare(
|
|
IN PDNS_RECORD pRecord1,
|
|
IN PDNS_RECORD pRecord2
|
|
)
|
|
{
|
|
return Dns_RecordCompare(
|
|
pRecord1,
|
|
pRecord2 );
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
DnsRecordSetCompare(
|
|
IN OUT PDNS_RECORD pRR1,
|
|
IN OUT PDNS_RECORD pRR2,
|
|
OUT PDNS_RECORD * ppDiff1,
|
|
OUT PDNS_RECORD * ppDiff2
|
|
)
|
|
{
|
|
return Dns_RecordSetCompare(
|
|
pRR1,
|
|
pRR2,
|
|
ppDiff1,
|
|
ppDiff2
|
|
);
|
|
}
|
|
|
|
PDNS_RECORD
|
|
WINAPI
|
|
DnsRecordCopyEx(
|
|
IN PDNS_RECORD pRecord,
|
|
IN DNS_CHARSET CharSetIn,
|
|
IN DNS_CHARSET CharSetOut
|
|
)
|
|
{
|
|
return Dns_RecordCopyEx( pRecord, CharSetIn, CharSetOut );
|
|
}
|
|
|
|
PDNS_RECORD
|
|
WINAPI
|
|
DnsRecordSetCopyEx(
|
|
IN PDNS_RECORD pRecordSet,
|
|
IN DNS_CHARSET CharSetIn,
|
|
IN DNS_CHARSET CharSetOut
|
|
)
|
|
{
|
|
return Dns_RecordSetCopyEx( pRecordSet, CharSetIn, CharSetOut );
|
|
}
|
|
|
|
|
|
VOID
|
|
WINAPI
|
|
DnsRecordListFree(
|
|
IN OUT PDNS_RECORD pRecordList,
|
|
IN DNS_FREE_TYPE FreeType
|
|
)
|
|
{
|
|
Dns_RecordListFreeEx(
|
|
pRecordList,
|
|
(BOOL)FreeType );
|
|
}
|
|
|
|
PDNS_RECORD
|
|
WINAPI
|
|
DnsRecordSetDetach(
|
|
IN OUT PDNS_RECORD pRR
|
|
)
|
|
{
|
|
return Dns_RecordSetDetach( pRR );
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// Timer (timer.c)
|
|
//
|
|
|
|
DWORD
|
|
GetCurrentTimeInSeconds(
|
|
VOID
|
|
)
|
|
{
|
|
return Dns_GetCurrentTimeInSeconds();
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
// Resource record type utilities (record.c)
|
|
//
|
|
|
|
BOOL _fastcall
|
|
DnsIsAMailboxType(
|
|
IN WORD wType
|
|
)
|
|
{
|
|
return Dns_IsAMailboxType( wType );
|
|
}
|
|
|
|
WORD
|
|
DnsRecordTypeForName(
|
|
IN PCHAR pszName,
|
|
IN INT cchNameLength
|
|
)
|
|
{
|
|
return Dns_RecordTypeForName( pszName, cchNameLength );
|
|
}
|
|
|
|
PCHAR
|
|
DnsRecordStringForType(
|
|
IN WORD wType
|
|
)
|
|
{
|
|
return Dns_RecordStringForType( wType );
|
|
}
|
|
|
|
PCHAR
|
|
DnsRecordStringForWritableType(
|
|
IN WORD wType
|
|
)
|
|
{
|
|
return Dns_RecordStringForWritableType( wType );
|
|
}
|
|
|
|
BOOL
|
|
DnsIsStringCountValidForTextType(
|
|
IN WORD wType,
|
|
IN WORD StringCount )
|
|
{
|
|
return Dns_IsStringCountValidForTextType( wType, StringCount );
|
|
}
|
|
|
|
|
|
//
|
|
// DCR_CLEANUP: these probably don't need exporting
|
|
//
|
|
|
|
DWORD
|
|
DnsWinsRecordFlagForString(
|
|
IN PCHAR pchName,
|
|
IN INT cchNameLength
|
|
)
|
|
{
|
|
return Dns_WinsRecordFlagForString( pchName, cchNameLength );
|
|
}
|
|
|
|
PCHAR
|
|
DnsWinsRecordFlagString(
|
|
IN DWORD dwFlag,
|
|
IN OUT PCHAR pchFlag
|
|
)
|
|
{
|
|
return Dns_WinsRecordFlagString( dwFlag, pchFlag );
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
// DNS utilities (dnsutil.c)
|
|
//
|
|
// DCR_DELETE: DnsStatusString routines should be able to use win32 API
|
|
//
|
|
|
|
//
|
|
// Remove marco definitions so we can compile
|
|
// The idea here is we can have the entry points in the Dll
|
|
// for any old code, BUT the macros (dnsapi.h) point at new entry points
|
|
// for freshly built modules.
|
|
//
|
|
|
|
#ifdef DnsStatusToErrorString_A
|
|
#undef DnsStatusToErrorString_A
|
|
#endif
|
|
|
|
LPSTR
|
|
_fastcall
|
|
DnsStatusString(
|
|
IN DNS_STATUS Status
|
|
)
|
|
{
|
|
return Dns_StatusString( Status );
|
|
}
|
|
|
|
|
|
DNS_STATUS
|
|
_fastcall
|
|
DnsMapRcodeToStatus(
|
|
IN BYTE ResponseCode
|
|
)
|
|
{
|
|
return Dns_MapRcodeToStatus( ResponseCode );
|
|
}
|
|
|
|
BYTE
|
|
_fastcall
|
|
DnsIsStatusRcode(
|
|
IN DNS_STATUS Status
|
|
)
|
|
{
|
|
return Dns_IsStatusRcode( Status );
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// Name routines (string.c and dnsutil.c)
|
|
//
|
|
|
|
LPSTR _fastcall
|
|
DnsGetDomainName(
|
|
IN LPSTR pszName
|
|
)
|
|
{
|
|
return Dns_GetDomainName( pszName );
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// String routines (string.c)
|
|
//
|
|
|
|
LPSTR
|
|
DnsCreateStringCopy(
|
|
IN PCHAR pchString,
|
|
IN DWORD cchString
|
|
)
|
|
{
|
|
return Dns_CreateStringCopy(
|
|
pchString,
|
|
cchString );
|
|
}
|
|
|
|
DWORD
|
|
DnsGetBufferLengthForStringCopy(
|
|
IN PCHAR pchString,
|
|
IN DWORD cchString,
|
|
IN BOOL fUnicodeIn,
|
|
IN BOOL fUnicodeOut
|
|
)
|
|
{
|
|
return (WORD) Dns_GetBufferLengthForStringCopy(
|
|
pchString,
|
|
cchString,
|
|
fUnicodeIn ? DnsCharSetUnicode : DnsCharSetUtf8,
|
|
fUnicodeOut ? DnsCharSetUnicode : DnsCharSetUtf8
|
|
);
|
|
}
|
|
|
|
//
|
|
// Need to
|
|
// - get this unexported or
|
|
// - real verions or
|
|
// - explicit UTF8-unicode converter if thats what's desired
|
|
//
|
|
|
|
PVOID
|
|
DnsCopyStringEx(
|
|
OUT PBYTE pBuffer,
|
|
IN PCHAR pchString,
|
|
IN DWORD cchString,
|
|
IN BOOL fUnicodeIn,
|
|
IN BOOL fUnicodeOut
|
|
)
|
|
{
|
|
DWORD resultLength;
|
|
|
|
resultLength =
|
|
Dns_StringCopy(
|
|
pBuffer,
|
|
NULL,
|
|
pchString,
|
|
cchString,
|
|
fUnicodeIn ? DnsCharSetUnicode : DnsCharSetUtf8,
|
|
fUnicodeOut ? DnsCharSetUnicode : DnsCharSetUtf8
|
|
);
|
|
|
|
return( pBuffer + resultLength );
|
|
}
|
|
|
|
PVOID
|
|
DnsStringCopyAllocateEx(
|
|
IN PCHAR pchString,
|
|
IN DWORD cchString,
|
|
IN BOOL fUnicodeIn,
|
|
IN BOOL fUnicodeOut
|
|
)
|
|
{
|
|
return Dns_StringCopyAllocate(
|
|
pchString,
|
|
cchString,
|
|
fUnicodeIn ? DnsCharSetUnicode : DnsCharSetUtf8,
|
|
fUnicodeOut ? DnsCharSetUnicode : DnsCharSetUtf8
|
|
);
|
|
}
|
|
|
|
//
|
|
// The new and improved string copy routines . . .
|
|
//
|
|
|
|
DWORD
|
|
DnsNameCopy(
|
|
OUT PBYTE pBuffer,
|
|
IN OUT PDWORD pdwBufLength,
|
|
IN PCHAR pchString,
|
|
IN DWORD cchString,
|
|
IN DNS_CHARSET CharSetIn,
|
|
IN DNS_CHARSET CharSetOut
|
|
)
|
|
{
|
|
return Dns_NameCopy( pBuffer,
|
|
pdwBufLength,
|
|
pchString,
|
|
cchString,
|
|
CharSetIn,
|
|
CharSetOut );
|
|
}
|
|
|
|
PVOID
|
|
DnsNameCopyAllocate(
|
|
IN PCHAR pchString,
|
|
IN DWORD cchString,
|
|
IN DNS_CHARSET CharSetIn,
|
|
IN DNS_CHARSET CharSetOut
|
|
)
|
|
{
|
|
return Dns_NameCopyAllocate ( pchString,
|
|
cchString,
|
|
CharSetIn,
|
|
CharSetOut );
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// String\Address mapping
|
|
//
|
|
// DCR: eliminate these exports
|
|
// DCR: fix these to SDK the real deal
|
|
//
|
|
// DCR: probably shouldn't expose alloc -- easy workaround for caller
|
|
//
|
|
|
|
PCHAR
|
|
DnsWriteReverseNameStringForIpAddress(
|
|
OUT PCHAR pBuffer,
|
|
IN IP4_ADDRESS Ip4Addr
|
|
)
|
|
{
|
|
return Dns_Ip4AddressToReverseName_A(
|
|
pBuffer,
|
|
Ip4Addr );
|
|
}
|
|
|
|
PCHAR
|
|
DnsCreateReverseNameStringForIpAddress(
|
|
IN IP4_ADDRESS Ip4Addr
|
|
)
|
|
{
|
|
return Dns_Ip4AddressToReverseNameAlloc_A( Ip4Addr );
|
|
}
|
|
|
|
|
|
//
|
|
// DCR_CLEANUP: pull these in favor of winsock IPv6 string routines
|
|
//
|
|
|
|
BOOL
|
|
DnsIpv6StringToAddress(
|
|
OUT PIP6_ADDRESS pIp6Addr,
|
|
IN PCHAR pchString,
|
|
IN DWORD dwStringLength
|
|
)
|
|
{
|
|
return Dns_Ip6StringToAddressEx_A(
|
|
pIp6Addr,
|
|
pchString,
|
|
dwStringLength );
|
|
}
|
|
|
|
VOID
|
|
DnsIpv6AddressToString(
|
|
OUT PCHAR pchString,
|
|
IN PIP6_ADDRESS pIp6Addr
|
|
)
|
|
{
|
|
Dns_Ip6AddressToString_A(
|
|
pchString,
|
|
pIp6Addr );
|
|
}
|
|
|
|
|
|
|
|
DNS_STATUS
|
|
DnsValidateDnsString_UTF8(
|
|
IN LPCSTR pszName
|
|
)
|
|
{
|
|
return Dns_ValidateDnsString_UTF8( pszName );
|
|
}
|
|
|
|
DNS_STATUS
|
|
DnsValidateDnsString_W(
|
|
IN LPCWSTR pszName
|
|
)
|
|
{
|
|
return Dns_ValidateDnsString_W( pszName );
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// Resource record utilities (rr*.c)
|
|
//
|
|
|
|
PDNS_RECORD
|
|
WINAPI
|
|
DnsAllocateRecord(
|
|
IN WORD wBufferLength
|
|
)
|
|
{
|
|
return Dns_AllocateRecord( wBufferLength );
|
|
}
|
|
|
|
|
|
PDNS_RECORD
|
|
DnsRecordBuild_UTF8(
|
|
IN OUT PDNS_RRSET pRRSet,
|
|
IN LPSTR pszOwner,
|
|
IN WORD wType,
|
|
IN BOOL fAdd,
|
|
IN UCHAR Section,
|
|
IN INT Argc,
|
|
IN PCHAR * Argv
|
|
)
|
|
{
|
|
return Dns_RecordBuild_A(
|
|
pRRSet,
|
|
pszOwner,
|
|
wType,
|
|
fAdd,
|
|
Section,
|
|
Argc,
|
|
Argv );
|
|
}
|
|
|
|
PDNS_RECORD
|
|
DnsRecordBuild_W(
|
|
IN OUT PDNS_RRSET pRRSet,
|
|
IN LPWSTR pszOwner,
|
|
IN WORD wType,
|
|
IN BOOL fAdd,
|
|
IN UCHAR Section,
|
|
IN INT Argc,
|
|
IN PWCHAR * Argv
|
|
)
|
|
{
|
|
return Dns_RecordBuild_W(
|
|
pRRSet,
|
|
pszOwner,
|
|
wType,
|
|
fAdd,
|
|
Section,
|
|
Argc,
|
|
Argv );
|
|
}
|
|
|
|
//
|
|
// Message processing
|
|
//
|
|
|
|
DNS_STATUS
|
|
WINAPI
|
|
DnsExtractRecordsFromMessage_W(
|
|
IN PDNS_MESSAGE_BUFFER pDnsBuffer,
|
|
IN WORD wMessageLength,
|
|
OUT PDNS_RECORD * ppRecord
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
None.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
return Dns_ExtractRecordsFromBuffer(
|
|
pDnsBuffer,
|
|
wMessageLength,
|
|
TRUE,
|
|
ppRecord );
|
|
}
|
|
|
|
|
|
DNS_STATUS
|
|
WINAPI
|
|
DnsExtractRecordsFromMessage_UTF8(
|
|
IN PDNS_MESSAGE_BUFFER pDnsBuffer,
|
|
IN WORD wMessageLength,
|
|
OUT PDNS_RECORD * ppRecord
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
None.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
return Dns_ExtractRecordsFromBuffer(
|
|
pDnsBuffer,
|
|
wMessageLength,
|
|
FALSE,
|
|
ppRecord );
|
|
}
|
|
|
|
|
|
//
|
|
// Debug sharing
|
|
//
|
|
|
|
PDNS_DEBUG_INFO
|
|
DnsApiSetDebugGlobals(
|
|
IN OUT PDNS_DEBUG_INFO pInfo
|
|
)
|
|
{
|
|
return Dns_SetDebugGlobals( pInfo );
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// Config UI, ipconfig backcompat
|
|
//
|
|
// DCR_CLEANUP: Backcompat query config stuff -- yank once clean cycle
|
|
//
|
|
|
|
|
|
//
|
|
// DCR: Questionable exports
|
|
//
|
|
|
|
LPSTR
|
|
DnsCreateStandardDnsNameCopy(
|
|
IN PCHAR pchName,
|
|
IN DWORD cchName,
|
|
IN DWORD dwFlag
|
|
)
|
|
{
|
|
return Dns_CreateStandardDnsNameCopy(
|
|
pchName,
|
|
cchName,
|
|
dwFlag );
|
|
}
|
|
|
|
|
|
//
|
|
// DCR_CLEANUP: who is using this?
|
|
//
|
|
|
|
DWORD
|
|
DnsDowncaseDnsNameLabel(
|
|
OUT PCHAR pchResult,
|
|
IN PCHAR pchLabel,
|
|
IN DWORD cchLabel,
|
|
IN DWORD dwFlags
|
|
)
|
|
{
|
|
return Dns_DowncaseNameLabel(
|
|
pchResult,
|
|
pchLabel,
|
|
cchLabel,
|
|
dwFlags );
|
|
}
|
|
|
|
//
|
|
// DCR_CLEANUP: who is using my direct UTF8 conversions AS API!
|
|
//
|
|
|
|
DWORD
|
|
_fastcall
|
|
DnsUnicodeToUtf8(
|
|
IN PWCHAR pwUnicode,
|
|
IN DWORD cchUnicode,
|
|
OUT PCHAR pchResult,
|
|
IN DWORD cchResult
|
|
)
|
|
{
|
|
return Dns_UnicodeToUtf8(
|
|
pwUnicode,
|
|
cchUnicode,
|
|
pchResult,
|
|
cchResult );
|
|
}
|
|
|
|
DWORD
|
|
_fastcall
|
|
DnsUtf8ToUnicode(
|
|
IN PCHAR pchUtf8,
|
|
IN DWORD cchUtf8,
|
|
OUT PWCHAR pwResult,
|
|
IN DWORD cwResult
|
|
)
|
|
{
|
|
return Dns_Utf8ToUnicode(
|
|
pchUtf8,
|
|
cchUtf8,
|
|
pwResult,
|
|
cwResult );
|
|
}
|
|
|
|
DNS_STATUS
|
|
DnsValidateUtf8Byte(
|
|
IN BYTE chUtf8,
|
|
IN OUT PDWORD pdwTrailCount
|
|
)
|
|
{
|
|
return Dns_ValidateUtf8Byte(
|
|
chUtf8,
|
|
pdwTrailCount );
|
|
}
|
|
|
|
|
|
//
|
|
// Old cluster call
|
|
//
|
|
// DCR: cleanup -- remove once cluster fixed up
|
|
//
|
|
|
|
VOID
|
|
DnsNotifyResolverClusterIp(
|
|
IN IP_ADDRESS ClusterIp,
|
|
IN BOOL fAdd
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Notify resolver of cluster IP coming on\offline.
|
|
|
|
Arguments:
|
|
|
|
ClusterIp -- cluster IP
|
|
|
|
fAdd -- TRUE if coming online; FALSE if offline.
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
{
|
|
SOCKADDR_IN sockaddrIn;
|
|
|
|
DNSDBG( TRACE, (
|
|
"DnsNotifyResolverClusterIp( %08x, %d )\n",
|
|
ClusterIp,
|
|
fAdd ));
|
|
|
|
sockaddrIn.sin_family = AF_INET;
|
|
sockaddrIn.sin_addr.s_addr = ClusterIp;
|
|
|
|
DnsRegisterClusterAddress(
|
|
0xd734453d,
|
|
NULL, // no name
|
|
(PSOCKADDR) & sockaddrIn,
|
|
fAdd
|
|
? DNS_CLUSTER_ADD
|
|
: DNS_CLUSTER_DELETE_IP
|
|
);
|
|
}
|
|
|
|
//
|
|
// backcompat for macros
|
|
// - DNS server list
|
|
//
|
|
// this is called without dnsapi.h include somewhere in IIS
|
|
//
|
|
|
|
#undef DnsGetDnsServerList
|
|
|
|
DWORD
|
|
DnsGetDnsServerList(
|
|
OUT PIP4_ARRAY * ppDnsArray
|
|
)
|
|
{
|
|
*ppDnsArray = GetDnsServerList( TRUE );
|
|
|
|
// if no servers read, return
|
|
|
|
if ( !*ppDnsArray )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return( (*ppDnsArray)->AddrCount );
|
|
}
|
|
|
|
//
|
|
// Config UI, ipconfig backcompat
|
|
//
|
|
// DCR_CLEANUP: this is called without dnsapi.h include somewhere in DHCP
|
|
//
|
|
|
|
#undef DnsGetPrimaryDomainName_A
|
|
|
|
#define PrivateQueryConfig( Id ) DnsQueryConfigAllocEx( Id, NULL, FALSE )
|
|
|
|
PSTR
|
|
WINAPI
|
|
DnsGetPrimaryDomainName_A(
|
|
VOID
|
|
)
|
|
{
|
|
return PrivateQueryConfig( DnsConfigPrimaryDomainName_A );
|
|
}
|
|
|
|
//
|
|
// End export.c
|
|
//
|