Darryl Pogue
13 years ago
8 changed files with 0 additions and 1781 deletions
@ -1,28 +0,0 @@ |
|||||||
include_directories(../../CoreLib) |
|
||||||
include_directories(../../NucleusLib) |
|
||||||
|
|
||||||
set(pnCrashExe_SOURCES |
|
||||||
|
|
||||||
) |
|
||||||
|
|
||||||
set(pnCrashExe_HEADERS |
|
||||||
Pch.h |
|
||||||
) |
|
||||||
|
|
||||||
if(WIN32 AND NOT CYGWIN) |
|
||||||
set (pnCrashExe_SOURCES ${pnCrashExe_SOURCES} |
|
||||||
Win32/pnCreError.cpp |
|
||||||
Win32/pnCreGui.cpp |
|
||||||
Win32/pnCreMail.cpp |
|
||||||
Win32/pnCreTools.cpp |
|
||||||
) |
|
||||||
|
|
||||||
set (pnCrashExe_HEADERS ${pnCrashExe_HEADERS} |
|
||||||
Win32/W32Int.h |
|
||||||
) |
|
||||||
endif(WIN32 AND NOT CYGWIN) |
|
||||||
|
|
||||||
add_library(pnCrashExe STATIC ${pnCrashExe_SOURCES} ${pnCrashExe_HEADERS}) |
|
||||||
|
|
||||||
source_group("Source Files" FILES ${pnCrashExe_SOURCES}) |
|
||||||
source_group("Header Files" FILES ${pnCrashExe_HEADERS}) |
|
@ -1,65 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnCrashExe/Pch.h |
|
||||||
*
|
|
||||||
***/ |
|
||||||
|
|
||||||
#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNCRASHEXE_PCH_H |
|
||||||
#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnCrashExe/Pch.h included more than once" |
|
||||||
#endif |
|
||||||
#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNCRASHEXE_PCH_H |
|
||||||
|
|
||||||
|
|
||||||
#include "pnUtils/pnUtils.h" |
|
||||||
#include "pnProduct/pnProduct.h" |
|
||||||
#include "pnNetBase/pnNetBase.h" |
|
||||||
#include "pnAsyncCore/pnAsyncCore.h" |
|
||||||
#include "pnMail/pnMail.h" |
|
||||||
|
|
||||||
#include <ImageHlp.h> |
|
||||||
#include <process.h> |
|
||||||
|
|
||||||
#ifdef HS_BUILD_FOR_WIN32 |
|
||||||
#include "Win32/W32Int.h" |
|
||||||
#endif |
|
@ -1,147 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnCrashExe/Intern.h |
|
||||||
*
|
|
||||||
***/ |
|
||||||
|
|
||||||
#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNCRASHEXE_INTERN_H |
|
||||||
#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnCrashExe/Intern.h included more than once" |
|
||||||
#endif |
|
||||||
#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNCRASHEXE_INTERN_H |
|
||||||
|
|
||||||
|
|
||||||
namespace Crash { |
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* Mail |
|
||||||
* |
|
||||||
***/ |
|
||||||
|
|
||||||
void CrashSendEmail ( |
|
||||||
const char smtp[], |
|
||||||
const char sender[], |
|
||||||
const char recipients[], |
|
||||||
const char replyTo[], |
|
||||||
const char username[], |
|
||||||
const char password[], |
|
||||||
const char programName[], |
|
||||||
const char errorType[], |
|
||||||
const char logBuffer[] |
|
||||||
); |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* ImgHlp |
|
||||||
* |
|
||||||
***/ |
|
||||||
|
|
||||||
// make our own IMAGEAPI type because the real definition uses DECLSPEC_IMPORT
|
|
||||||
#define MYIMAGEAPI __stdcall |
|
||||||
|
|
||||||
class CImageHelp { |
|
||||||
private: |
|
||||||
HMODULE m_libInst; |
|
||||||
HANDLE m_process; |
|
||||||
char * m_appName; |
|
||||||
char m_appPath[MAX_PATH]; |
|
||||||
|
|
||||||
public: |
|
||||||
CImageHelp (HINSTANCE instance); |
|
||||||
~CImageHelp (); |
|
||||||
|
|
||||||
inline HANDLE Process () const { |
|
||||||
return m_process; |
|
||||||
} |
|
||||||
|
|
||||||
inline const char * GetProgramPath () const { |
|
||||||
return m_appPath; |
|
||||||
} |
|
||||||
|
|
||||||
inline const char * GetProgramName () const { |
|
||||||
return m_appName; |
|
||||||
} |
|
||||||
|
|
||||||
BOOL (MYIMAGEAPI * SymGetModuleInfo)( |
|
||||||
HANDLE hProcess, |
|
||||||
DWORD dwAddr, |
|
||||||
IMAGEHLP_MODULE * ModuleInfo |
|
||||||
); |
|
||||||
|
|
||||||
BOOL (MYIMAGEAPI * StackWalk)( |
|
||||||
DWORD MachineType,
|
|
||||||
HANDLE hProcess,
|
|
||||||
HANDLE hThread,
|
|
||||||
LPSTACKFRAME StackFrame,
|
|
||||||
LPVOID ContextRecord,
|
|
||||||
PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
|
|
||||||
PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
|
|
||||||
PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
|
|
||||||
PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
|
|
||||||
); |
|
||||||
|
|
||||||
LPVOID (MYIMAGEAPI * SymFunctionTableAccess)( |
|
||||||
HANDLE hProcess,
|
|
||||||
DWORD AddrBase
|
|
||||||
); |
|
||||||
|
|
||||||
DWORD (MYIMAGEAPI * SymGetModuleBase)( |
|
||||||
HANDLE hProcess,
|
|
||||||
DWORD dwAddr
|
|
||||||
); |
|
||||||
|
|
||||||
BOOL (MYIMAGEAPI * SymGetSymFromAddr)( |
|
||||||
HANDLE hProcess,
|
|
||||||
DWORD Address,
|
|
||||||
LPDWORD Displacement,
|
|
||||||
PIMAGEHLP_SYMBOL Symbol
|
|
||||||
); |
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} using namespace Crash; |
|
File diff suppressed because it is too large
Load Diff
@ -1,49 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnCrashExe/pnCreGui.cpp |
|
||||||
*
|
|
||||||
***/ |
|
||||||
|
|
||||||
#include "../Pch.h" |
|
||||||
#pragma hdrstop |
|
@ -1,214 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnCrashExe/Win32/pnCreMail.cpp |
|
||||||
*
|
|
||||||
***/ |
|
||||||
|
|
||||||
#include "../Pch.h" |
|
||||||
#pragma hdrstop |
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
namespace Crash { |
|
||||||
//============================================================================
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* Local functions |
|
||||||
* |
|
||||||
***/ |
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
static bool CreateInheritablePipe ( |
|
||||||
HANDLE * read,
|
|
||||||
HANDLE * write, |
|
||||||
bool inheritRead |
|
||||||
) { |
|
||||||
// create pipe for std error read/write
|
|
||||||
if (!CreatePipe(read, write, (LPSECURITY_ATTRIBUTES) NULL, 0)) |
|
||||||
return false; |
|
||||||
|
|
||||||
// make the appropriate handle inheritable
|
|
||||||
HANDLE hProcess = GetCurrentProcess(); |
|
||||||
HANDLE * inherit = inheritRead ? read : write; |
|
||||||
bool result = DuplicateHandle( |
|
||||||
hProcess, |
|
||||||
*inherit,
|
|
||||||
hProcess, |
|
||||||
inherit, |
|
||||||
0, |
|
||||||
true, // make inheritable
|
|
||||||
DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS |
|
||||||
); |
|
||||||
if (!result) |
|
||||||
return false; |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* Module functions |
|
||||||
* |
|
||||||
***/ |
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
void CrashSendEmail ( |
|
||||||
const char smtp[], |
|
||||||
const char sender[], |
|
||||||
const char recipients[], |
|
||||||
const char replyTo[], |
|
||||||
const char username[], |
|
||||||
const char password[], |
|
||||||
const char programName[], |
|
||||||
const char errorType[], |
|
||||||
const char logBuffer[] |
|
||||||
) { |
|
||||||
enum { |
|
||||||
IN_CHILD, |
|
||||||
IN_PARENT, |
|
||||||
NUM_PIPES |
|
||||||
}; |
|
||||||
|
|
||||||
unsigned i; |
|
||||||
|
|
||||||
HANDLE pipes[NUM_PIPES]; |
|
||||||
for (i = 0; i < arrsize(pipes); ++i) |
|
||||||
pipes[i] = INVALID_HANDLE_VALUE; |
|
||||||
|
|
||||||
|
|
||||||
for (;;) { |
|
||||||
// create pipes for Server -> StdIn -> Client
|
|
||||||
if (!CreateInheritablePipe(&pipes[IN_CHILD], &pipes[IN_PARENT], true)) |
|
||||||
break; |
|
||||||
|
|
||||||
char subject[512]; |
|
||||||
StrPrintf( |
|
||||||
subject, |
|
||||||
arrsize(subject), |
|
||||||
"\"[Crash] %s, %s\"", |
|
||||||
programName, |
|
||||||
errorType |
|
||||||
); |
|
||||||
|
|
||||||
char cmdLine[512]; |
|
||||||
StrPrintf( |
|
||||||
cmdLine, |
|
||||||
arrsize(cmdLine), |
|
||||||
"plMail.exe -smtp %s -sender %s", |
|
||||||
smtp, |
|
||||||
sender |
|
||||||
); |
|
||||||
|
|
||||||
if (replyTo && replyTo[0]) { |
|
||||||
StrPack(cmdLine, " -replyTo ", arrsize(cmdLine)); |
|
||||||
StrPack(cmdLine, replyTo, arrsize(cmdLine)); |
|
||||||
} |
|
||||||
|
|
||||||
if (username && username[0]) { |
|
||||||
StrPack(cmdLine, " -u ", arrsize(cmdLine)); |
|
||||||
StrPack(cmdLine, username, arrsize(cmdLine)); |
|
||||||
} |
|
||||||
|
|
||||||
if (password && password[0]) { |
|
||||||
StrPack(cmdLine, " -p ", arrsize(cmdLine)); |
|
||||||
StrPack(cmdLine, password, arrsize(cmdLine)); |
|
||||||
} |
|
||||||
|
|
||||||
StrPack(cmdLine, " ", arrsize(cmdLine)); |
|
||||||
StrPack(cmdLine, recipients, arrsize(cmdLine)); |
|
||||||
|
|
||||||
StrPack(cmdLine, " ", arrsize(cmdLine)); |
|
||||||
StrPack(cmdLine, subject, arrsize(cmdLine)); |
|
||||||
|
|
||||||
// create process
|
|
||||||
STARTUPINFO si; |
|
||||||
memset(&si, 0, sizeof(si)); |
|
||||||
si.cb = sizeof(si); |
|
||||||
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; |
|
||||||
si.wShowWindow = SW_HIDE; |
|
||||||
si.hStdInput = pipes[IN_CHILD]; |
|
||||||
si.hStdOutput = INVALID_HANDLE_VALUE; |
|
||||||
si.hStdError = INVALID_HANDLE_VALUE; |
|
||||||
PROCESS_INFORMATION pi; |
|
||||||
BOOL result = CreateProcess( |
|
||||||
NULL, |
|
||||||
cmdLine, |
|
||||||
(LPSECURITY_ATTRIBUTES) NULL, |
|
||||||
(LPSECURITY_ATTRIBUTES) NULL, |
|
||||||
true, // => inherit handles
|
|
||||||
NORMAL_PRIORITY_CLASS, |
|
||||||
NULL, |
|
||||||
NULL, |
|
||||||
&si, |
|
||||||
&pi |
|
||||||
); |
|
||||||
if (!result) |
|
||||||
break; |
|
||||||
|
|
||||||
CloseHandle(pi.hProcess); |
|
||||||
CloseHandle(pi.hThread); |
|
||||||
|
|
||||||
// Write output data
|
|
||||||
DWORD written, length = StrLen(logBuffer); |
|
||||||
WriteFile(pipes[IN_PARENT], logBuffer, length, &written, NULL); |
|
||||||
|
|
||||||
// complete
|
|
||||||
break; |
|
||||||
} |
|
||||||
|
|
||||||
// cleanup pipes
|
|
||||||
for (i = 0; i < arrsize(pipes); ++i) { |
|
||||||
if (pipes[i] != INVALID_HANDLE_VALUE) |
|
||||||
CloseHandle(pipes[i]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
} // namespace Crash
|
|
||||||
//============================================================================
|
|
@ -1,201 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnCrashExe/pnCreTools.cpp |
|
||||||
*
|
|
||||||
***/ |
|
||||||
|
|
||||||
#include "../Pch.h" |
|
||||||
#pragma hdrstop |
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
namespace Crash { |
|
||||||
//============================================================================
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* Internal functions |
|
||||||
* |
|
||||||
***/ |
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
static BOOL MYIMAGEAPI iSymGetModuleInfo ( |
|
||||||
HANDLE, |
|
||||||
DWORD, |
|
||||||
IMAGEHLP_MODULE * ModuleInfo |
|
||||||
) { |
|
||||||
memset(ModuleInfo, 0, sizeof(*ModuleInfo)); |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
static BOOL MYIMAGEAPI iStackWalk ( |
|
||||||
DWORD, |
|
||||||
HANDLE, |
|
||||||
HANDLE, |
|
||||||
LPSTACKFRAME, |
|
||||||
LPVOID, |
|
||||||
PREAD_PROCESS_MEMORY_ROUTINE, |
|
||||||
PFUNCTION_TABLE_ACCESS_ROUTINE, |
|
||||||
PGET_MODULE_BASE_ROUTINE, |
|
||||||
PTRANSLATE_ADDRESS_ROUTINE |
|
||||||
) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
static LPVOID MYIMAGEAPI iSymFunctionTableAccess ( |
|
||||||
HANDLE, |
|
||||||
DWORD |
|
||||||
) { |
|
||||||
return nil; |
|
||||||
} |
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
static DWORD MYIMAGEAPI iSymGetModuleBase ( |
|
||||||
HANDLE,
|
|
||||||
DWORD |
|
||||||
) { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
static BOOL MYIMAGEAPI iSymGetSymFromAddr ( |
|
||||||
HANDLE, |
|
||||||
DWORD, |
|
||||||
LPDWORD Displacement,
|
|
||||||
PIMAGEHLP_SYMBOL Symbol
|
|
||||||
) { |
|
||||||
*Displacement = 0; |
|
||||||
memset(Symbol, 0, sizeof(*Symbol)); |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* |
|
||||||
* CImageHelp |
|
||||||
* |
|
||||||
***/ |
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
CImageHelp::CImageHelp (HINSTANCE instance) |
|
||||||
: m_libInst(nil), |
|
||||||
m_process(nil) |
|
||||||
{ |
|
||||||
// get program directory and filename
|
|
||||||
if (!GetModuleFileNameA(instance, m_appPath, arrsize(m_appPath))) |
|
||||||
m_appPath[0] = 0; |
|
||||||
if (nil != (m_appName = StrChrR(m_appPath, '\\'))) |
|
||||||
*m_appName++ = '\0'; |
|
||||||
else |
|
||||||
m_appName = m_appPath; |
|
||||||
|
|
||||||
// initialize symbols
|
|
||||||
for (;;) { |
|
||||||
if (nil == (m_libInst = LoadLibrary("ImageHlp.dll"))) |
|
||||||
break; |
|
||||||
|
|
||||||
// initialize symbols for this process
|
|
||||||
BOOL (MYIMAGEAPI * SymInitialize)(HANDLE hProcess, char * path, BOOL fInvade); |
|
||||||
* (FARPROC *) &SymInitialize = GetProcAddress(m_libInst, "SymInitialize"); |
|
||||||
if (!SymInitialize) |
|
||||||
break; |
|
||||||
|
|
||||||
HANDLE hProcess = GetCurrentProcess(); |
|
||||||
if (!SymInitialize(hProcess, m_appPath, false)) |
|
||||||
break; |
|
||||||
|
|
||||||
// import functions
|
|
||||||
FARPROC proc; |
|
||||||
#define BIND(x) * (FARPROC *) &(x) = ((proc = GetProcAddress(m_libInst, #x)) != nil) ? proc : (FARPROC) i##x |
|
||||||
BIND(SymGetModuleInfo); |
|
||||||
BIND(StackWalk); |
|
||||||
BIND(SymFunctionTableAccess); |
|
||||||
BIND(SymGetModuleBase); |
|
||||||
BIND(SymGetSymFromAddr); |
|
||||||
#undef BIND |
|
||||||
|
|
||||||
// success
|
|
||||||
m_process = hProcess; |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
// failure!
|
|
||||||
if (m_libInst) { |
|
||||||
FreeLibrary(m_libInst); |
|
||||||
m_libInst = nil; |
|
||||||
} |
|
||||||
|
|
||||||
#define INIT(x) x = i##x |
|
||||||
INIT(SymGetModuleInfo); |
|
||||||
INIT(StackWalk); |
|
||||||
INIT(SymFunctionTableAccess); |
|
||||||
INIT(SymGetModuleBase); |
|
||||||
INIT(SymGetSymFromAddr); |
|
||||||
#undef INIT |
|
||||||
} |
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
CImageHelp::~CImageHelp () { |
|
||||||
if (m_process) { |
|
||||||
BOOL (MYIMAGEAPI * SymCleanup)(HANDLE hProcess); |
|
||||||
* (FARPROC *) &SymCleanup = GetProcAddress(m_libInst, "SymCleanup"); |
|
||||||
if (SymCleanup) |
|
||||||
SymCleanup(m_process); |
|
||||||
m_process = 0; |
|
||||||
} |
|
||||||
|
|
||||||
if (m_libInst) { |
|
||||||
FreeLibrary(m_libInst); |
|
||||||
m_libInst = 0; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
} // namespace Crash
|
|
||||||
//============================================================================
|
|
Loading…
Reference in new issue