218 lines
3.7 KiB
C
218 lines
3.7 KiB
C
/*++
|
|
|
|
Copyright (c) 1993 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
crash.h
|
|
|
|
Abstract:
|
|
|
|
This module implements support for handling crash dump files.
|
|
|
|
*** Use this file when linking againts crashxxx.lib
|
|
|
|
Author:
|
|
|
|
Lou Perazzoli (Loup) 10-Nov-1993
|
|
Wesley Witt (wesw) 1-Dec-1993 (additional work)
|
|
|
|
Environment:
|
|
|
|
NT 3.5
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _CRASHLIB_
|
|
#define _CRASHLIB_
|
|
|
|
#include <ntiodump.h>
|
|
|
|
#ifdef __cplusplus
|
|
#pragma warning(disable:4200)
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
typedef struct _USERMODE_CRASHDUMP_HEADER {
|
|
DWORD Signature;
|
|
DWORD ValidDump;
|
|
DWORD MajorVersion;
|
|
DWORD MinorVersion;
|
|
DWORD MachineImageType;
|
|
DWORD ThreadCount;
|
|
DWORD ModuleCount;
|
|
DWORD MemoryRegionCount;
|
|
DWORD ThreadOffset;
|
|
DWORD ModuleOffset;
|
|
DWORD DataOffset;
|
|
DWORD MemoryRegionOffset;
|
|
DWORD DebugEventOffset;
|
|
DWORD ThreadStateOffset;
|
|
DWORD Spare0;
|
|
DWORD Spare1;
|
|
} USERMODE_CRASHDUMP_HEADER, *PUSERMODE_CRASHDUMP_HEADER;
|
|
|
|
typedef struct _CRASH_MODULE {
|
|
DWORD BaseOfImage;
|
|
DWORD SizeOfImage;
|
|
DWORD ImageNameLength;
|
|
CHAR ImageName[0];
|
|
} CRASH_MODULE, *PCRASH_MODULE;
|
|
|
|
typedef struct _CRASH_THREAD {
|
|
DWORD ThreadId;
|
|
DWORD SuspendCount;
|
|
DWORD PriorityClass;
|
|
DWORD Priority;
|
|
DWORD Teb;
|
|
DWORD Spare0;
|
|
DWORD Spare1;
|
|
DWORD Spare2;
|
|
DWORD Spare3;
|
|
DWORD Spare4;
|
|
DWORD Spare5;
|
|
DWORD Spare6;
|
|
} CRASH_THREAD, *PCRASH_THREAD;
|
|
|
|
|
|
//
|
|
// usermode crash dump data types
|
|
//
|
|
#define DMP_EXCEPTION 1 // obsolete
|
|
#define DMP_MEMORY_BASIC_INFORMATION 2
|
|
#define DMP_THREAD_CONTEXT 3
|
|
#define DMP_MODULE 4
|
|
#define DMP_MEMORY_DATA 5
|
|
#define DMP_DEBUG_EVENT 6
|
|
#define DMP_THREAD_STATE 7
|
|
|
|
//
|
|
// usermode crashdump callback function
|
|
//
|
|
typedef BOOL (*PDMP_CREATE_DUMP_CALLBACK)(
|
|
DWORD DataType,
|
|
PVOID* DumpData,
|
|
LPDWORD DumpDataLength,
|
|
PVOID UserData
|
|
);
|
|
|
|
BOOL
|
|
DmpCreateUserDump(
|
|
IN LPSTR CrashDumpName,
|
|
IN PDMP_CREATE_DUMP_CALLBACK DmpCallback,
|
|
IN PVOID lpv
|
|
);
|
|
|
|
|
|
BOOL
|
|
DmpInitialize (
|
|
IN LPSTR FileName,
|
|
OUT PCONTEXT *Context,
|
|
OUT PEXCEPTION_RECORD *Exception,
|
|
OUT PVOID *DmpHeader
|
|
);
|
|
|
|
VOID
|
|
DmpUnInitialize (
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmpReadMemory (
|
|
IN PVOID BaseAddress,
|
|
IN PVOID Buffer,
|
|
IN ULONG Size
|
|
);
|
|
|
|
DWORD
|
|
DmpWriteMemory (
|
|
IN PVOID BaseAddress,
|
|
IN PVOID Buffer,
|
|
IN ULONG Size
|
|
);
|
|
|
|
PVOID
|
|
VaToLocation (
|
|
IN PVOID VirtualAddress
|
|
);
|
|
|
|
PVOID
|
|
PhysicalToLocation (
|
|
IN PVOID PhysicalAddress
|
|
);
|
|
|
|
PVOID
|
|
PageToLocation (
|
|
IN ULONG Page
|
|
);
|
|
|
|
ULONG
|
|
GetPhysicalPage (
|
|
IN PVOID PhysicalAddress
|
|
);
|
|
|
|
BOOL
|
|
MapDumpFile(
|
|
IN LPSTR FileName
|
|
);
|
|
|
|
ULONG
|
|
PteToPfn (
|
|
IN ULONG Pte
|
|
);
|
|
|
|
ULONG
|
|
GetPhysicalPage (
|
|
IN PVOID PhysicalAddress
|
|
);
|
|
|
|
DWORD
|
|
DmpReadPhysicalMemory (
|
|
IN PVOID BaseAddress,
|
|
IN PVOID Buffer,
|
|
IN ULONG Size
|
|
);
|
|
|
|
DWORD
|
|
DmpWritePhysicalMemory (
|
|
IN PVOID BaseAddress,
|
|
IN PVOID Buffer,
|
|
IN ULONG Size
|
|
);
|
|
|
|
BOOL
|
|
DmpReadControlSpace(
|
|
IN USHORT Processor,
|
|
IN PVOID TargetBaseAddress,
|
|
OUT PVOID UserInterfaceBuffer,
|
|
OUT ULONG TransferCount,
|
|
OUT PULONG ActualBytesRead
|
|
);
|
|
|
|
BOOL
|
|
DmpGetContext(
|
|
IN ULONG Processor,
|
|
OUT PVOID Context
|
|
);
|
|
|
|
INT
|
|
DmpGetCurrentProcessor(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
DmpGetThread(
|
|
IN ULONG Processor,
|
|
OUT PCRASH_THREAD Thread
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#pragma warning(default:4200)
|
|
#endif
|
|
|
|
#endif
|