2011-04-10 02:19:15 -06:00
|
|
|
|
/*
|
|
|
|
|
* www.sourceforge.net/projects/dfhack
|
|
|
|
|
* Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf
|
|
|
|
|
*
|
|
|
|
|
* This software is provided 'as-is', without any express or implied
|
|
|
|
|
* warranty. In no event will the authors be held liable for any
|
|
|
|
|
* damages arising from the use of this software.
|
|
|
|
|
*
|
|
|
|
|
* Permission is granted to anyone to use this software for any
|
|
|
|
|
* purpose, including commercial applications, and to alter it and
|
|
|
|
|
* redistribute it freely, subject to the following restrictions:
|
|
|
|
|
*
|
|
|
|
|
* 1. The origin of this software must not be misrepresented; you must
|
|
|
|
|
* not claim that you wrote the original software. If you use this
|
|
|
|
|
* software in a product, an acknowledgment in the product documentation
|
|
|
|
|
* would be appreciated but is not required.
|
|
|
|
|
*
|
|
|
|
|
* 2. Altered source versions must be plainly marked as such, and
|
|
|
|
|
* must not be misrepresented as being the original software.
|
|
|
|
|
*
|
|
|
|
|
* 3. This notice may not be removed or altered from any source
|
|
|
|
|
* distribution.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef DFPLATFORMINTERNAL_H_INCLUDED
|
|
|
|
|
#define DFPLATFORMINTERNAL_H_INCLUDED
|
|
|
|
|
|
|
|
|
|
// platform includes and defines
|
|
|
|
|
#ifdef LINUX_BUILD
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
#include <sys/ptrace.h>
|
|
|
|
|
#include <dirent.h>
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
#include <sys/stat.h>
|
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
#include <sys/wait.h>
|
|
|
|
|
#else
|
|
|
|
|
// WINDOWS
|
|
|
|
|
#define _WIN32_WINNT 0x0501 // needed for INPUT struct
|
|
|
|
|
#define WINVER 0x0501 // OpenThread(), PSAPI, Toolhelp32
|
|
|
|
|
#define WIN32_LEAN_AND_MEAN
|
|
|
|
|
#include <windows.h>
|
|
|
|
|
#include <winnt.h>
|
|
|
|
|
#include <psapi.h>
|
|
|
|
|
#include <tlhelp32.h>
|
|
|
|
|
//#include <Dbghelp.h> // NOT present in mingw32
|
|
|
|
|
typedef LONG NTSTATUS;
|
|
|
|
|
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
|
|
|
|
|
|
|
|
|
|
// FIXME: it is uncertain how these map to 64bit
|
|
|
|
|
typedef struct _DEBUG_BUFFER
|
|
|
|
|
{
|
|
|
|
|
HANDLE SectionHandle;
|
|
|
|
|
PVOID SectionBase;
|
|
|
|
|
PVOID RemoteSectionBase;
|
|
|
|
|
ULONG SectionBaseDelta;
|
|
|
|
|
HANDLE EventPairHandle;
|
|
|
|
|
ULONG Unknown[2];
|
|
|
|
|
HANDLE RemoteThreadHandle;
|
|
|
|
|
ULONG InfoClassMask;
|
|
|
|
|
ULONG SizeOfInfo;
|
|
|
|
|
ULONG AllocatedSize;
|
|
|
|
|
ULONG SectionSize;
|
|
|
|
|
PVOID ModuleInformation;
|
|
|
|
|
PVOID BackTraceInformation;
|
|
|
|
|
PVOID HeapInformation;
|
|
|
|
|
PVOID LockInformation;
|
|
|
|
|
PVOID Reserved[8];
|
|
|
|
|
} DEBUG_BUFFER, *PDEBUG_BUFFER;
|
|
|
|
|
|
|
|
|
|
typedef struct _DEBUG_HEAP_INFORMATION
|
|
|
|
|
{
|
|
|
|
|
ULONG Base; // 0×00
|
|
|
|
|
ULONG Flags; // 0×04
|
|
|
|
|
USHORT Granularity; // 0×08
|
|
|
|
|
USHORT Unknown; // 0x0A
|
|
|
|
|
ULONG Allocated; // 0x0C
|
|
|
|
|
ULONG Committed; // 0×10
|
|
|
|
|
ULONG TagCount; // 0×14
|
|
|
|
|
ULONG BlockCount; // 0×18
|
|
|
|
|
ULONG Reserved[7]; // 0x1C
|
|
|
|
|
PVOID Tags; // 0×38
|
|
|
|
|
PVOID Blocks; // 0x3C
|
|
|
|
|
} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
|
|
|
|
|
|
|
|
|
|
// RtlQueryProcessDebugInformation.DebugInfoClassMask constants
|
|
|
|
|
#define PDI_MODULES 0x01
|
|
|
|
|
#define PDI_BACKTRACE 0x02
|
|
|
|
|
#define PDI_HEAPS 0x04
|
|
|
|
|
#define PDI_HEAP_TAGS 0x08
|
|
|
|
|
#define PDI_HEAP_BLOCKS 0x10
|
|
|
|
|
#define PDI_LOCKS 0x20
|
|
|
|
|
|
|
|
|
|
extern "C" __declspec(dllimport) NTSTATUS __stdcall RtlQueryProcessDebugInformation( IN ULONG ProcessId, IN ULONG DebugInfoClassMask, IN OUT PDEBUG_BUFFER DebugBuffer);
|
|
|
|
|
extern "C" __declspec(dllimport) PDEBUG_BUFFER __stdcall RtlCreateQueryDebugBuffer( IN ULONG Size, IN BOOLEAN EventPair);
|
|
|
|
|
extern "C" __declspec(dllimport) NTSTATUS __stdcall RtlDestroyQueryDebugBuffer( IN PDEBUG_BUFFER DebugBuffer);
|
|
|
|
|
#endif // WINDOWS
|
|
|
|
|
|
|
|
|
|
#endif // DFPLATFORMINTERNAL_H_INCLUDED
|