CRASH.H

/*++ 

Copyright 1993 - 1998 Microsoft Corporation

Module Name:

crash.h

Abstract:

This module implements support for handling crash dump files.

*** Use this file when linking againts crashxxx.lib

Revision History:

--*/

#ifndef _CRASHLIB_
#define _CRASHLIB_

#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