diff --git a/dlls/kernel32/resource.c b/dlls/kernel32/resource.c index e829f28b966..ecd599f6622 100644 --- a/dlls/kernel32/resource.c +++ b/dlls/kernel32/resource.c @@ -1554,6 +1554,7 @@ static BOOL write_raw_resources( QUEUEDUPDATES *updates ) sec->SizeOfRawData = section_size; sec->Misc.VirtualSize = virtual_section_size; nt->OptionalHeader.SizeOfImage += rva_delta; + nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = sec->VirtualAddress; nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size = res_size.total_size; nt->OptionalHeader.SizeOfInitializedData = get_init_data_size( write_map->base, mapping_size ); } diff --git a/dlls/kernel32/tests/resource.c b/dlls/kernel32/tests/resource.c index f94fed644ad..43551fa560c 100644 --- a/dlls/kernel32/tests/resource.c +++ b/dlls/kernel32/tests/resource.c @@ -394,6 +394,7 @@ static void check_exe( const sec_verify *verify ) int i; IMAGE_DOS_HEADER *dos; IMAGE_NT_HEADERS *nt; + IMAGE_OPTIONAL_HEADER *opt; IMAGE_SECTION_HEADER *sec; IMAGE_RESOURCE_DIRECTORY *dir; HANDLE file, mapping; @@ -415,6 +416,7 @@ static void check_exe( const sec_verify *verify ) goto end; nt = (void*) ((BYTE*) dos + dos->e_lfanew); + opt = &nt->OptionalHeader; sec = (void*) &nt[1]; for(i = 0; i < max_sections; i++) @@ -444,6 +446,10 @@ static void check_exe( const sec_verify *verify ) verify->NumberOfNamedEntries, dir->NumberOfNamedEntries); ok( dir->NumberOfIdEntries == verify->NumberOfIdEntries, "NumberOfIdEntries should be %d instead of %d\n", verify->NumberOfIdEntries, dir->NumberOfIdEntries); + + ok(opt->DataDirectory[IMAGE_FILE_RESOURCE_DIRECTORY].VirtualAddress == sec[verify->rsrc_section].VirtualAddress, + "VirtualAddress in optional header should be %d instead of %d\n", + sec[verify->rsrc_section].VirtualAddress, opt->DataDirectory[IMAGE_FILE_RESOURCE_DIRECTORY].VirtualAddress); } end: