Windows NT 4.0 source code leak
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.

276 lines
3.9 KiB

4 years ago
  1. /*++
  2. Copyright (c) 1996 Microsoft Corporation
  3. All rights reserved.
  4. Module Name:
  5. trace.hxx
  6. Abstract:
  7. Holds logging routines.
  8. Author:
  9. Albert Ting (AlbertT) 24-May-1996
  10. Revision History:
  11. --*/
  12. #ifndef _TRACE_HXX
  13. #define _TRACE_HXX
  14. #ifdef __cplusplus
  15. enum COMPARE {
  16. kLess = -1,
  17. kEqual = 0,
  18. kGreater = 1
  19. };
  20. extern CRITICAL_SECTION gcsBackTrace;
  21. class TMemBlock;
  22. class TBackTraceDB {
  23. SIGNATURE( 'btdb' )
  24. public:
  25. enum CONSTANTS {
  26. kBlockSize = 0x4000
  27. };
  28. TBackTraceDB(
  29. VOID
  30. );
  31. ~TBackTraceDB(
  32. VOID
  33. );
  34. BOOL
  35. bValid(
  36. VOID
  37. );
  38. HANDLE
  39. hStore(
  40. ULONG ulHash,
  41. PVOID pvBackTrace
  42. );
  43. private:
  44. class TTrace {
  45. friend TDebugExt;
  46. public:
  47. COMPARE
  48. eCompareHash(
  49. ULONG ulHash
  50. ) const;
  51. COMPARE
  52. eCompareBackTrace(
  53. PVOID pvBackTrace
  54. ) const;
  55. static
  56. TTrace*
  57. pNew(
  58. TBackTraceDB *pBackTraceDB,
  59. ULONG ulHash,
  60. PVOID pvBackTrace,
  61. TTrace ** ppTrace
  62. );
  63. VAR( TTrace*, pLeft );
  64. VAR( TTrace*, pRight );
  65. VAR( ULONG, ulHash );
  66. PVOID apvBackTrace[1];
  67. private:
  68. //
  69. // Don't allow instantiation.
  70. //
  71. TTrace();
  72. ~TTrace();
  73. };
  74. TTrace*
  75. ptFind(
  76. ULONG ulHash,
  77. PVOID pvBackTrace,
  78. TTrace ***pppTrace
  79. );
  80. TTrace *_pTraceHead;
  81. TMemBlock *_pMemBlock;
  82. friend TTrace;
  83. friend TDebugExt;
  84. };
  85. class VBackTrace {
  86. friend TDebugExt;
  87. SIGNATURE( 'vbt' )
  88. ALWAYS_VALID
  89. public:
  90. enum CONSTANTS {
  91. //
  92. // fdwOptions.
  93. //
  94. kString = 0x1,
  95. kMaxDepth = 0xd
  96. };
  97. VBackTrace(
  98. DWORD fdwOptions1 = 0,
  99. DWORD fdwOptions2 = 0
  100. );
  101. virtual
  102. ~VBackTrace(
  103. VOID
  104. );
  105. virtual
  106. PVOID
  107. pvCapture(
  108. DWORD dwInfo1,
  109. DWORD dwInfo2,
  110. DWORD dwInfo3 = 0
  111. ) = 0;
  112. static
  113. BOOL
  114. bInit(
  115. VOID
  116. );
  117. protected:
  118. class TLine {
  119. public:
  120. HANDLE _hTrace;
  121. DWORD _dwInfo1;
  122. DWORD _dwInfo2;
  123. DWORD _dwInfo3;
  124. DWORD _dwThreadId;
  125. DWORD _dwTickCount;
  126. PVOID _apvBackTrace[kMaxDepth+1];
  127. };
  128. DWORD _fdwOptions1;
  129. DWORD _fdwOptions2;
  130. };
  131. /********************************************************************
  132. Backtracing to memory.
  133. ********************************************************************/
  134. class TBackTraceMem : public VBackTrace {
  135. friend TDebugExt;
  136. friend VBackTrace;
  137. SIGNATURE( 'btm' )
  138. ALWAYS_VALID
  139. public:
  140. enum {
  141. kMaxCall = 0x800,
  142. kBlockSize = 0x4000
  143. };
  144. TBackTraceMem(
  145. DWORD fdwOptions1 = 0,
  146. DWORD fdwOptions2 = 0
  147. );
  148. ~TBackTraceMem(
  149. VOID
  150. );
  151. PVOID
  152. pvCapture(
  153. DWORD dwInfo1,
  154. DWORD dwInfo2,
  155. DWORD dwInfo3 = 0
  156. );
  157. private:
  158. VOID
  159. vCaptureLine(
  160. TLine* pLine,
  161. DWORD dwInfo1,
  162. DWORD dwInfo2,
  163. DWORD dwInfo3
  164. );
  165. UINT _uNextFree;
  166. TLine* _pLines;
  167. };
  168. /********************************************************************
  169. Backtracing to file.
  170. ********************************************************************/
  171. class TBackTraceFile : public VBackTrace {
  172. friend TDebugExt;
  173. SIGNATURE( 'btf' )
  174. ALWAYS_VALID
  175. public:
  176. TBackTraceFile(
  177. DWORD fdwOptions1 = 0,
  178. DWORD fdwOptions2 = 0
  179. );
  180. ~TBackTraceFile(
  181. VOID
  182. );
  183. PVOID
  184. pvCapture(
  185. DWORD dwInfo1,
  186. DWORD dwInfo2,
  187. DWORD dwInfo3 = 0
  188. );
  189. private:
  190. enum {
  191. kMaxPath = MAX_PATH,
  192. kMaxLineStr = 512
  193. };
  194. HANDLE _hFile;
  195. static COUNT gcInstances;
  196. };
  197. #endif // #ifdef __cplusplus
  198. #endif // #ifdef _TRACE_HXX