Signed-off-by: Mark Harmstone mark@harmstone.com --- dlls/kernelbase/loader.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/dlls/kernelbase/loader.c b/dlls/kernelbase/loader.c index fc9b0ce0083..38eeccc0b61 100644 --- a/dlls/kernelbase/loader.c +++ b/dlls/kernelbase/loader.c @@ -85,6 +85,8 @@ static BOOL load_library_as_datafile( LPCWSTR load_path, DWORD flags, LPCWSTR na HANDLE mapping, file = INVALID_HANDLE_VALUE; HMODULE module = 0; DWORD protect = PAGE_READONLY; + SECTION_BASIC_INFORMATION sect_info; + size_t size = 0;
*mod_ret = 0;
@@ -101,6 +103,10 @@ static BOOL load_library_as_datafile( LPCWSTR load_path, DWORD flags, LPCWSTR na if (!mapping) goto failed;
module = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 ); + + if (NT_SUCCESS(NtQuerySection( mapping, SectionBasicInformation, §_info, sizeof(sect_info), NULL ))) + size = sect_info.Size.QuadPart; + CloseHandle( mapping ); if (!module) goto failed;
@@ -123,6 +129,8 @@ static BOOL load_library_as_datafile( LPCWSTR load_path, DWORD flags, LPCWSTR na } else *mod_ret = (HMODULE)((char *)module + 2); /* set bit 1 for image resource module */
+ LdrAddLoadAsDataTable( *mod_ret, filenameW, size, NULL ); + CloseHandle( file ); return TRUE;
@@ -261,6 +269,9 @@ BOOL WINAPI DECLSPEC_HOTPATCH FreeLibrary( HINSTANCE module ) } LdrUnlockLoaderLock( 0, magic ); } + + LdrRemoveLoadAsDataTable( module, NULL, NULL, 0 ); + return UnmapViewOfFile( ptr ); }