* Kornel Pal <http://www.kornelpal.hu/>
*
* Copyright (C) 2008 Kornel Pal
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
*/
#include <config.h>
#ifdef HOST_WIN32
-#if _WIN32_WINNT < 0x0501
-/* Required for ACTCTX. */
-#undef _WIN32_WINNT
-#define _WIN32_WINNT 0x0501
-#endif /* _WIN32_WINNT < 0x0501 */
-
#include <string.h>
#include <glib.h>
#include <mono/io-layer/io-layer.h>
#include "environment.h"
#include "coree.h"
+#include <shellapi.h>
+
HMODULE coree_module_handle = NULL;
static gboolean init_from_coree = FALSE;
/* Called by ntdll.dll reagardless of entry point after _CorValidateImage. */
__int32 STDMETHODCALLTYPE _CorExeMain(void)
{
+ MonoError error;
MonoDomain* domain;
MonoAssembly* assembly;
MonoImage* image;
MonoMethod* method;
guint32 entry;
gchar* file_name;
- gchar* error;
+ gchar* corlib_version_error;
int argc;
gunichar2** argvw;
gchar** argv;
init_from_coree = TRUE;
domain = mono_runtime_load (file_name, NULL);
- error = (gchar*) mono_check_corlib_version ();
- if (error) {
- g_free (error);
+ corlib_version_error = (gchar*) mono_check_corlib_version ();
+ if (corlib_version_error) {
+ g_free (corlib_version_error);
g_free (file_name);
MessageBox (NULL, L"Corlib not in sync with this runtime.", NULL, MB_ICONERROR);
mono_runtime_quit ();
ExitProcess (1);
}
- method = mono_get_method (image, entry, NULL);
+ method = mono_get_method_checked (image, entry, NULL, NULL, &error);
if (method == NULL) {
g_free (file_name);
+ mono_error_cleanup (&error); /* FIXME don't swallow the error */
MessageBox (NULL, L"The entry point method could not be loaded.", NULL, MB_ICONERROR);
mono_runtime_quit ();
ExitProcess (1);
{
IMAGE_DOS_HEADER* DosHeader;
IMAGE_NT_HEADERS32* NtHeaders32;
- IMAGE_NT_HEADERS64* NtHeaders64;
IMAGE_DATA_DIRECTORY* CliHeaderDir;
+#ifdef _WIN64
+ IMAGE_NT_HEADERS64* NtHeaders64;
MonoCLIHeader* CliHeader;
DWORD SizeOfHeaders;
+#endif
DWORD* Address;
DWORD OldProtect;
HANDLE MapHandle;
IMAGE_DOS_HEADER* DosHeader;
IMAGE_NT_HEADERS32* NtHeaders32;
+#ifdef _WIN64
IMAGE_NT_HEADERS64* NtHeaders64;
+#endif
HMODULE ModuleHandle;
FileHandle = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
goto UnmapView;
}
+#ifdef _WIN64
ValidImage:
+#endif
UnmapViewOfFile(DosHeader);
CloseHandle(MapHandle);