kernel32: Update VirtualAddress of resource section in write_raw_resources.

This commit is contained in:
Sebastian Lackner 2014-06-15 23:38:38 +02:00 committed by Alexandre Julliard
parent 3ccaad8b41
commit 270d66efc7
2 changed files with 7 additions and 0 deletions

View File

@ -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 );
}

View File

@ -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: