#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 - Dump a CLIENT_QELEMENT.\n"); dprintf("\tdprint_BUCKET - Dump a BUCKET.\n"); dprintf("\tdprint_ZONE_INFO \n"); dprintf("\tdprint_SERVER_INFO - Dump SrvCfg structure \n"); dprintf("\tdprint_ResourceRecord - 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 */