Rebase against f909d18baf1d97831c55a1d47610427ac2084ca3.

This commit is contained in:
Zebediah Figura
2020-02-07 16:49:59 -06:00
parent 14a3242b92
commit c26be86c42
5 changed files with 98 additions and 334 deletions

View File

@@ -1,102 +0,0 @@
From c3a85e487e8e1ee017a2d03e9f7eccbfdd99306a Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Sun, 28 May 2017 04:19:06 +0200
Subject: [PATCH] ntdll: Split logic for MemoryBasicInformation into a separate
function.
---
dlls/ntdll/virtual.c | 65 ++++++++++++++++++++++++++++++----------------------
1 file changed, 37 insertions(+), 28 deletions(-)
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index c86ca88..26fe4a8 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -2786,40 +2786,16 @@ static int get_free_mem_state_callback( void *start, size_t size, void *arg )
return 1;
}
-#define UNIMPLEMENTED_INFO_CLASS(c) \
- case c: \
- FIXME("(process=%p,addr=%p) Unimplemented information class: " #c "\n", process, addr); \
- return STATUS_INVALID_INFO_CLASS
-
-/***********************************************************************
- * NtQueryVirtualMemory (NTDLL.@)
- * ZwQueryVirtualMemory (NTDLL.@)
- */
-NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
- MEMORY_INFORMATION_CLASS info_class, PVOID buffer,
- SIZE_T len, SIZE_T *res_len )
+/* get basic information about a memory block */
+static NTSTATUS get_basic_memory_info( HANDLE process, LPCVOID addr,
+ MEMORY_BASIC_INFORMATION *info,
+ SIZE_T len, SIZE_T *res_len )
{
struct file_view *view;
char *base, *alloc_base = 0, *alloc_end = working_set_limit;
struct wine_rb_entry *ptr;
- MEMORY_BASIC_INFORMATION *info = buffer;
sigset_t sigset;
- if (info_class != MemoryBasicInformation)
- {
- switch(info_class)
- {
- UNIMPLEMENTED_INFO_CLASS(MemoryWorkingSetList);
- UNIMPLEMENTED_INFO_CLASS(MemorySectionName);
- UNIMPLEMENTED_INFO_CLASS(MemoryBasicVlmInformation);
-
- default:
- FIXME("(%p,%p,info_class=%d,%p,%ld,%p) Unknown information class\n",
- process, addr, info_class, buffer, len, res_len);
- return STATUS_INVALID_INFO_CLASS;
- }
- }
-
if (len < sizeof(MEMORY_BASIC_INFORMATION))
return STATUS_INFO_LENGTH_MISMATCH;
@@ -2934,6 +2910,39 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
}
+#define UNIMPLEMENTED_INFO_CLASS(c) \
+ case c: \
+ FIXME("(process=%p,addr=%p) Unimplemented information class: " #c "\n", process, addr); \
+ return STATUS_INVALID_INFO_CLASS
+
+/***********************************************************************
+ * NtQueryVirtualMemory (NTDLL.@)
+ * ZwQueryVirtualMemory (NTDLL.@)
+ */
+NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
+ MEMORY_INFORMATION_CLASS info_class,
+ PVOID buffer, SIZE_T len, SIZE_T *res_len )
+{
+ TRACE("(%p, %p, info_class=%d, %p, %ld, %p)\n",
+ process, addr, info_class, buffer, len, res_len);
+
+ switch(info_class)
+ {
+ case MemoryBasicInformation:
+ return get_basic_memory_info( process, addr, buffer, len, res_len );
+
+ UNIMPLEMENTED_INFO_CLASS(MemoryWorkingSetList);
+ UNIMPLEMENTED_INFO_CLASS(MemorySectionName);
+ UNIMPLEMENTED_INFO_CLASS(MemoryBasicVlmInformation);
+
+ default:
+ FIXME("(%p,%p,info_class=%d,%p,%ld,%p) Unknown information class\n",
+ process, addr, info_class, buffer, len, res_len);
+ return STATUS_INVALID_INFO_CLASS;
+ }
+}
+
+
/***********************************************************************
* NtLockVirtualMemory (NTDLL.@)
* ZwLockVirtualMemory (NTDLL.@)
--
1.9.1

View File

@@ -1,32 +1,24 @@
From 0dd49a3b6d7951374e0bd120535f02377112064c Mon Sep 17 00:00:00 2001
From e718ef3521d76d455dbfd1088cc83e47121d987c Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Sun, 28 May 2017 05:19:30 +0200
Subject: ntdll: Implement NtQueryVirtualMemory(MemorySectionName). (v3)
Contains several improvements by Sebastian Lackner <sebastian@fds-team.de>.
---
dlls/ntdll/virtual.c | 92 ++++++++++++++++++++++++++++++++++++++++++-
dlls/psapi/tests/psapi_main.c | 8 +---
server/mapping.c | 29 ++++++++++++++
server/protocol.def | 9 +++++
4 files changed, 130 insertions(+), 8 deletions(-)
dlls/ntdll/virtual.c | 91 ++++++++++++++++++++++++++++++++++-
dlls/psapi/tests/psapi_main.c | 8 +--
server/mapping.c | 29 +++++++++++
server/protocol.def | 9 ++++
4 files changed, 129 insertions(+), 8 deletions(-)
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index 4c927597a9f..164186f274b 100644
index 6ad2d21e0..f49127c3e 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -2653,6 +2653,7 @@ static int get_free_mem_state_callback( void *start, size_t size, void *arg )
return 1;
@@ -3192,6 +3192,93 @@ static NTSTATUS get_working_set_ex( HANDLE process, LPCVOID addr,
return STATUS_SUCCESS;
}
+
/* get basic information about a memory block */
static NTSTATUS get_basic_memory_info( HANDLE process, LPCVOID addr,
MEMORY_BASIC_INFORMATION *info,
@@ -2774,6 +2775,93 @@ static NTSTATUS get_basic_memory_info( HANDLE process, LPCVOID addr,
}
+/* get file name for mapped section */
+static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
+ MEMORY_SECTION_NAME *info,
@@ -117,9 +109,9 @@ index 4c927597a9f..164186f274b 100644
#define UNIMPLEMENTED_INFO_CLASS(c) \
case c: \
FIXME("(process=%p,addr=%p) Unimplemented information class: " #c "\n", process, addr); \
@@ -2795,8 +2883,10 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
case MemoryBasicInformation:
return get_basic_memory_info( process, addr, buffer, len, res_len );
@@ -3216,8 +3303,10 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
case MemoryWorkingSetExInformation:
return get_working_set_ex( process, addr, buffer, len, res_len );
+ case MemorySectionName:
+ return get_section_name( process, addr, buffer, len, res_len );
@@ -130,10 +122,10 @@ index 4c927597a9f..164186f274b 100644
default:
diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c
index e7af5bc61cc..ef5ae19aeaf 100644
index 0df247e9b..1cc0455aa 100644
--- a/dlls/psapi/tests/psapi_main.c
+++ b/dlls/psapi/tests/psapi_main.c
@@ -342,14 +342,7 @@ static BOOL nt_get_mapped_file_name(HANDLE process, LPVOID addr, LPWSTR name, DW
@@ -375,14 +375,7 @@ static BOOL nt_get_mapped_file_name(HANDLE process, LPVOID addr, LPWSTR name, DW
ret_len = 0xdeadbeef;
status = pNtQueryVirtualMemory(process, addr, MemorySectionName, buf, buf_len, &ret_len);
@@ -148,7 +140,7 @@ index e7af5bc61cc..ef5ae19aeaf 100644
section_name = (MEMORY_SECTION_NAME *)buf;
ok(ret_len == section_name->SectionFileName.MaximumLength + sizeof(*section_name), "got %lu, %u\n",
@@ -471,6 +464,7 @@ todo_wine {
@@ -504,6 +497,7 @@ todo_wine {
{
ok(memcmp(map_nameW, nt_map_name, lstrlenW(map_nameW)) == 0, "map name does not start with a device name: %s\n", map_name);
WideCharToMultiByte(CP_ACP, 0, map_nameW, -1, map_name, MAX_PATH, NULL, NULL);
@@ -157,10 +149,10 @@ index e7af5bc61cc..ef5ae19aeaf 100644
}
diff --git a/server/mapping.c b/server/mapping.c
index a6d34f91aff..8459c316559 100644
index 6990a1913..ca28e8909 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -1011,6 +1011,35 @@ DECL_HANDLER(unmap_view)
@@ -1064,6 +1064,35 @@ DECL_HANDLER(unmap_view)
if (view) free_memory_view( view );
}
@@ -197,10 +189,10 @@ index a6d34f91aff..8459c316559 100644
DECL_HANDLER(get_mapping_committed_range)
{
diff --git a/server/protocol.def b/server/protocol.def
index 0bcff7b2b25..f248b3bdec7 100644
index 6c44b2b43..e7753f8b7 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -1782,6 +1782,15 @@ enum char_info_mode
@@ -1838,6 +1838,15 @@ enum char_info_mode
@END
@@ -217,5 +209,5 @@ index 0bcff7b2b25..f248b3bdec7 100644
@REQ(get_mapping_committed_range)
client_ptr_t base; /* view base address */
--
2.14.1
2.25.0