Source code of Windows XP (NT5)
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

  1. #include "header.h"
  2. //
  3. // This is the struct we want to dump.
  4. //
  5. //
  6. // Dumps symbol information about Pointer.
  7. //
  8. void dprintSymbolPtr( void* Pointer)
  9. {
  10. UCHAR SymbolName[ 80 ];
  11. ULONG Displacement;
  12. GetSymbol( Pointer, SymbolName, &Displacement );
  13. dprintf( "%-10lx (%s + 0x%X)%s\n", Pointer, SymbolName, Displacement );
  14. }
  15. // ========================================================================
  16. // Reads the dword at p.
  17. DWORD ReadDword( void * p )
  18. {
  19. ULONG result;
  20. DWORD val;
  21. if ( !ReadMemory( p, &val, sizeof(DWORD), &result )){
  22. // dprintf( "ReadDword:Invalid DWORD * p = 0x%08x\n", p );
  23. val = 0;
  24. }
  25. return val;
  26. }
  27. WORD ReadWord( void * p )
  28. {
  29. ULONG result;
  30. WORD val;
  31. if ( !ReadMemory( p, &val, sizeof(WORD), &result )){
  32. // dprintf( "ReadWord:Invalid DWORD * p = 0x%08x\n", p );
  33. val = 0;
  34. }
  35. return val;
  36. }
  37. // Read the string[n] at p, updates userstring[];
  38. // Default len is 20 chars.
  39. char userstring[255];
  40. char * ReadStr( char * p, int len )
  41. {
  42. ULONG result;
  43. if( len <= 0 )
  44. len = 20;
  45. else if( len > sizeof( userstring ) )
  46. len = sizeof( userstring );
  47. if ( !ReadMemory( p, userstring, len, &result )){
  48. sprintf( userstring, "char p[%d] @ 0x%08x unreadable", len, p );
  49. }
  50. userstring[len] = '\0';
  51. return userstring;
  52. }
  53. //
  54. // Dump the node p, and returns pointer to next node.
  55. //
  56. //
  57. // Exported functions.
  58. //
  59. DECLARE_API( help )
  60. {
  61. INIT_API();
  62. dprintf("Dnsapi debugger extension commands:\n\n");
  63. dprintf("\tdprint_CLIENT_QELEMENT <addr> - Dump a CLIENT_QELEMENT.\n");
  64. dprintf("\tdprint_BUCKET <addr> - Dump a BUCKET.\n");
  65. dprintf("\tdprint_ZONE_INFO <addr> \n");
  66. dprintf("\tdprint_SERVER_INFO <addr> - Dump SrvCfg structure \n");
  67. dprintf("\tdprint_ResourceRecord <addr> - Dump RR \n");
  68. return;
  69. }
  70. //
  71. // Usage: !mosh.node 002509e0
  72. //
  73. void print_CLIENT_QELEMENT( char* message, struct _CLIENT_QELEMENT * s );
  74. DECLARE_API( dprint_CLIENT_QELEMENT ){ struct _CLIENT_QELEMENT * p = NULL;
  75. struct _CLIENT_QELEMENT Q; ULONG result; INIT_API(); if( *args )
  76. sscanf( args, "%lx", &p );
  77. if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
  78. dprintf("Could not read address 0x%08x\n", p ); return; }
  79. print_CLIENT_QELEMENT( "none", &Q ); return;}
  80. // ==================================================// _CLIENT_QELEMENTvoid
  81. void
  82. print_CLIENT_QELEMENT( char* message, struct _CLIENT_QELEMENT * s ){
  83. if( message ){ dprintf( "%s\n", message ); }
  84. if( s == NULL ){ dprintf( "struct _CLIENT_QELEMENT is NULL.\n");
  85. return; } dprintf("struct _CLIENT_QELEMENT = {\n" );
  86. dprintf(" List = 0x%08x \n", s->List );
  87. dprintf(" lpstrAdapterName = %s \n", ReadStr(s->lpstrAdapterName,0) );
  88. dprintf(" lpstrHostName = %s \n", ReadStr(s->lpstrHostName, 0) );
  89. dprintf(" pRegisterStatus = 0x%08x \n", ReadDword( s->pRegisterStatus ) );
  90. dprintf(" pHostAddrs = 0x%08x \n", ReadDword( s->pHostAddrs ) );
  91. dprintf(" dwHostAddrCount = %d \n", s->dwHostAddrCount );
  92. dprintf(" lpstrDomainName = %s \n", ReadStr(s->lpstrDomainName, 0) );
  93. dprintf(" pipDnsServerList = 0x%08x \n", ReadDword( s->pipDnsServerList ) );
  94. dprintf(" dwDnsServerCount = %d \n", s->dwDnsServerCount );
  95. dprintf(" dwTTL = %d \n", s->dwTTL );
  96. dprintf(" dwFlags = %d \n", s->dwFlags );
  97. dprintf(" fNewElement = 0x%08x \n", s->fNewElement );
  98. dprintf(" fRemove = 0x%08x \n", s->fRemove );
  99. dprintf( "}; // struct _CLIENT_QELEMENT.\n"); return;
  100. } /* print_CLIENT_QELEMENT */
  101. void print_BUCKET( char* message, struct _BUCKET * s );
  102. DECLARE_API( dprint_BUCKET ){ struct _BUCKET * p = NULL;
  103. struct _BUCKET Q; ULONG result; INIT_API(); if( *args )
  104. sscanf( args, "%lx", &p );
  105. if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
  106. dprintf("Could not read address 0x%08x\n", p ); return; }
  107. print_BUCKET( "none", &Q ); return;}
  108. // ==================================================// _BUCKETvoid
  109. VOID
  110. print_BUCKET( char* message, struct _BUCKET * s ){ if( message ){
  111. dprintf( "%s\n", message ); } if( s == NULL ){
  112. dprintf( "struct _BUCKET is NULL.\n"); return; }
  113. dprintf("struct _BUCKET = {\n" );
  114. dprintf(" List = 0x%08x \n", s->List );
  115. dprintf(" ppQList = 0x%08x \n", ReadDword(s->ppQList) );
  116. dprintf(" dwListCount = %d \n", s->dwListCount );
  117. dprintf(" dwRetryTime = %d \n", s->dwRetryTime );
  118. dprintf(" HostName = %s \n", ReadStr(s->HostName, 0) );
  119. dprintf(" DomainName = %s \n", ReadStr(s->DomainName, 0));
  120. dprintf(" fSucceeded = 0x%08x \n", s->fSucceeded );
  121. dprintf(" pRelatedBucket = 0x%08x \n", s->pRelatedBucket );
  122. dprintf(" fRemove = 0x%08x \n", s->fRemove );
  123. dprintf(" dwRetryFactor = %d \n", s->dwRetryFactor );
  124. dprintf( "}; // struct _BUCKET.\n"); return;} /* print_BUCKET */
  125. void
  126. print_SERVER_INFO( char* message, struct _SERVER_INFO * s );
  127. DECLARE_API( dprint_SERVER_INFO ){ struct _SERVER_INFO * p = NULL;
  128. struct _SERVER_INFO Q; ULONG result; INIT_API(); if( *args )
  129. sscanf( args, "%lx", &p );
  130. if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
  131. dprintf("Could not read address 0x%08x\n", p ); return; }
  132. print_SERVER_INFO( "none", &Q ); return;}
  133. // ==================================================// _SERVER_INFO
  134. void
  135. print_SERVER_INFO( char* message, struct _SERVER_INFO * s ){
  136. if( message ){ dprintf( "%s\n", message ); }
  137. if( s == NULL ){ dprintf( "struct _SERVER_INFO is NULL.\n");
  138. return; } dprintf("struct _SERVER_INFO = {\n" );
  139. dprintf(" dwVersion = %d \n", s->dwVersion );
  140. dprintf(" pszServerName = %s \n", ReadStr(s->pszServerName,0) );
  141. dprintf(" pszServerDomainName = %s \n", ReadStr(s->pszServerDomainName,0));
  142. dprintf(" fStarted = 0x%08x \n", s->fStarted );
  143. dprintf(" fThreadAlert = 0x%08x \n", s->fThreadAlert );
  144. dprintf(" fServiceExit = 0x%08x \n", s->fServiceExit );
  145. dprintf(" hContinueEvent = 0x%08x \n", s->hContinueEvent );
  146. dprintf(" hShutdownEvent = 0x%08x \n", s->hShutdownEvent );
  147. dprintf(" fWinsInitialized = 0x%08x \n", s->fWinsInitialized );
  148. dprintf(" fMemoryException = 0x%08x \n", s->fMemoryException );
  149. dprintf(" fAVException = 0x%08x \n", s->fAVException );
  150. dprintf(" dwCurrentTime = %d \n", s->dwCurrentTime );
  151. dprintf(" fBootRegistry = %d \n", s->fBootRegistry );
  152. dprintf(" fBootFileDirty = %d \n", s->fBootFileDirty );
  153. dprintf(" cDsZones = %d \n", s->cDsZones );
  154. dprintf(" fRemoteDs = %d \n", s->fRemoteDs );
  155. dprintf(" fDatabaseSupported = %d \n", s->fDatabaseSupported );
  156. dprintf(" pszDatabaseDirectory = 0x%08x \n", s->pszDatabaseDirectory );
  157. dprintf(" dwRpcProtocol = %d \n", s->dwRpcProtocol );
  158. dprintf(" dwLogLevel = %d \n", s->dwLogLevel );
  159. dprintf(" dwDebugLevel = %d \n", s->dwDebugLevel );
  160. dprintf(" aipServerAddrs = 0x%08x \n", ReadDword( s->aipServerAddrs ) );
  161. dprintf(" aipBoundAddrs = 0x%08x \n", ReadDword( s->aipBoundAddrs ) );
  162. dprintf(" aipListenAddrs = 0x%08x \n", ReadDword( s->aipListenAddrs ) );
  163. dprintf(" fListenAddrsSet = %d \n", s->fListenAddrsSet );
  164. dprintf(" fListenAddrsStale = %d \n", s->fListenAddrsStale );
  165. dprintf(" fDisjointNets = %d \n", s->fDisjointNets );
  166. dprintf(" fNoTcp = %d \n", s->fNoTcp );
  167. dprintf(" fRecurseOnDnsPort = %d \n", s->fRecurseOnDnsPort );
  168. dprintf(" aipForwarders = 0x%08x \n", ReadDword( s->aipForwarders ) );
  169. dprintf(" dwForwardTimeout = %d \n", s->dwForwardTimeout );
  170. dprintf(" fSlave = %d \n", s->fSlave );
  171. dprintf(" fNoRecursion = %d \n", s->fNoRecursion );
  172. dprintf(" fRecursionAvailable = %d \n", s->fRecursionAvailable );
  173. dprintf(" dwRecursionRetry = %d \n", s->dwRecursionRetry );
  174. dprintf(" dwRecursionTimeout = %d \n", s->dwRecursionTimeout );
  175. dprintf(" dwMaxCacheTtl = %d \n", s->dwMaxCacheTtl );
  176. dprintf(" fSecureResponses = %d \n", s->fSecureResponses );
  177. dprintf(" fAllowUpdate = %d \n", s->fAllowUpdate );
  178. dprintf(" fExtendedCharNames = %d \n", s->fExtendedCharNames );
  179. dprintf(" dwNameCheckFlag = %d \n", s->dwNameCheckFlag );
  180. dprintf(" dwCleanupInterval = %d \n", s->dwCleanupInterval );
  181. dprintf(" fNoAutoReverseZones = %d \n", s->fNoAutoReverseZones );
  182. dprintf(" fAutoCacheUpdate = %d \n", s->fAutoCacheUpdate );
  183. dprintf(" fRoundRobin = %d \n", s->fRoundRobin );
  184. dprintf(" fLocalNetPriority = %d \n", s->fLocalNetPriority );
  185. dprintf(" cAddressAnswerLimit = %d \n", s->cAddressAnswerLimit );
  186. dprintf(" fBindSecondaries = %d \n", s->fBindSecondaries );
  187. dprintf(" fWriteAuthoritySoa = %d \n", s->fWriteAuthoritySoa );
  188. dprintf(" fWriteAuthorityNs = %d \n", s->fWriteAuthorityNs );
  189. dprintf(" fWriteAuthority = %d \n", s->fWriteAuthority );
  190. dprintf(" fStrictFileParsing = %d \n", s->fStrictFileParsing );
  191. dprintf(" fLooseWildcarding = %d \n", s->fLooseWildcarding );
  192. dprintf( "}; // struct _SERVER_INFO.\n"); return;
  193. } /* print_SERVER_INFO */
  194. // Generated Mon Aug 18 20:53:32 1997 on MohsinA5 1.2.13
  195. void print_ZONE_INFO( char* message, ZONE_INFO * s );
  196. DECLARE_API( dprint_ZONE_INFO )
  197. {
  198. ZONE_INFO * p = NULL;
  199. ZONE_INFO Q;
  200. ULONG result;
  201. INIT_API();
  202. if( *args )
  203. sscanf( args, "%lx", &p );
  204. if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
  205. dprintf("Could not read address 0x%08x\n", p );
  206. return;
  207. }
  208. print_ZONE_INFO( "none", &Q );
  209. return;
  210. }
  211. // ==================================================
  212. // ZONE_INFO
  213. void
  214. print_ZONE_INFO( char* message, ZONE_INFO * s )
  215. {
  216. if( message ){
  217. dprintf( "%s\n", message );
  218. }
  219. if( s == NULL ){
  220. dprintf( "ZONE_INFO is NULL.\n");
  221. return;
  222. }
  223. dprintf("ZONE_INFO = {\n" );
  224. dprintf(" ListEntry = 0x%08x \n", s->ListEntry );
  225. dprintf(" pZoneRoot = 0x%08x \n", ReadDword( s->pZoneRoot ) );
  226. dprintf(" pszZoneName = %s \n", ReadStr(s->pszZoneName,0) );
  227. dprintf(" pszDataFile = %s \n", ReadStr(s->pszDataFile,0) );
  228. dprintf(" pszLogFile = %s \n", ReadStr(s->pszLogFile,0) );
  229. dprintf(" pszZoneDN = %s \n", ReadStr(s->pszZoneDN,0) );
  230. dprintf(" dwLastUsn = %s \n", ReadStr(s->szLastUsn,0) );
  231. dprintf(" ipReverse = 0x%08x \n", s->ipReverse );
  232. dprintf(" ipReverseMask = 0x%08x \n", s->ipReverseMask );
  233. dprintf(" pSoaRR = 0x%08x \n", ReadDword( s->pSoaRR ) );
  234. dprintf(" dwSerialNo = %d \n", s->dwSerialNo );
  235. dprintf(" dwLoadSerialNo = %d \n", s->dwLoadSerialNo );
  236. dprintf(" dwLastXfrSerialNo = %d \n", s->dwLastXfrSerialNo );
  237. dprintf(" dwNewSerialNo = %d \n", s->dwNewSerialNo );
  238. dprintf(" dwDefaultTtl = %d \n", s->dwDefaultTtl );
  239. dprintf(" dwDefaultTtlHostOrder = %d \n", s->dwDefaultTtlHostOrder );
  240. dprintf(" hfileUpdateLog = 0x%08x \n", s->hfileUpdateLog );
  241. dprintf(" iUpdateLogCount = %d \n", s->iUpdateLogCount );
  242. dprintf(" UpdateList = 0x%08x \n", s->UpdateList );
  243. dprintf(" iRRCount = %d \n", s->iRRCount );
  244. dprintf(" aipSecondaries = 0x%08x \n", ReadDword( s->aipSecondaries ) );
  245. dprintf(" aipNameServers = 0x%08x \n", ReadDword( s->aipNameServers ) );
  246. dprintf(" dwNextTransferTime = %d \n", s->dwNextTransferTime );
  247. dprintf(" ipPrimary = 0x%08x \n", s->ipPrimary );
  248. dprintf(" aipMasters = 0x%08x \n", ReadDword( s->aipMasters ) );
  249. dprintf(" dwNextSoaCheckTime = %d \n", s->dwNextSoaCheckTime );
  250. dprintf(" dwExpireTime = %d \n", s->dwExpireTime );
  251. dprintf(" ipNotifier = 0x%08x \n", s->ipNotifier );
  252. dprintf(" ipFreshMaster = 0x%08x \n", s->ipFreshMaster );
  253. dprintf(" pszMasterIpString = 0x%08x \n", s->pszMasterIpString );
  254. dprintf(" dwZoneRecvStartTime = %d \n", s->dwZoneRecvStartTime );
  255. dprintf(" pLocalWinsRR = 0x%08x \n", ReadDword( s->pLocalWinsRR ) );
  256. dprintf(" pWinsRR = 0x%08x \n", ReadDword( s->pWinsRR ) );
  257. dprintf(" dwLockingThreadId = %d \n", s->dwLockingThreadId );
  258. dprintf(" chZoneType = %c \n", s->chZoneType );
  259. dprintf(" cZoneNameLabelCount = 0x%08x \n", s->cZoneNameLabelCount );
  260. dprintf(" fReverse = 0x%08x \n", s->fReverse );
  261. dprintf(" fDsIntegrated = 0x%08x \n", s->fDsIntegrated );
  262. dprintf(" fDsLoadVersion = 0x%08x \n", s->fDsLoadVersion );
  263. dprintf(" fUnicode = 0x%08x \n", s->fUnicode );
  264. dprintf(" fAutoCreated = 0x%08x \n", s->fAutoCreated );
  265. dprintf(" fSecureSecondaries = 0x%08x \n", s->fSecureSecondaries );
  266. dprintf(" fAllowUpdate = 0x%08x \n", s->fAllowUpdate );
  267. dprintf(" fLogUpdates = 0x%08x \n", s->fLogUpdates );
  268. dprintf(" fPaused = 0x%08x \n", s->fPaused );
  269. dprintf(" fDirty = 0x%08x \n", s->fDirty );
  270. dprintf(" fShutdown = 0x%08x \n", s->fShutdown );
  271. dprintf(" fNotified = 0x%08x \n", s->fNotified );
  272. dprintf(" fStale = 0x%08x \n", s->fStale );
  273. dprintf(" fEmpty = 0x%08x \n", s->fEmpty );
  274. dprintf(" fLocked = 0x%08x \n", s->fLocked );
  275. dprintf(" fUpdateLock = 0x%08x \n", s->fUpdateLock );
  276. dprintf(" fXfrRecvLock = 0x%08x \n", s->fXfrRecvLock );
  277. dprintf(" fFileWriteLock = 0x%08x \n", s->fFileWriteLock );
  278. dprintf(" cReaders = 0x%08x \n", s->cReaders );
  279. dprintf( "}; // struct ZONE_INFO.\n");
  280. return;
  281. } /* print_ZONE_INFO */
  282. // Generated Mon Aug 18 21:22:54 1997 on MohsinA5 1.2.13
  283. void print_ResourceRecord( char* message, struct _ResourceRecord * s );
  284. DECLARE_API( dprint_ResourceRecord )
  285. {
  286. struct _ResourceRecord * p = NULL;
  287. struct _ResourceRecord Q;
  288. ULONG result;
  289. INIT_API();
  290. if( *args )
  291. sscanf( args, "%lx", &p );
  292. if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
  293. dprintf("Could not read address 0x%08x\n", p );
  294. return;
  295. }
  296. print_ResourceRecord( "none", &Q );
  297. return;
  298. }
  299. // ==================================================
  300. // ResourceRecord
  301. void
  302. print_ResourceRecord( char* message, struct _ResourceRecord * s )
  303. {
  304. if( message ){
  305. dprintf( "%s\n", message );
  306. }
  307. if( s == NULL ){
  308. dprintf( "struct ResourceRecord is NULL.\n");
  309. return;
  310. }
  311. dprintf("struct _ResourceRecord = {\n" );
  312. dprintf(" pRRNext = 0x%08x \n", s->pRRNext );
  313. dprintf(" RecordRank = 0x%08x \n", s->RecordRank );
  314. dprintf(" RRReserved = 0x%08x \n", s->RRReserved );
  315. dprintf(" wRRFlags = %d \n", s->wRRFlags );
  316. dprintf(" wType = %d \n", s->wType );
  317. dprintf(" wDataLength = %d \n", s->wDataLength );
  318. dprintf(" dwTtlSeconds = %d \n", s->dwTtlSeconds );
  319. dprintf(" ipAddress = 0x%08x \n", s->Data.A.ipAddress );
  320. dprintf(" ipv6Address = 0x%08x \n", s->Data.AAAA.ipv6Address );
  321. dprintf(" pnodePrimaryServer = 0x%08x \n", ReadDword( s->Data.SOA.pnodePrimaryServer ) );
  322. dprintf(" pnodeZoneAdmin = 0x%08x \n", ReadDword( s->Data.SOA.pnodeZoneAdmin ) );
  323. dprintf(" dwSerialNo = %d \n", s->Data.SOA.dwSerialNo );
  324. dprintf(" dwRefresh = %d \n", s->Data.SOA.dwRefresh );
  325. dprintf(" dwRetry = %d \n", s->Data.SOA.dwRetry );
  326. dprintf(" dwExpire = %d \n", s->Data.SOA.dwExpire );
  327. dprintf(" dwMinimumTtl = %d \n", s->Data.SOA.dwMinimumTtl );
  328. dprintf(" pnodeAddress = 0x%08x \n", ReadDword( s->Data.PTR.pnodeAddress ) );
  329. dprintf(" pnodeMailbox = 0x%08x \n", ReadDword( s->Data.MINFO.pnodeMailbox ) );
  330. dprintf(" pnodeErrorsMailbox = 0x%08x \n", ReadDword( s->Data.MINFO.pnodeErrorsMailbox ) );
  331. dprintf( "}; // struct ResourceRecord.\n");
  332. return;
  333. } /* print_ResourceRecord */
  334. void print_ADDITIONAL_INFO( char* message, ADDITIONAL_INFO * s );
  335. DECLARE_API( dprint_ADDITIONAL_INFO )
  336. {
  337. ADDITIONAL_INFO * p = NULL;
  338. ADDITIONAL_INFO Q;
  339. ULONG result;
  340. INIT_API();
  341. if( *args )
  342. sscanf( args, "%lx", &p );
  343. if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
  344. dprintf("Could not read address 0x%08x\n", p );
  345. return;
  346. }
  347. print_ADDITIONAL_INFO( "none", &Q );
  348. return;
  349. }
  350. // ==================================================
  351. // _ADDITIONAL_INFO
  352. void
  353. print_ADDITIONAL_INFO( char* message, ADDITIONAL_INFO * s )
  354. {
  355. if( message ){
  356. dprintf( "%s\n", message );
  357. }
  358. if( s == NULL ){
  359. dprintf( "ADDITIONAL_INFO is NULL.\n");
  360. return;
  361. }
  362. dprintf("ADDITIONAL_INFO = {\n" );
  363. dprintf(" cMaxCount = %d \n", s->cMaxCount );
  364. dprintf(" cCount = %d \n", s->cCount );
  365. dprintf(" iIndex = %d \n", s->iIndex );
  366. dprintf( "}; // ADDITIONAL_INFO.\n");
  367. return;
  368. } /* print_ADDITIONAL_INFO */
  369. void print_DNS_MSGINFO( char* message, struct _DNS_MSGINFO * s );
  370. DECLARE_API( dprint_DNS_MSGINFO ){ struct _DNS_MSGINFO * p = NULL;
  371. struct _DNS_MSGINFO Q; ULONG result; INIT_API(); if( *args )
  372. sscanf( args, "%lx", &p );
  373. if( !p || !ReadMemory( p, &Q, sizeof(Q), &result )){
  374. dprintf("Could not read address 0x%08x\n", p ); return; }
  375. print_DNS_MSGINFO( "none", &Q ); return;}
  376. // ==================================================// _DNS_MSGINFO
  377. void
  378. print_DNS_MSGINFO( char* message, struct _DNS_MSGINFO * s ){
  379. if( message ){ dprintf( "%s\n", message ); }
  380. if( s == NULL ){ dprintf( "struct _DNS_MSGINFO is NULL.\n");
  381. return; } dprintf("struct _DNS_MSGINFO = {\n" );
  382. dprintf(" ListEntry = 0x%08x \n", s->ListEntry );
  383. dprintf(" Socket = 0x%08x \n", s->Socket );
  384. dprintf(" RemoteAddressLength = %d \n", s->RemoteAddressLength );
  385. dprintf(" RemoteAddress = 0x%08x \n", s->RemoteAddress );
  386. dprintf(" BufferLength = %d \n", s->BufferLength );
  387. dprintf(" pBufferEnd = %s \n", ReadStr( s->pBufferEnd, 20 ) );
  388. dprintf(" pCurrentCountField = %d \n", ReadDword( s->pCurrentCountField ) );
  389. dprintf(" pCurrent = 0x%08x \n", ReadDword( s->pCurrent ) );
  390. dprintf(" pnodeCurrent = 0x%08x \n", ReadDword( s->pnodeCurrent ) );
  391. dprintf(" wTypeCurrent = %d \n", s->wTypeCurrent );
  392. dprintf(" wOffsetCurrent = %d \n", s->wOffsetCurrent );
  393. dprintf(" pQuestion = 0x%08x \n", ReadDword( s->pQuestion ) );
  394. dprintf(" wQuestionType = %d \n", s->wQuestionType );
  395. dprintf(" wQueuingXid = %d \n", s->wQueuingXid );
  396. dprintf(" dwQueryTime = %d \n", s->dwQueryTime );
  397. dprintf(" dwQueuingTime = %d \n", s->dwQueuingTime );
  398. dprintf(" dwExpireTime = %d \n", s->dwExpireTime );
  399. dprintf(" OriginalSocket = 0x%08x \n", s->OriginalSocket );
  400. dprintf(" ipOriginal = 0x%08x \n", s->ipOriginal );
  401. dprintf(" wOriginalPort = %d \n", s->wOriginalPort );
  402. dprintf(" wOriginalXid = %d \n", s->wOriginalXid );
  403. dprintf(" pRecurseMsg = 0x%08x \n", s->pRecurseMsg );
  404. dprintf(" pnodeRecurseRetry = 0x%08x \n", ReadDword( s->pnodeRecurseRetry ) );
  405. dprintf(" pVisitedNs = 0x%08x \n", ReadDword( s->pVisitedNs ) );
  406. dprintf(" pConnection = 0x%08x \n", ReadDword( s->pConnection ) );
  407. dprintf(" pchRecv = %s \n", ReadStr( s->pchRecv, 20 ) );
  408. dprintf(" pzoneCurrent = 0x%08x \n", ReadDword( s->pzoneCurrent ) );
  409. dprintf(" pWinsRR = 0x%08x \n", ReadDword( s->pWinsRR ) );
  410. dprintf(" ipNbstat = 0x%08x \n", s->ipNbstat );
  411. dprintf(" pNbstat = 0x%08x \n", ReadDword( s->pNbstat ) );
  412. dprintf(" dwNbtInterfaceMask = %d \n", s->dwNbtInterfaceMask );
  413. dprintf(" fDelete = 0x%08x \n", s->fDelete );
  414. dprintf(" fTcp = 0x%08x \n", s->fTcp );
  415. dprintf(" fMessageComplete = 0x%08x \n", s->fMessageComplete );
  416. dprintf(" fDoAdditional = 0x%08x \n", s->fDoAdditional );
  417. dprintf(" fRecursePacket = 0x%08x \n", s->fRecursePacket );
  418. dprintf(" fRecurseIfNecessary = 0x%08x \n", s->fRecurseIfNecessary );
  419. dprintf(" fQuestionRecursed = 0x%08x \n", s->fQuestionRecursed );
  420. dprintf(" fQuestionCompleted = 0x%08x \n", s->fQuestionCompleted );
  421. dprintf(" fRecurseTimeoutWait = 0x%08x \n", s->fRecurseTimeoutWait );
  422. dprintf(" nForwarder = %c \n", s->nForwarder );
  423. dprintf(" fReplaceCname = 0x%08x \n", s->fReplaceCname );
  424. dprintf(" cCnameAnswerCount = 0x%08x \n", s->cCnameAnswerCount );
  425. dprintf(" fBindTransfer = 0x%08x \n", s->fBindTransfer );
  426. dprintf(" fNoCompressionWrite = 0x%08x \n", s->fNoCompressionWrite );
  427. dprintf(" fWins = 0x%08x \n", s->fWins );
  428. dprintf(" fNbstatResponded = 0x%08x \n", s->fNbstatResponded );
  429. dprintf(" cchWinsName = 0x%08x \n", s->cchWinsName );
  430. dprintf(" pLooknameQuestion = 0x%08x \n", ReadDword( s->pLooknameQuestion ) );
  431. dprintf(" Additional = 0x%08x \n", s->Additional );
  432. dprintf(" Compression = 0x%08x \n", s->Compression );
  433. dprintf(" BytesToReceive = %d \n", s->BytesToReceive );
  434. dprintf(" MessageLength = %d \n", s->MessageLength );
  435. dprintf(" MessageHead = 0x%08x \n", s->MessageHead );
  436. dprintf( "}; // struct _DNS_MSGINFO.\n"); return;
  437. } /* print_DNS_MSGINFO */