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.
498 lines
21 KiB
498 lines
21 KiB
#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 */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|