From e65b8d925a203f5fe7c616593483d0d2782438fd Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 8 Feb 2006 15:11:19 +0100 Subject: [PATCH] kernel: Use a standard LoadLibrary call to load the main exe. --- dlls/kernel/process.c | 65 ++++----------------------------------------------- 1 file changed, 4 insertions(+), 61 deletions(-) diff --git a/dlls/kernel/process.c b/dlls/kernel/process.c index cba0bc19525..1a890c32959 100644 --- a/dlls/kernel/process.c +++ b/dlls/kernel/process.c @@ -297,65 +297,6 @@ static BOOL find_exe_file( const WCHAR *name, WCHAR *buffer, int buflen, HANDLE } -/********************************************************************** - * load_pe_exe - * - * Load a PE format EXE file. - */ -static HMODULE load_pe_exe( const WCHAR *name, HANDLE file ) -{ - IO_STATUS_BLOCK io; - FILE_FS_DEVICE_INFORMATION device_info; - IMAGE_NT_HEADERS *nt; - HANDLE mapping; - void *module; - OBJECT_ATTRIBUTES attr; - LARGE_INTEGER size; - SIZE_T len = 0; - - attr.Length = sizeof(attr); - attr.RootDirectory = 0; - attr.ObjectName = NULL; - attr.Attributes = 0; - attr.SecurityDescriptor = NULL; - attr.SecurityQualityOfService = NULL; - size.QuadPart = 0; - - if (NtCreateSection( &mapping, STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_READ, - &attr, &size, 0, SEC_IMAGE, file ) != STATUS_SUCCESS) - return NULL; - - module = NULL; - if (NtMapViewOfSection( mapping, GetCurrentProcess(), &module, 0, 0, &size, &len, - ViewShare, 0, PAGE_READONLY ) != STATUS_SUCCESS) - return NULL; - - NtClose( mapping ); - - /* virus check */ - nt = RtlImageNtHeader( module ); - if (nt->OptionalHeader.AddressOfEntryPoint) - { - if (!RtlImageRvaToSection( nt, module, nt->OptionalHeader.AddressOfEntryPoint )) - MESSAGE("VIRUS WARNING: PE module %s has an invalid entrypoint (0x%08lx) " - "outside all sections (possibly infected by Tchernobyl/SpaceFiller virus)!\n", - debugstr_w(name), nt->OptionalHeader.AddressOfEntryPoint ); - } - - if (NtQueryVolumeInformationFile( file, &io, &device_info, sizeof(device_info), - FileFsDeviceInformation ) == STATUS_SUCCESS) - { - /* don't keep the file handle open on removable media */ - if (device_info.Characteristics & FILE_REMOVABLE_MEDIA) - { - CloseHandle( main_exe_file ); - main_exe_file = 0; - } - } - - return module; -} - /*********************************************************************** * build_initial_environment * @@ -1098,8 +1039,10 @@ void __wine_kernel_init(void) { case BINARY_PE_EXE: TRACE( "starting Win32 binary %s\n", debugstr_w(main_exe_name) ); - if ((peb->ImageBaseAddress = load_pe_exe( main_exe_name, main_exe_file ))) - goto found; + peb->ImageBaseAddress = LoadLibraryExW( main_exe_name, 0, DONT_RESOLVE_DLL_REFERENCES ); + CloseHandle( main_exe_file ); + main_exe_file = 0; + if (peb->ImageBaseAddress) goto found; MESSAGE( "wine: could not load %s as Win32 binary\n", debugstr_w(main_exe_name) ); ExitProcess(1); case BINARY_PE_DLL: -- 2.11.4.GIT