Alexandre Julliard : ntdll: Also return the SECTION_IMAGE_INFORMATION data from RtlCreateUserProcess( ).
Alexandre Julliard
julliard at winehq.org
Wed Oct 24 15:13:54 CDT 2018
Module: wine
Branch: master
Commit: c998667bf0983ef99cc48847d3d6fc6ca6ff4a2d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c998667bf0983ef99cc48847d3d6fc6ca6ff4a2d
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Oct 24 12:32:30 2018 +0200
ntdll: Also return the SECTION_IMAGE_INFORMATION data from RtlCreateUserProcess().
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/ntdll_misc.h | 2 ++
dlls/ntdll/process.c | 1 +
dlls/ntdll/virtual.c | 59 ++++++++++++++++++++++++++++---------------------
3 files changed, 37 insertions(+), 25 deletions(-)
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index f4de3cf..fdb443b 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -185,6 +185,8 @@ extern NTSTATUS virtual_uninterrupted_write_memory( void *addr, const void *buff
extern void VIRTUAL_SetForceExec( BOOL enable ) DECLSPEC_HIDDEN;
extern void virtual_release_address_space(void) DECLSPEC_HIDDEN;
extern void virtual_set_large_address_space(void) DECLSPEC_HIDDEN;
+extern void virtual_fill_image_information( const pe_image_info_t *pe_info,
+ SECTION_IMAGE_INFORMATION *info ) DECLSPEC_HIDDEN;
extern struct _KUSER_SHARED_DATA *user_shared_data DECLSPEC_HIDDEN;
/* completion */
diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c
index 372e26e..623bf65 100644
--- a/dlls/ntdll/process.c
+++ b/dlls/ntdll/process.c
@@ -1314,6 +1314,7 @@ NTSTATUS WINAPI RtlCreateUserProcess( UNICODE_STRING *path, ULONG attributes,
info->Thread = thread_handle;
info->ClientId.UniqueProcess = ULongToHandle( process_id );
info->ClientId.UniqueThread = ULongToHandle( thread_id );
+ virtual_fill_image_information( &pe_info, &info->ImageInformation );
process_handle = thread_handle = 0;
status = STATUS_SUCCESS;
}
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index af1509e..5dfbe74 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -3176,6 +3176,39 @@ NTSTATUS WINAPI NtUnmapViewOfSection( HANDLE process, PVOID addr )
/******************************************************************************
+ * virtual_fill_image_information
+ *
+ * Helper for NtQuerySection.
+ */
+void virtual_fill_image_information( const pe_image_info_t *pe_info, SECTION_IMAGE_INFORMATION *info )
+{
+ info->TransferAddress = wine_server_get_ptr( pe_info->entry_point );
+ info->ZeroBits = pe_info->zerobits;
+ info->MaximumStackSize = pe_info->stack_size;
+ info->CommittedStackSize = pe_info->stack_commit;
+ info->SubSystemType = pe_info->subsystem;
+ info->SubsystemVersionLow = pe_info->subsystem_low;
+ info->SubsystemVersionHigh = pe_info->subsystem_high;
+ info->GpValue = pe_info->gp;
+ info->ImageCharacteristics = pe_info->image_charact;
+ info->DllCharacteristics = pe_info->dll_charact;
+ info->Machine = pe_info->machine;
+ info->ImageContainsCode = pe_info->contains_code;
+ info->u.ImageFlags = pe_info->image_flags;
+ info->LoaderFlags = pe_info->loader_flags;
+ info->ImageFileSize = pe_info->file_size;
+ info->CheckSum = pe_info->checksum;
+#ifndef _WIN64 /* don't return 64-bit values to 32-bit processes */
+ if (pe_info->machine == IMAGE_FILE_MACHINE_AMD64 || pe_info->machine == IMAGE_FILE_MACHINE_ARM64)
+ {
+ info->TransferAddress = (void *)0x81231234; /* sic */
+ info->MaximumStackSize = 0x100000;
+ info->CommittedStackSize = 0x10000;
+ }
+#endif
+}
+
+/******************************************************************************
* NtQuerySection (NTDLL.@)
* ZwQuerySection (NTDLL.@)
*/
@@ -3217,32 +3250,8 @@ NTSTATUS WINAPI NtQuerySection( HANDLE handle, SECTION_INFORMATION_CLASS class,
else if (reply->flags & SEC_IMAGE)
{
SECTION_IMAGE_INFORMATION *info = ptr;
- info->TransferAddress = wine_server_get_ptr( image_info.entry_point );
- info->ZeroBits = image_info.zerobits;
- info->MaximumStackSize = image_info.stack_size;
- info->CommittedStackSize = image_info.stack_commit;
- info->SubSystemType = image_info.subsystem;
- info->SubsystemVersionLow = image_info.subsystem_low;
- info->SubsystemVersionHigh = image_info.subsystem_high;
- info->GpValue = image_info.gp;
- info->ImageCharacteristics = image_info.image_charact;
- info->DllCharacteristics = image_info.dll_charact;
- info->Machine = image_info.machine;
- info->ImageContainsCode = image_info.contains_code;
- info->u.ImageFlags = image_info.image_flags;
- info->LoaderFlags = image_info.loader_flags;
- info->ImageFileSize = image_info.file_size;
- info->CheckSum = image_info.checksum;
+ virtual_fill_image_information( &image_info, info );
if (ret_size) *ret_size = sizeof(*info);
-#ifndef _WIN64 /* don't return 64-bit values to 32-bit processes */
- if (image_info.machine == IMAGE_FILE_MACHINE_AMD64 ||
- image_info.machine == IMAGE_FILE_MACHINE_ARM64)
- {
- info->TransferAddress = (void *)0x81231234; /* sic */
- info->MaximumStackSize = 0x100000;
- info->CommittedStackSize = 0x10000;
- }
-#endif
}
else status = STATUS_SECTION_NOT_IMAGE;
}
More information about the wine-cvs
mailing list