From: Dmitry Timoshkov dmitry@baikal.ru
From: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Andrew Wesie awesie@gmail.com --- 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 5890344f7a..ad91cffd8f 100644 --- a/dlls/ntdll/virtual.c +++ b/dlls/ntdll/virtual.c @@ -3011,40 +3011,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;
@@ -3159,6 +3135,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.@)