PFMONP.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*++
  2. Copyright (c) 1995-1997  Microsoft Corporation
  3. Module Name:
  4.     instaler.h
  5. Abstract:
  6.     Main include file for the INSTALER application.
  7. Author:
  8.     Steve Wood (stevewo) 09-Aug-1994
  9. Revision History:
  10. --*/
  11. #ifdef RC_INVOKED
  12. #include <windows.h>
  13. #else
  14. #include <windows.h>
  15. #include <imagehlp.h>
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include "errormsg.h"
  20. typedef struct _PSAPI_WS_WATCH_INFORMATION {
  21.     LPVOID FaultingPc;
  22.     LPVOID FaultingVa;
  23. } PSAPI_WS_WATCH_INFORMATION, *PPSAPI_WS_WATCH_INFORMATION;
  24. BOOL
  25. WINAPI
  26. GetWsChanges(
  27.     HANDLE hProcess,
  28.     PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,
  29.     DWORD cb
  30.     );
  31. BOOL
  32. WINAPI
  33. InitializeProcessForWsWatch(
  34.     HANDLE hProcess
  35.     );
  36. //  Doubly-linked list manipulation routines.  Implemented as macros
  37. //  but logically these are procedures.
  38. //
  39. //
  40. //  VOID
  41. //  InitializeListHead(
  42. //      PLIST_ENTRY ListHead
  43. //      );
  44. //
  45. #define InitializeListHead(ListHead) (
  46.     (ListHead)->Flink = (ListHead)->Blink = (ListHead))
  47. //
  48. //  BOOL
  49. //  IsListEmpty(
  50. //      PLIST_ENTRY ListHead
  51. //      );
  52. //
  53. #define IsListEmpty(ListHead) 
  54.     ((ListHead)->Flink == (ListHead))
  55. //
  56. //  PLIST_ENTRY
  57. //  RemoveHeadList(
  58. //      PLIST_ENTRY ListHead
  59. //      );
  60. //
  61. #define RemoveHeadList(ListHead) 
  62.     (ListHead)->Flink;
  63.     {RemoveEntryList((ListHead)->Flink)}
  64. //
  65. //  PLIST_ENTRY
  66. //  RemoveTailList(
  67. //      PLIST_ENTRY ListHead
  68. //      );
  69. //
  70. #define RemoveTailList(ListHead) 
  71.     (ListHead)->Blink;
  72.     {RemoveEntryList((ListHead)->Blink)}
  73. //
  74. //  VOID
  75. //  RemoveEntryList(
  76. //      PLIST_ENTRY Entry
  77. //      );
  78. //
  79. #define RemoveEntryList(Entry) {
  80.     PLIST_ENTRY _EX_Blink;
  81.     PLIST_ENTRY _EX_Flink;
  82.     _EX_Flink = (Entry)->Flink;
  83.     _EX_Blink = (Entry)->Blink;
  84.     _EX_Blink->Flink = _EX_Flink;
  85.     _EX_Flink->Blink = _EX_Blink;
  86.     }
  87. //
  88. //  VOID
  89. //  InsertTailList(
  90. //      PLIST_ENTRY ListHead,
  91. //      PLIST_ENTRY Entry
  92. //      );
  93. //
  94. #define InsertTailList(ListHead,Entry) {
  95.     PLIST_ENTRY _EX_Blink;
  96.     PLIST_ENTRY _EX_ListHead;
  97.     _EX_ListHead = (ListHead);
  98.     _EX_Blink = _EX_ListHead->Blink;
  99.     (Entry)->Flink = _EX_ListHead;
  100.     (Entry)->Blink = _EX_Blink;
  101.     _EX_Blink->Flink = (Entry);
  102.     _EX_ListHead->Blink = (Entry);
  103.     }
  104. //
  105. //  VOID
  106. //  InsertHeadList(
  107. //      PLIST_ENTRY ListHead,
  108. //      PLIST_ENTRY Entry
  109. //      );
  110. //
  111. #define InsertHeadList(ListHead,Entry) {
  112.     PLIST_ENTRY _EX_Flink;
  113.     PLIST_ENTRY _EX_ListHead;
  114.     _EX_ListHead = (ListHead);
  115.     _EX_Flink = _EX_ListHead->Flink;
  116.     (Entry)->Flink = _EX_Flink;
  117.     (Entry)->Blink = _EX_ListHead;
  118.     _EX_Flink->Blink = (Entry);
  119.     _EX_ListHead->Flink = (Entry);
  120.     }
  121. //
  122. // Data structures and entry points in init.c
  123. //
  124. DWORD TotalSoftFaults;
  125. DWORD TotalHardFaults;
  126. DWORD TotalCodeFaults;
  127. DWORD TotalDataFaults;
  128. DWORD TotalKernelFaults;
  129. DWORD TotalUserFaults;
  130. BOOL fCodeOnly;
  131. BOOL fHardOnly;
  132. VOID
  133. ProcessPfMonData(
  134.     VOID
  135.     );
  136. //
  137. // Data structures and entry points in init.c
  138. //
  139. BOOL fVerbose;
  140. BOOL fLogOnly;
  141. BOOL fKernelOnly;                 //flag for displaying kernel pagefaults
  142. BOOL fKernel;                     //flag for displaying kernel pagefaults
  143. BOOL fDatabase;                   //flag for outputing information in a
  144.                                   //tab-delimited database format
  145. FILE *LogFile;
  146. BOOL
  147. InitializePfmon(
  148.     VOID
  149.     );
  150. BOOL
  151. LoadApplicationForDebug(
  152.     LPSTR CommandLine
  153.     );
  154. BOOL
  155. AttachApplicationForDebug(
  156.     DWORD Pid
  157.     );
  158. HANDLE hProcess;
  159. //
  160. // Data structures and entry points in error.c
  161. //
  162. HANDLE PfmonModuleHandle;
  163. VOID
  164. CDECL
  165. DeclareError(
  166.     UINT ErrorCode,
  167.     UINT SupplementalErrorCode,
  168.     ...
  169.     );
  170. //
  171. // Data structures and entry points in DEBUG.C
  172. //
  173. VOID
  174. DebugEventLoop( VOID );
  175. //
  176. // Data structures and entry points in process.c
  177. //
  178. typedef struct _PROCESS_INFO {
  179.     LIST_ENTRY Entry;
  180.     LIST_ENTRY ThreadListHead;
  181.     DWORD Id;
  182.     HANDLE Handle;
  183. } PROCESS_INFO, *PPROCESS_INFO;
  184. typedef struct _THREAD_INFO {
  185.     LIST_ENTRY Entry;
  186.     DWORD Id;
  187.     HANDLE Handle;
  188.     PVOID StartAddress;
  189. } THREAD_INFO, *PTHREAD_INFO;
  190. LIST_ENTRY ProcessListHead;
  191. BOOL
  192. AddProcess(
  193.     LPDEBUG_EVENT DebugEvent,
  194.     PPROCESS_INFO *ReturnedProcess
  195.     );
  196. BOOL
  197. DeleteProcess(
  198.     PPROCESS_INFO Process
  199.     );
  200. BOOL
  201. AddThread(
  202.     LPDEBUG_EVENT DebugEvent,
  203.     PPROCESS_INFO Process,
  204.     PTHREAD_INFO *ReturnedThread
  205.     );
  206. BOOL
  207. DeleteThread(
  208.     PPROCESS_INFO Process,
  209.     PTHREAD_INFO Thread
  210.     );
  211. PPROCESS_INFO
  212. FindProcessById(
  213.     ULONG Id
  214.     );
  215. BOOL
  216. FindProcessAndThreadForEvent(
  217.     LPDEBUG_EVENT DebugEvent,
  218.     PPROCESS_INFO *ReturnedProcess,
  219.     PTHREAD_INFO *ReturnedThread
  220.     );
  221. //
  222. // Data structures and entry points in module.c
  223. //
  224. typedef struct _MODULE_INFO {
  225.     LIST_ENTRY Entry;
  226.     LPVOID BaseAddress;
  227.     DWORD VirtualSize;
  228.     DWORD NumberFaultedSoftVas;
  229.     DWORD NumberFaultedHardVas;
  230.     DWORD NumberCausedFaults;
  231.     HANDLE Handle;
  232.     PIMAGE_DEBUG_INFORMATION DebugInfo;
  233. } MODULE_INFO, *PMODULE_INFO;
  234. LPSTR SymbolSearchPath;
  235. LIST_ENTRY ModuleListHead;
  236. BOOL
  237. LazyLoad(
  238.     LPVOID Address
  239.     );
  240. // hack PRTL_PROCESS_MODULES LazyModuleInformation;
  241. BOOL
  242. AddModule(
  243.     LPDEBUG_EVENT DebugEvent
  244.     );
  245. BOOL
  246. DeleteModule(
  247.     PMODULE_INFO Module
  248.     );
  249. PMODULE_INFO
  250. FindModuleContainingAddress(
  251.     LPVOID Address
  252.     );
  253. VOID
  254. SetSymbolSearchPath( );
  255. LONG
  256. AddKernelDrivers( );
  257. #ifdef _ALPHA_
  258. #define CONTEXT_TO_PROGRAM_COUNTER(Context) ((Context)->Fir)
  259. #define BPSKIP 4
  260. #endif // _ALPHA_
  261. #ifdef _MIPS_
  262. #define CONTEXT_TO_PROGRAM_COUNTER(Context) ((Context)->Fir)
  263. #define BPSKIP 4
  264. #endif // _MIPS_
  265. #ifdef _PPC_
  266. #define CONTEXT_TO_PROGRAM_COUNTER(Context) ((Context)->Iar)
  267. #define BPSKIP 4
  268. #endif // _PPC_
  269. #ifdef _X86_
  270. #define CONTEXT_TO_PROGRAM_COUNTER(Context) ((Context)->Eip)
  271. #define BPSKIP 1
  272. #endif // _X86_
  273. #endif // defined( RC_INVOKED )