diff --git a/loader/pe_resource.c b/loader/pe_resource.c index 3dce489dde4a07683b7e0261789b9819590c493d..95af38d9b9b9b1d5e8720cc505e20bddd5f66a12 100644 --- a/loader/pe_resource.c +++ b/loader/pe_resource.c @@ -12,10 +12,12 @@ #include <stdlib.h> #include <sys/types.h> + #include "wine/winestring.h" #include "wine/unicode.h" #include "windef.h" #include "winnls.h" +#include "winerror.h" #include "module.h" #include "heap.h" #include "task.h" @@ -24,6 +26,8 @@ #include "neexe.h" #include "debugtools.h" +DEFAULT_DEBUG_CHANNEL(resource); + /********************************************************************** * get_resdir * @@ -35,6 +39,12 @@ static IMAGE_RESOURCE_DIRECTORY* get_resdir( HMODULE hmod ) IMAGE_RESOURCE_DIRECTORY *ret = NULL; if (!hmod) hmod = GetModuleHandleA( NULL ); + else if (!HIWORD(hmod)) + { + FIXME("Enumeration of 16-bit resources is not supported\n"); + SetLastError(ERROR_INVALID_HANDLE); + return NULL; + } dir = &PE_HEADER(hmod)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE]; if (dir->Size && dir->VirtualAddress) ret = (IMAGE_RESOURCE_DIRECTORY *)((char *)hmod + dir->VirtualAddress);