windows-nt/Source/XPSP1/NT/ds/dns/dbgexts/export.c
2020-09-26 16:20:57 +08:00

499 lines
21 KiB
C

#include "header.h"
//
// This is the struct we want to dump.
//
//
// Dumps symbol information about Pointer.
//
void dprintSymbolPtr( void* Pointer)
{
UCHAR SymbolName[ 80 ];
ULONG Displacement;
GetSymbol( Pointer, SymbolName, &Displacement );
dprintf( "%-10lx (%s + 0x%X)%s\n", Pointer, SymbolName, Displacement );
}
// ========================================================================
// Reads the dword at p.
DWORD ReadDword( void * p )
{
ULONG result;
DWORD val;
if ( !ReadMemory( p, &val, sizeof(DWORD), &result )){
// dprintf( "ReadDword:Invalid DWORD * p = 0x%08x\n", p );
val = 0;
}
return val;
}
WORD ReadWord( void * p )
{
ULONG result;
WORD val;
if ( !ReadMemory( p, &val, sizeof(WORD), &result )){
// dprintf( "ReadWord:Invalid DWORD * p = 0x%08x\n", p );
val = 0;
}
return val;
}
// Read the string[n] at p, updates userstring[];
// Default len is 20 chars.
char userstring[255];
char * ReadStr( char * p, int len )
{
ULONG result;
if( len <= 0 )
len = 20;
else if( len > sizeof( userstring ) )
len = sizeof( userstring );
if ( !ReadMemory( p, userstring, len, &result )){
sprintf( userstring, "char p[%d] @ 0x%08x unreadable", len, p );
}
userstring[len] = '\0';
return userstring;
}
//
// Dump the node p, and returns pointer to next node.
//
//
// Exported functions.
//
DECLARE_API( help )
{
INIT_API();
dprintf("Dnsapi debugger extension commands:\n\n");
dprintf("\tdprint_CLIENT_QELEMENT <addr> - Dump a CLIENT_QELEMENT.\n");
dprintf("\tdprint_BUCKET <addr> - Dump a BUCKET.\n");
dprintf("\tdprint_ZONE_INFO <addr> \n");
dprintf("\tdprint_SERVER_INFO <addr> - Dump SrvCfg structure \n");
dprintf("\tdprint_ResourceRecord <addr> - Dump RR \n");
return;
}
//
// Usage: !mosh.node 002509e0
//
void print_CLIENT_QELEMENT( char* message, struct _CLIENT_QELEMENT * s );
DECLARE_API( dprint_CLIENT_QELEMENT ){ struct _CLIENT_QELEMENT * p = NULL;
struct _CLIENT_QELEMENT Q; ULONG result; INIT_API(); if( *args )
sscanf( args, "%lx", &p );
if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
dprintf("Could not read address 0x%08x\n", p ); return; }
print_CLIENT_QELEMENT( "none", &Q ); return;}
// ==================================================// _CLIENT_QELEMENTvoid
void
print_CLIENT_QELEMENT( char* message, struct _CLIENT_QELEMENT * s ){
if( message ){ dprintf( "%s\n", message ); }
if( s == NULL ){ dprintf( "struct _CLIENT_QELEMENT is NULL.\n");
return; } dprintf("struct _CLIENT_QELEMENT = {\n" );
dprintf(" List = 0x%08x \n", s->List );
dprintf(" lpstrAdapterName = %s \n", ReadStr(s->lpstrAdapterName,0) );
dprintf(" lpstrHostName = %s \n", ReadStr(s->lpstrHostName, 0) );
dprintf(" pRegisterStatus = 0x%08x \n", ReadDword( s->pRegisterStatus ) );
dprintf(" pHostAddrs = 0x%08x \n", ReadDword( s->pHostAddrs ) );
dprintf(" dwHostAddrCount = %d \n", s->dwHostAddrCount );
dprintf(" lpstrDomainName = %s \n", ReadStr(s->lpstrDomainName, 0) );
dprintf(" pipDnsServerList = 0x%08x \n", ReadDword( s->pipDnsServerList ) );
dprintf(" dwDnsServerCount = %d \n", s->dwDnsServerCount );
dprintf(" dwTTL = %d \n", s->dwTTL );
dprintf(" dwFlags = %d \n", s->dwFlags );
dprintf(" fNewElement = 0x%08x \n", s->fNewElement );
dprintf(" fRemove = 0x%08x \n", s->fRemove );
dprintf( "}; // struct _CLIENT_QELEMENT.\n"); return;
} /* print_CLIENT_QELEMENT */
void print_BUCKET( char* message, struct _BUCKET * s );
DECLARE_API( dprint_BUCKET ){ struct _BUCKET * p = NULL;
struct _BUCKET Q; ULONG result; INIT_API(); if( *args )
sscanf( args, "%lx", &p );
if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
dprintf("Could not read address 0x%08x\n", p ); return; }
print_BUCKET( "none", &Q ); return;}
// ==================================================// _BUCKETvoid
VOID
print_BUCKET( char* message, struct _BUCKET * s ){ if( message ){
dprintf( "%s\n", message ); } if( s == NULL ){
dprintf( "struct _BUCKET is NULL.\n"); return; }
dprintf("struct _BUCKET = {\n" );
dprintf(" List = 0x%08x \n", s->List );
dprintf(" ppQList = 0x%08x \n", ReadDword(s->ppQList) );
dprintf(" dwListCount = %d \n", s->dwListCount );
dprintf(" dwRetryTime = %d \n", s->dwRetryTime );
dprintf(" HostName = %s \n", ReadStr(s->HostName, 0) );
dprintf(" DomainName = %s \n", ReadStr(s->DomainName, 0));
dprintf(" fSucceeded = 0x%08x \n", s->fSucceeded );
dprintf(" pRelatedBucket = 0x%08x \n", s->pRelatedBucket );
dprintf(" fRemove = 0x%08x \n", s->fRemove );
dprintf(" dwRetryFactor = %d \n", s->dwRetryFactor );
dprintf( "}; // struct _BUCKET.\n"); return;} /* print_BUCKET */
void
print_SERVER_INFO( char* message, struct _SERVER_INFO * s );
DECLARE_API( dprint_SERVER_INFO ){ struct _SERVER_INFO * p = NULL;
struct _SERVER_INFO Q; ULONG result; INIT_API(); if( *args )
sscanf( args, "%lx", &p );
if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
dprintf("Could not read address 0x%08x\n", p ); return; }
print_SERVER_INFO( "none", &Q ); return;}
// ==================================================// _SERVER_INFO
void
print_SERVER_INFO( char* message, struct _SERVER_INFO * s ){
if( message ){ dprintf( "%s\n", message ); }
if( s == NULL ){ dprintf( "struct _SERVER_INFO is NULL.\n");
return; } dprintf("struct _SERVER_INFO = {\n" );
dprintf(" dwVersion = %d \n", s->dwVersion );
dprintf(" pszServerName = %s \n", ReadStr(s->pszServerName,0) );
dprintf(" pszServerDomainName = %s \n", ReadStr(s->pszServerDomainName,0));
dprintf(" fStarted = 0x%08x \n", s->fStarted );
dprintf(" fThreadAlert = 0x%08x \n", s->fThreadAlert );
dprintf(" fServiceExit = 0x%08x \n", s->fServiceExit );
dprintf(" hContinueEvent = 0x%08x \n", s->hContinueEvent );
dprintf(" hShutdownEvent = 0x%08x \n", s->hShutdownEvent );
dprintf(" fWinsInitialized = 0x%08x \n", s->fWinsInitialized );
dprintf(" fMemoryException = 0x%08x \n", s->fMemoryException );
dprintf(" fAVException = 0x%08x \n", s->fAVException );
dprintf(" dwCurrentTime = %d \n", s->dwCurrentTime );
dprintf(" fBootRegistry = %d \n", s->fBootRegistry );
dprintf(" fBootFileDirty = %d \n", s->fBootFileDirty );
dprintf(" cDsZones = %d \n", s->cDsZones );
dprintf(" fRemoteDs = %d \n", s->fRemoteDs );
dprintf(" fDatabaseSupported = %d \n", s->fDatabaseSupported );
dprintf(" pszDatabaseDirectory = 0x%08x \n", s->pszDatabaseDirectory );
dprintf(" dwRpcProtocol = %d \n", s->dwRpcProtocol );
dprintf(" dwLogLevel = %d \n", s->dwLogLevel );
dprintf(" dwDebugLevel = %d \n", s->dwDebugLevel );
dprintf(" aipServerAddrs = 0x%08x \n", ReadDword( s->aipServerAddrs ) );
dprintf(" aipBoundAddrs = 0x%08x \n", ReadDword( s->aipBoundAddrs ) );
dprintf(" aipListenAddrs = 0x%08x \n", ReadDword( s->aipListenAddrs ) );
dprintf(" fListenAddrsSet = %d \n", s->fListenAddrsSet );
dprintf(" fListenAddrsStale = %d \n", s->fListenAddrsStale );
dprintf(" fDisjointNets = %d \n", s->fDisjointNets );
dprintf(" fNoTcp = %d \n", s->fNoTcp );
dprintf(" fRecurseOnDnsPort = %d \n", s->fRecurseOnDnsPort );
dprintf(" aipForwarders = 0x%08x \n", ReadDword( s->aipForwarders ) );
dprintf(" dwForwardTimeout = %d \n", s->dwForwardTimeout );
dprintf(" fSlave = %d \n", s->fSlave );
dprintf(" fNoRecursion = %d \n", s->fNoRecursion );
dprintf(" fRecursionAvailable = %d \n", s->fRecursionAvailable );
dprintf(" dwRecursionRetry = %d \n", s->dwRecursionRetry );
dprintf(" dwRecursionTimeout = %d \n", s->dwRecursionTimeout );
dprintf(" dwMaxCacheTtl = %d \n", s->dwMaxCacheTtl );
dprintf(" fSecureResponses = %d \n", s->fSecureResponses );
dprintf(" fAllowUpdate = %d \n", s->fAllowUpdate );
dprintf(" fExtendedCharNames = %d \n", s->fExtendedCharNames );
dprintf(" dwNameCheckFlag = %d \n", s->dwNameCheckFlag );
dprintf(" dwCleanupInterval = %d \n", s->dwCleanupInterval );
dprintf(" fNoAutoReverseZones = %d \n", s->fNoAutoReverseZones );
dprintf(" fAutoCacheUpdate = %d \n", s->fAutoCacheUpdate );
dprintf(" fRoundRobin = %d \n", s->fRoundRobin );
dprintf(" fLocalNetPriority = %d \n", s->fLocalNetPriority );
dprintf(" cAddressAnswerLimit = %d \n", s->cAddressAnswerLimit );
dprintf(" fBindSecondaries = %d \n", s->fBindSecondaries );
dprintf(" fWriteAuthoritySoa = %d \n", s->fWriteAuthoritySoa );
dprintf(" fWriteAuthorityNs = %d \n", s->fWriteAuthorityNs );
dprintf(" fWriteAuthority = %d \n", s->fWriteAuthority );
dprintf(" fStrictFileParsing = %d \n", s->fStrictFileParsing );
dprintf(" fLooseWildcarding = %d \n", s->fLooseWildcarding );
dprintf( "}; // struct _SERVER_INFO.\n"); return;
} /* print_SERVER_INFO */
// Generated Mon Aug 18 20:53:32 1997 on MohsinA5 1.2.13
void print_ZONE_INFO( char* message, ZONE_INFO * s );
DECLARE_API( dprint_ZONE_INFO )
{
ZONE_INFO * p = NULL;
ZONE_INFO Q;
ULONG result;
INIT_API();
if( *args )
sscanf( args, "%lx", &p );
if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
dprintf("Could not read address 0x%08x\n", p );
return;
}
print_ZONE_INFO( "none", &Q );
return;
}
// ==================================================
// ZONE_INFO
void
print_ZONE_INFO( char* message, ZONE_INFO * s )
{
if( message ){
dprintf( "%s\n", message );
}
if( s == NULL ){
dprintf( "ZONE_INFO is NULL.\n");
return;
}
dprintf("ZONE_INFO = {\n" );
dprintf(" ListEntry = 0x%08x \n", s->ListEntry );
dprintf(" pZoneRoot = 0x%08x \n", ReadDword( s->pZoneRoot ) );
dprintf(" pszZoneName = %s \n", ReadStr(s->pszZoneName,0) );
dprintf(" pszDataFile = %s \n", ReadStr(s->pszDataFile,0) );
dprintf(" pszLogFile = %s \n", ReadStr(s->pszLogFile,0) );
dprintf(" pszZoneDN = %s \n", ReadStr(s->pszZoneDN,0) );
dprintf(" dwLastUsn = %s \n", ReadStr(s->szLastUsn,0) );
dprintf(" ipReverse = 0x%08x \n", s->ipReverse );
dprintf(" ipReverseMask = 0x%08x \n", s->ipReverseMask );
dprintf(" pSoaRR = 0x%08x \n", ReadDword( s->pSoaRR ) );
dprintf(" dwSerialNo = %d \n", s->dwSerialNo );
dprintf(" dwLoadSerialNo = %d \n", s->dwLoadSerialNo );
dprintf(" dwLastXfrSerialNo = %d \n", s->dwLastXfrSerialNo );
dprintf(" dwNewSerialNo = %d \n", s->dwNewSerialNo );
dprintf(" dwDefaultTtl = %d \n", s->dwDefaultTtl );
dprintf(" dwDefaultTtlHostOrder = %d \n", s->dwDefaultTtlHostOrder );
dprintf(" hfileUpdateLog = 0x%08x \n", s->hfileUpdateLog );
dprintf(" iUpdateLogCount = %d \n", s->iUpdateLogCount );
dprintf(" UpdateList = 0x%08x \n", s->UpdateList );
dprintf(" iRRCount = %d \n", s->iRRCount );
dprintf(" aipSecondaries = 0x%08x \n", ReadDword( s->aipSecondaries ) );
dprintf(" aipNameServers = 0x%08x \n", ReadDword( s->aipNameServers ) );
dprintf(" dwNextTransferTime = %d \n", s->dwNextTransferTime );
dprintf(" ipPrimary = 0x%08x \n", s->ipPrimary );
dprintf(" aipMasters = 0x%08x \n", ReadDword( s->aipMasters ) );
dprintf(" dwNextSoaCheckTime = %d \n", s->dwNextSoaCheckTime );
dprintf(" dwExpireTime = %d \n", s->dwExpireTime );
dprintf(" ipNotifier = 0x%08x \n", s->ipNotifier );
dprintf(" ipFreshMaster = 0x%08x \n", s->ipFreshMaster );
dprintf(" pszMasterIpString = 0x%08x \n", s->pszMasterIpString );
dprintf(" dwZoneRecvStartTime = %d \n", s->dwZoneRecvStartTime );
dprintf(" pLocalWinsRR = 0x%08x \n", ReadDword( s->pLocalWinsRR ) );
dprintf(" pWinsRR = 0x%08x \n", ReadDword( s->pWinsRR ) );
dprintf(" dwLockingThreadId = %d \n", s->dwLockingThreadId );
dprintf(" chZoneType = %c \n", s->chZoneType );
dprintf(" cZoneNameLabelCount = 0x%08x \n", s->cZoneNameLabelCount );
dprintf(" fReverse = 0x%08x \n", s->fReverse );
dprintf(" fDsIntegrated = 0x%08x \n", s->fDsIntegrated );
dprintf(" fDsLoadVersion = 0x%08x \n", s->fDsLoadVersion );
dprintf(" fUnicode = 0x%08x \n", s->fUnicode );
dprintf(" fAutoCreated = 0x%08x \n", s->fAutoCreated );
dprintf(" fSecureSecondaries = 0x%08x \n", s->fSecureSecondaries );
dprintf(" fAllowUpdate = 0x%08x \n", s->fAllowUpdate );
dprintf(" fLogUpdates = 0x%08x \n", s->fLogUpdates );
dprintf(" fPaused = 0x%08x \n", s->fPaused );
dprintf(" fDirty = 0x%08x \n", s->fDirty );
dprintf(" fShutdown = 0x%08x \n", s->fShutdown );
dprintf(" fNotified = 0x%08x \n", s->fNotified );
dprintf(" fStale = 0x%08x \n", s->fStale );
dprintf(" fEmpty = 0x%08x \n", s->fEmpty );
dprintf(" fLocked = 0x%08x \n", s->fLocked );
dprintf(" fUpdateLock = 0x%08x \n", s->fUpdateLock );
dprintf(" fXfrRecvLock = 0x%08x \n", s->fXfrRecvLock );
dprintf(" fFileWriteLock = 0x%08x \n", s->fFileWriteLock );
dprintf(" cReaders = 0x%08x \n", s->cReaders );
dprintf( "}; // struct ZONE_INFO.\n");
return;
} /* print_ZONE_INFO */
// Generated Mon Aug 18 21:22:54 1997 on MohsinA5 1.2.13
void print_ResourceRecord( char* message, struct _ResourceRecord * s );
DECLARE_API( dprint_ResourceRecord )
{
struct _ResourceRecord * p = NULL;
struct _ResourceRecord Q;
ULONG result;
INIT_API();
if( *args )
sscanf( args, "%lx", &p );
if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
dprintf("Could not read address 0x%08x\n", p );
return;
}
print_ResourceRecord( "none", &Q );
return;
}
// ==================================================
// ResourceRecord
void
print_ResourceRecord( char* message, struct _ResourceRecord * s )
{
if( message ){
dprintf( "%s\n", message );
}
if( s == NULL ){
dprintf( "struct ResourceRecord is NULL.\n");
return;
}
dprintf("struct _ResourceRecord = {\n" );
dprintf(" pRRNext = 0x%08x \n", s->pRRNext );
dprintf(" RecordRank = 0x%08x \n", s->RecordRank );
dprintf(" RRReserved = 0x%08x \n", s->RRReserved );
dprintf(" wRRFlags = %d \n", s->wRRFlags );
dprintf(" wType = %d \n", s->wType );
dprintf(" wDataLength = %d \n", s->wDataLength );
dprintf(" dwTtlSeconds = %d \n", s->dwTtlSeconds );
dprintf(" ipAddress = 0x%08x \n", s->Data.A.ipAddress );
dprintf(" ipv6Address = 0x%08x \n", s->Data.AAAA.ipv6Address );
dprintf(" pnodePrimaryServer = 0x%08x \n", ReadDword( s->Data.SOA.pnodePrimaryServer ) );
dprintf(" pnodeZoneAdmin = 0x%08x \n", ReadDword( s->Data.SOA.pnodeZoneAdmin ) );
dprintf(" dwSerialNo = %d \n", s->Data.SOA.dwSerialNo );
dprintf(" dwRefresh = %d \n", s->Data.SOA.dwRefresh );
dprintf(" dwRetry = %d \n", s->Data.SOA.dwRetry );
dprintf(" dwExpire = %d \n", s->Data.SOA.dwExpire );
dprintf(" dwMinimumTtl = %d \n", s->Data.SOA.dwMinimumTtl );
dprintf(" pnodeAddress = 0x%08x \n", ReadDword( s->Data.PTR.pnodeAddress ) );
dprintf(" pnodeMailbox = 0x%08x \n", ReadDword( s->Data.MINFO.pnodeMailbox ) );
dprintf(" pnodeErrorsMailbox = 0x%08x \n", ReadDword( s->Data.MINFO.pnodeErrorsMailbox ) );
dprintf( "}; // struct ResourceRecord.\n");
return;
} /* print_ResourceRecord */
void print_ADDITIONAL_INFO( char* message, ADDITIONAL_INFO * s );
DECLARE_API( dprint_ADDITIONAL_INFO )
{
ADDITIONAL_INFO * p = NULL;
ADDITIONAL_INFO Q;
ULONG result;
INIT_API();
if( *args )
sscanf( args, "%lx", &p );
if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
dprintf("Could not read address 0x%08x\n", p );
return;
}
print_ADDITIONAL_INFO( "none", &Q );
return;
}
// ==================================================
// _ADDITIONAL_INFO
void
print_ADDITIONAL_INFO( char* message, ADDITIONAL_INFO * s )
{
if( message ){
dprintf( "%s\n", message );
}
if( s == NULL ){
dprintf( "ADDITIONAL_INFO is NULL.\n");
return;
}
dprintf("ADDITIONAL_INFO = {\n" );
dprintf(" cMaxCount = %d \n", s->cMaxCount );
dprintf(" cCount = %d \n", s->cCount );
dprintf(" iIndex = %d \n", s->iIndex );
dprintf( "}; // ADDITIONAL_INFO.\n");
return;
} /* print_ADDITIONAL_INFO */
void print_DNS_MSGINFO( char* message, struct _DNS_MSGINFO * s );
DECLARE_API( dprint_DNS_MSGINFO ){ struct _DNS_MSGINFO * p = NULL;
struct _DNS_MSGINFO Q; ULONG result; INIT_API(); if( *args )
sscanf( args, "%lx", &p );
if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
dprintf("Could not read address 0x%08x\n", p ); return; }
print_DNS_MSGINFO( "none", &Q ); return;}
// ==================================================// _DNS_MSGINFO
void
print_DNS_MSGINFO( char* message, struct _DNS_MSGINFO * s ){
if( message ){ dprintf( "%s\n", message ); }
if( s == NULL ){ dprintf( "struct _DNS_MSGINFO is NULL.\n");
return; } dprintf("struct _DNS_MSGINFO = {\n" );
dprintf(" ListEntry = 0x%08x \n", s->ListEntry );
dprintf(" Socket = 0x%08x \n", s->Socket );
dprintf(" RemoteAddressLength = %d \n", s->RemoteAddressLength );
dprintf(" RemoteAddress = 0x%08x \n", s->RemoteAddress );
dprintf(" BufferLength = %d \n", s->BufferLength );
dprintf(" pBufferEnd = %s \n", ReadStr( s->pBufferEnd, 20 ) );
dprintf(" pCurrentCountField = %d \n", ReadDword( s->pCurrentCountField ) );
dprintf(" pCurrent = 0x%08x \n", ReadDword( s->pCurrent ) );
dprintf(" pnodeCurrent = 0x%08x \n", ReadDword( s->pnodeCurrent ) );
dprintf(" wTypeCurrent = %d \n", s->wTypeCurrent );
dprintf(" wOffsetCurrent = %d \n", s->wOffsetCurrent );
dprintf(" pQuestion = 0x%08x \n", ReadDword( s->pQuestion ) );
dprintf(" wQuestionType = %d \n", s->wQuestionType );
dprintf(" wQueuingXid = %d \n", s->wQueuingXid );
dprintf(" dwQueryTime = %d \n", s->dwQueryTime );
dprintf(" dwQueuingTime = %d \n", s->dwQueuingTime );
dprintf(" dwExpireTime = %d \n", s->dwExpireTime );
dprintf(" OriginalSocket = 0x%08x \n", s->OriginalSocket );
dprintf(" ipOriginal = 0x%08x \n", s->ipOriginal );
dprintf(" wOriginalPort = %d \n", s->wOriginalPort );
dprintf(" wOriginalXid = %d \n", s->wOriginalXid );
dprintf(" pRecurseMsg = 0x%08x \n", s->pRecurseMsg );
dprintf(" pnodeRecurseRetry = 0x%08x \n", ReadDword( s->pnodeRecurseRetry ) );
dprintf(" pVisitedNs = 0x%08x \n", ReadDword( s->pVisitedNs ) );
dprintf(" pConnection = 0x%08x \n", ReadDword( s->pConnection ) );
dprintf(" pchRecv = %s \n", ReadStr( s->pchRecv, 20 ) );
dprintf(" pzoneCurrent = 0x%08x \n", ReadDword( s->pzoneCurrent ) );
dprintf(" pWinsRR = 0x%08x \n", ReadDword( s->pWinsRR ) );
dprintf(" ipNbstat = 0x%08x \n", s->ipNbstat );
dprintf(" pNbstat = 0x%08x \n", ReadDword( s->pNbstat ) );
dprintf(" dwNbtInterfaceMask = %d \n", s->dwNbtInterfaceMask );
dprintf(" fDelete = 0x%08x \n", s->fDelete );
dprintf(" fTcp = 0x%08x \n", s->fTcp );
dprintf(" fMessageComplete = 0x%08x \n", s->fMessageComplete );
dprintf(" fDoAdditional = 0x%08x \n", s->fDoAdditional );
dprintf(" fRecursePacket = 0x%08x \n", s->fRecursePacket );
dprintf(" fRecurseIfNecessary = 0x%08x \n", s->fRecurseIfNecessary );
dprintf(" fQuestionRecursed = 0x%08x \n", s->fQuestionRecursed );
dprintf(" fQuestionCompleted = 0x%08x \n", s->fQuestionCompleted );
dprintf(" fRecurseTimeoutWait = 0x%08x \n", s->fRecurseTimeoutWait );
dprintf(" nForwarder = %c \n", s->nForwarder );
dprintf(" fReplaceCname = 0x%08x \n", s->fReplaceCname );
dprintf(" cCnameAnswerCount = 0x%08x \n", s->cCnameAnswerCount );
dprintf(" fBindTransfer = 0x%08x \n", s->fBindTransfer );
dprintf(" fNoCompressionWrite = 0x%08x \n", s->fNoCompressionWrite );
dprintf(" fWins = 0x%08x \n", s->fWins );
dprintf(" fNbstatResponded = 0x%08x \n", s->fNbstatResponded );
dprintf(" cchWinsName = 0x%08x \n", s->cchWinsName );
dprintf(" pLooknameQuestion = 0x%08x \n", ReadDword( s->pLooknameQuestion ) );
dprintf(" Additional = 0x%08x \n", s->Additional );
dprintf(" Compression = 0x%08x \n", s->Compression );
dprintf(" BytesToReceive = %d \n", s->BytesToReceive );
dprintf(" MessageLength = %d \n", s->MessageLength );
dprintf(" MessageHead = 0x%08x \n", s->MessageHead );
dprintf( "}; // struct _DNS_MSGINFO.\n"); return;
} /* print_DNS_MSGINFO */