home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / image / drwatson / include / drwatson.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-27  |  5.8 KB  |  263 lines

  1. /*++
  2.  
  3. Copyright (c) 1993  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     drwatson.h
  8.  
  9. Abstract:
  10.  
  11.     Common header file for drwatson data structures.
  12.  
  13. Author:
  14.  
  15.     Wesley Witt (wesw) 1-May-1993
  16.  
  17. Environment:
  18.  
  19.     User Mode
  20.  
  21. --*/
  22.  
  23. #include <imagehlp.h>
  24.  
  25. typedef struct _tagOPTIONS {
  26.     CHAR                        szLogPath[MAX_PATH];
  27.     CHAR                        szWaveFile[MAX_PATH];
  28.     CHAR                        szCrashDump[MAX_PATH];
  29.     BOOL                        fDumpSymbols;
  30.     BOOL                        fDumpAllThreads;
  31.     BOOL                        fAppendToLogFile;
  32.     BOOL                        fVisual;
  33.     BOOL                        fSound;
  34.     BOOL                        fCrash;
  35.     DWORD                       dwInstructions;
  36.     DWORD                       dwMaxCrashes;
  37. } OPTIONS, *POPTIONS;
  38.  
  39. typedef struct _tagCRASHES {
  40.     char                        szAppName[256];
  41.     char                        szFunction[256];
  42.     SYSTEMTIME                  time;
  43.     DWORD                       dwExceptionCode;
  44.     DWORD                       dwAddress;
  45. } CRASHES, *PCRASHES;
  46.  
  47. typedef struct _tagCRASHINFO {
  48.     HWND       hList;
  49.     CRASHES    crash;
  50.     HDC        hdc;
  51.     DWORD      cxExtent;
  52.     DWORD      dwIndex;
  53.     DWORD      dwIndexDesired;
  54.     char       *pCrashData;
  55.     DWORD      dwCrashDataSize;
  56. } CRASHINFO, *PCRASHINFO;
  57.  
  58. typedef struct _tagTHREADCONTEXT {
  59.     LIST_ENTRY                   ThreadList;
  60.     HANDLE                       hThread;
  61.     DWORD                        dwThreadId;
  62.     DWORD                        pc;
  63.     DWORD                        frame;
  64.     DWORD                        stack;
  65.     CONTEXT                      context;
  66.     DWORD                        stackBase;
  67.     DWORD                        stackRA;
  68.     BOOL                         fFaultingContext;
  69. } THREADCONTEXT, *PTHREADCONTEXT;
  70.  
  71. typedef struct _tagDEBUGPACKET {
  72.     HWND                    hwnd;
  73.     HANDLE                  hEvent;
  74.     OPTIONS                 options;
  75.     DWORD                   dwPidToDebug;
  76.     HANDLE                  hEventToSignal;
  77.     HANDLE                  hProcess;
  78.     DWORD                   dwProcessId;
  79.     LIST_ENTRY              ThreadList;
  80.     PTHREADCONTEXT          tctx;
  81.     DWORD                   stackBase;
  82.     DWORD                   stackRA;
  83.     DEBUG_EVENT             DebugEvent;
  84. } DEBUGPACKET, *PDEBUGPACKET;
  85.  
  86. typedef BOOL (CALLBACK* CRASHESENUMPROC)(PCRASHINFO);
  87.  
  88. #if DBG
  89. #define Assert(exp)    if(!(exp)) {AssertError(#exp,__FILE__,__LINE__);}
  90. #else
  91. #define Assert(exp)
  92. #endif
  93.  
  94. #define WM_DUMPCOMPLETE       WM_USER+500
  95. #define WM_EXCEPTIONINFO      WM_USER+501
  96. #define WM_ATTACHCOMPLETE     WM_USER+502
  97.  
  98. extern PIMAGEHLP_SYMBOL sym;
  99. extern char szApp[MAX_PATH];
  100.  
  101.  
  102.  
  103. #if defined(i386)
  104.  
  105. #define BP_SIZE 1
  106. #define PC(C) ((C)->Eip)
  107.  
  108. #elif defined(PPC)
  109.  
  110. #define BP_SIZE 4
  111. #define PC(C) ((C)->Iar)
  112.  
  113. #elif defined(MIPS)
  114.  
  115. #define BP_SIZE 4
  116. #define PC(C) ((C)->Fir)
  117.  
  118. #elif defined(ALPHA)
  119.  
  120. #define BP_SIZE 4
  121. #define PC(C) ((C)->Fir)
  122.  
  123. #else
  124.  
  125. #error "Unknown target CPU"
  126.  
  127. #endif
  128.  
  129.  
  130. //  **** From ntddk.h
  131. //
  132. //  Doubly-linked list manipulation routines.  Implemented as macros
  133. //  but logically these are procedures.
  134. //
  135.  
  136. //
  137. //  VOID
  138. //  InitializeListHead(
  139. //      PLIST_ENTRY ListHead
  140. //      );
  141. //
  142.  
  143. #define InitializeListHead(ListHead) (\
  144.     (ListHead)->Flink = (ListHead)->Blink = (ListHead))
  145.  
  146. //
  147. //  BOOLEAN
  148. //  IsListEmpty(
  149. //      PLIST_ENTRY ListHead
  150. //      );
  151. //
  152.  
  153. #define IsListEmpty(ListHead) \
  154.     ((ListHead)->Flink == (ListHead))
  155.  
  156. //
  157. //  PLIST_ENTRY
  158. //  RemoveHeadList(
  159. //      PLIST_ENTRY ListHead
  160. //      );
  161. //
  162.  
  163. #define RemoveHeadList(ListHead) \
  164.     (ListHead)->Flink;\
  165.     {RemoveEntryList((ListHead)->Flink)}
  166.  
  167. //
  168. //  PLIST_ENTRY
  169. //  RemoveTailList(
  170. //      PLIST_ENTRY ListHead
  171. //      );
  172. //
  173.  
  174. #define RemoveTailList(ListHead) \
  175.     (ListHead)->Blink;\
  176.     {RemoveEntryList((ListHead)->Blink)}
  177.  
  178. //
  179. //  VOID
  180. //  RemoveEntryList(
  181. //      PLIST_ENTRY Entry
  182. //      );
  183. //
  184.  
  185. #define RemoveEntryList(Entry) {\
  186.     PLIST_ENTRY _EX_Blink;\
  187.     PLIST_ENTRY _EX_Flink;\
  188.     _EX_Flink = (Entry)->Flink;\
  189.     _EX_Blink = (Entry)->Blink;\
  190.     _EX_Blink->Flink = _EX_Flink;\
  191.     _EX_Flink->Blink = _EX_Blink;\
  192.     }
  193.  
  194. //
  195. //  VOID
  196. //  InsertTailList(
  197. //      PLIST_ENTRY ListHead,
  198. //      PLIST_ENTRY Entry
  199. //      );
  200. //
  201.  
  202. #define InsertTailList(ListHead,Entry) {\
  203.     PLIST_ENTRY _EX_Blink;\
  204.     PLIST_ENTRY _EX_ListHead;\
  205.     _EX_ListHead = (ListHead);\
  206.     _EX_Blink = _EX_ListHead->Blink;\
  207.     (Entry)->Flink = _EX_ListHead;\
  208.     (Entry)->Blink = _EX_Blink;\
  209.     _EX_Blink->Flink = (Entry);\
  210.     _EX_ListHead->Blink = (Entry);\
  211.     }
  212.  
  213. //
  214. //  VOID
  215. //  InsertHeadList(
  216. //      PLIST_ENTRY ListHead,
  217. //      PLIST_ENTRY Entry
  218. //      );
  219. //
  220.  
  221. #define InsertHeadList(ListHead,Entry) {\
  222.     PLIST_ENTRY _EX_Flink;\
  223.     PLIST_ENTRY _EX_ListHead;\
  224.     _EX_ListHead = (ListHead);\
  225.     _EX_Flink = _EX_ListHead->Flink;\
  226.     (Entry)->Flink = _EX_Flink;\
  227.     (Entry)->Blink = _EX_ListHead;\
  228.     _EX_Flink->Blink = (Entry);\
  229.     _EX_ListHead->Flink = (Entry);\
  230.     }
  231.  
  232. //
  233. //
  234. //  PSINGLE_LIST_ENTRY
  235. //  PopEntryList(
  236. //      PSINGLE_LIST_ENTRY ListHead
  237. //      );
  238. //
  239.  
  240. #define PopEntryList(ListHead) \
  241.     (ListHead)->Next;\
  242.     {\
  243.         PSINGLE_LIST_ENTRY FirstEntry;\
  244.         FirstEntry = (ListHead)->Next;\
  245.         if (FirstEntry != NULL) {     \
  246.             (ListHead)->Next = FirstEntry->Next;\
  247.         }                             \
  248.     }
  249.  
  250.  
  251. //
  252. //  VOID
  253. //  PushEntryList(
  254. //      PSINGLE_LIST_ENTRY ListHead,
  255. //      PSINGLE_LIST_ENTRY Entry
  256. //      );
  257. //
  258.  
  259. #define PushEntryList(ListHead,Entry) \
  260.     (Entry)->Next = (ListHead)->Next; \
  261.     (ListHead)->Next = (Entry)
  262.  
  263.