server: Store PE image info in process structure.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51829
Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Paul Gofman 2021-12-31 14:51:43 +03:00 committed by Alexandre Julliard
parent b6dc839908
commit 8eacd3e507
4 changed files with 19 additions and 11 deletions

View File

@ -1931,9 +1931,11 @@ static void test_section_access(void)
char temp_path[MAX_PATH];
char dll_name[MAX_PATH];
SIZE_T size;
SECTION_IMAGE_INFORMATION image_info;
MEMORY_BASIC_INFORMATION info;
STARTUPINFOA sti;
PROCESS_INFORMATION pi;
NTSTATUS status;
DWORD ret;
/* prevent displaying of the "Unable to load this DLL" message box */
@ -2084,6 +2086,19 @@ static void test_section_access(void)
ok(!memcmp(buf, section_data, section.SizeOfRawData), "wrong section data\n");
}
status = NtQueryInformationProcess(pi.hProcess, ProcessImageInformation,
&image_info, sizeof(image_info), NULL );
ok(!status, "Got unexpected status %#x.\n", status);
ok(!(image_info.ImageCharacteristics & IMAGE_FILE_DLL),
"Got unexpected characteristics %#x.\n", nt_header.FileHeader.Characteristics);
status = NtUnmapViewOfSection(pi.hProcess, info.BaseAddress);
ok(!status, "Got unexpected status %#x.\n", status);
status = NtQueryInformationProcess(pi.hProcess, ProcessImageInformation,
&image_info, sizeof(image_info), NULL );
ok(!status, "Got unexpected status %#x.\n", status);
ok(!(image_info.ImageCharacteristics & IMAGE_FILE_DLL),
"Got unexpected characteristics %#x.\n", nt_header.FileHeader.Characteristics);
SetLastError(0xdeadbeef);
ret = TerminateProcess(pi.hProcess, 0);
ok(ret, "TerminateProcess() error %d\n", GetLastError());

View File

@ -408,6 +408,7 @@ static void add_process_view( struct thread *thread, struct memory_view *view )
process->image = NULL;
if (get_view_nt_name( view, &name ) && (process->image = memdup( name.str, name.len )))
process->imagelen = name.len;
process->image_info = view->image;
return;
}
}

View File

@ -680,6 +680,7 @@ struct process *create_process( int fd, struct process *parent, unsigned int fla
process->trace_data = 0;
process->rawinput_mouse = NULL;
process->rawinput_kbd = NULL;
memset( &process->image_info, 0, sizeof(process->image_info) );
list_init( &process->kernel_object );
list_init( &process->thread_list );
list_init( &process->locks );
@ -1502,17 +1503,7 @@ DECL_HANDLER(get_process_info)
reply->session_id = process->session_id;
reply->machine = process->machine;
if (get_reply_max_size())
{
client_ptr_t base;
const pe_image_info_t *info;
struct memory_view *view = get_exe_view( process );
if (view)
{
if ((info = get_view_image_info( view, &base )))
set_reply_data( info, min( sizeof(*info), get_reply_max_size() ));
}
else set_error( STATUS_PROCESS_IS_TERMINATING );
}
set_reply_data( &process->image_info, min( sizeof(process->image_info), get_reply_max_size() ));
release_object( process );
}
}

View File

@ -89,6 +89,7 @@ struct process
const struct rawinput_device *rawinput_mouse; /* rawinput mouse device, if any */
const struct rawinput_device *rawinput_kbd; /* rawinput keyboard device, if any */
struct list kernel_object; /* list of kernel object pointers */
pe_image_info_t image_info; /* main exe image info */
};
/* process functions */