xenoborg/alpha/archive/source/XenoKrnl/XenoKrnl.cpp
2012-01-05 00:03:04 +00:00

59 lines
2 KiB
C++

// XenoKrnl.cpp : Defines the entry point for the DLL application.
//
#include "XenoKrnl.h"
#include "EmuMain.h"
#include "Error.h"
//--------------------------------------------------------------------------------------
// Global
//--------------------------------------------------------------------------------------
BOOL g_bNotExiting = TRUE;
//--------------------------------------------------------------------------------------
// Name: DllMain
// Desc: Entry point of the emulator. When Xenoborg.exe and XenoKrnl.dll are loaded, we
// give total control to the XenoKrnl.dll and Xenoborg.exe is used to reserve the
// required memory range (0x10000 onwards, depending on how much Ram we are emulating)
// to load our .xbe files for direct code execution.
//--------------------------------------------------------------------------------------
BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
switch( dwReason )
{
case DLL_PROCESS_ATTACH:
// Initialize the emulator threads
if( !InitEmuThreads() )
{
EmuError( "Error creating emulator threads!" );
//exit(0);
g_bNotExiting = FALSE;
}
break;
case DLL_THREAD_ATTACH: break;
case DLL_THREAD_DETACH: break;
case DLL_PROCESS_DETACH:
CloseEmuThreads();
g_bNotExiting = FALSE;
break;
}
return TRUE;
}
//--------------------------------------------------------------------------------------
// Name: XenoKrnlNullFunc
// Desc: The purpose of this function is to give Xenoborg.exe something to do outside of
// the .exe itself while we overwrite it with .xbe contents. The trick is to res-
// tore the contents of the .exe prior to exiting. Whether this is necessary or
// not remains to be seen...
//--------------------------------------------------------------------------------------
XENOKRNL_API void XenoKrnlNullFunc(void)
{
// exit(0);
while( g_bNotExiting );
MessageBox( NULL, L"Exiting...", L"", MB_OK );
}