#include <config.h>
-#ifdef PLATFORM_WIN32
+#ifdef HOST_WIN32
#if _WIN32_WINNT < 0x0501
/* Required for ACTCTX. */
if (!CliHeaderDir->VirtualAddress)
return STATUS_INVALID_IMAGE_FORMAT;
+ CliHeader = (MonoCLIHeader*)((DWORD_PTR)DosHeader + CliHeaderDir->VirtualAddress);
+ if (CliHeader->ch_flags & CLI_FLAGS_32BITREQUIRED)
+ return STATUS_INVALID_IMAGE_FORMAT;
+
+ if (CliHeader->ch_flags & CLI_FLAGS_ILONLY)
+ {
+ /* Avoid calling _CorDllMain because imports are not resolved for IL only images. */
+ if (NtHeaders64->OptionalHeader.AddressOfEntryPoint != 0)
+ {
+ Address = &NtHeaders64->OptionalHeader.AddressOfEntryPoint;
+ if (!VirtualProtect(Address, sizeof(DWORD), PAGE_READWRITE, &OldProtect))
+ return E_UNEXPECTED;
+ *Address = (DWORD)0;
+ if (!VirtualProtect(Address, sizeof(DWORD), OldProtect, &OldProtect))
+ return E_UNEXPECTED;
+ }
+ }
+
return STATUS_SUCCESS;
}
return E_FAIL;
BaseRelocSize -= RelocBlockSize;
- RelocBlock = (USHORT*)((DWORD_PTR)BaseReloc + IMAGE_SIZEOF_BASE_RELOCATION);
- RelocBlockSize -= IMAGE_SIZEOF_BASE_RELOCATION;
+ RelocBlock = (USHORT*)((DWORD_PTR)BaseReloc + sizeof(IMAGE_BASE_RELOCATION));
+ RelocBlockSize -= sizeof(IMAGE_BASE_RELOCATION);
RelocBlockSize /= sizeof(USHORT);
while (RelocBlockSize-- != 0)
MonoFixupExe ((HMODULE) image->raw_data);
}
-#endif /* PLATFORM_WIN32 */
+#endif /* HOST_WIN32 */