|
|
/******************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name: faultrep.h
Abstract: header for fault reporting for unhandled exceptions
Revision History: created derekm 07/07/00
******************************************************************************/
#ifndef FAULTREP_H
#define FAULTREP_H
#include "errorrep.h"
///////////////////////////////////////////////////////////////////////////////
// structs
typedef enum tagEFaultRepOptions { froNoDebugWait = (DWORD)-1, froNoDebug = 0, froDebug = 1, } EFaultRepOptions;
typedef enum tagEDumpFlags { dfFilterThread = 0x1, dfFilterThreadEx = 0x2, dfCollectSig = 0x4, } EDumpFlags;
typedef struct tagSMDumpOptions { DWORD cbSMDO; ULONG ulThread; ULONG ulThreadEx; ULONG ulMod; DWORD dwThreadID; DWORD dfOptions; UINT64 pvFaultAddr; WCHAR wszAppFullPath[MAX_PATH]; WCHAR wszApp[MAX_PATH]; WORD rgAppVer[4]; WCHAR wszMod[MAX_PATH]; WCHAR wszModFullPath[MAX_PATH]; WORD rgModVer[4]; UINT64 pvOffset; UINT64 pEP; BOOL fEPClient; BOOL fIncludeHeap; // Include heap in minidump
} SMDumpOptions;
typedef struct tagSFaultRepManifest { DWORD pidReqProcess; BOOL fIs64bit; DWORD thidFault; UINT64 pvFaultAddr; LPWSTR wszExe; UINT64 pEP; } SFaultRepManifest;
typedef enum tagEEventType { eetKernelFault = 0, eetShutdown, eetUseEventInfo, } EEventType;
typedef struct tagSEventInfoW { DWORD cbSEI; LPWSTR wszEventName; LPWSTR wszErrMsg; LPWSTR wszHdr; LPWSTR wszTitle; LPWSTR wszStage1; LPWSTR wszStage2; LPWSTR wszFileList; LPWSTR wszEventSrc; LPWSTR wszCorpPath; LPWSTR wszPlea; LPWSTR wszSendBtn; LPWSTR wszNoSendBtn; BOOL fUseLitePlea; BOOL fUseIEForURLs; BOOL fNoBucketLogs; BOOL fNoDefCabLimit; } SEventInfoW;
///////////////////////////////////////////////////////////////////////////////
// function prototypes
EFaultRepRetVal APIENTRY ReportFaultDWM(SFaultRepManifest *pfrm, LPCWSTR wszDir, HANDLE hToken, LPVOID pvEnv, PROCESS_INFORMATION *ppi, LPWSTR wszDumpFile); EFaultRepRetVal APIENTRY ReportFaultToQueue(SFaultRepManifest *pfrm); EFaultRepRetVal APIENTRY ReportFaultFromQueue(LPWSTR wszDump, BYTE *pbData, DWORD cbData);
EFaultRepRetVal APIENTRY ReportKernelFaultA(LPCSTR szDump); EFaultRepRetVal APIENTRY ReportKernelFaultW(LPCWSTR wszDump); EFaultRepRetVal APIENTRY ReportKernelFaultDWW(LPCWSTR wszDump);
EFaultRepRetVal APIENTRY ReportEREvent(EEventType eet, LPCWSTR wszDump, SEventInfoW *pei); EFaultRepRetVal APIENTRY ReportEREventDW(EEventType eet, LPCWSTR wszDump, SEventInfoW *pei);
EFaultRepRetVal APIENTRY ReportHang(DWORD dwpid, DWORD dwtid, BOOL f64bit, HANDLE hNotify);
BOOL APIENTRY CreateMinidumpA(DWORD dwpid, LPCSTR szDump, SMDumpOptions *psmdo); BOOL APIENTRY CreateMinidumpW(DWORD dwpid, LPCWSTR wszDump, SMDumpOptions *psmdo);
///////////////////////////////////////////////////////////////////////////////
// function pointer typedefs
typedef EFaultRepRetVal (APIENTRY *pfn_REPORTFAULTDWM)(SFaultRepManifest *, LPCWSTR, HANDLE, LPVOID, PROCESS_INFORMATION *, LPWSTR); typedef EFaultRepRetVal (APIENTRY *pfn_REPORTFAULTTOQ)(SFaultRepManifest *); typedef EFaultRepRetVal (APIENTRY *pfn_REPORTFAULTFROMQ)(LPWSTR, BYTE *, DWORD);
typedef EFaultRepRetVal (APIENTRY *pfn_REPORTKERNELFAULTA)(LPCSTR); typedef EFaultRepRetVal (APIENTRY *pfn_REPORTKERNELFAULTW)(LPCWSTR); typedef EFaultRepRetVal (APIENTRY *pfn_REPORTKERNELFAULTDWW)(LPCWSTR);
typedef EFaultRepRetVal (APIENTRY *pfn_REPORTEREVENT)(EEventType, LPCWSTR, SEventInfoW *); typedef EFaultRepRetVal (APIENTRY *pfn_REPORTEREVENTDW)(EEventType, LPCWSTR, SEventInfoW *);
typedef EFaultRepRetVal (APIENTRY *pfn_REPORTHANG)(DWORD, DWORD, BOOL, HANDLE);
typedef BOOL (APIENTRY *pfn_CREATEMINIDUMPA)(DWORD, LPCSTR, SMDumpOptions *); typedef BOOL (APIENTRY *pfn_CREATEMINIDUMPW)(DWORD, LPCWSTR, SMDumpOptions *);
///////////////////////////////////////////////////////////////////////////////
// UNICODE stuff
#ifdef UNICODE
#define ReportKernelFault ReportKernelFaultW
#define CreateMinidump CreateMinidumpW
#define pfn_REPORTKERNELFAULT pfn_REPORTKERNELFAULTW
#define pfn_CREATEMINIDUMP pfn_CREATEMINIDUMPW
#else // not UNICODE
#define ReportKernelFault ReportKernelFaultA
#define CreateMinidump CreateMinidumpA
#define pfn_REPORTKERNELFAULT pfn_REPORTKERNELFAULTA
#define pfn_CREATEMINIDUMP pfn_CREATEMINIDUMPA
#endif // UNICODE
#endif // FAULTREP_H
|