[PATCH v2 4/5] kernelbase: Implement internal KernelBaseGetGlobalData.

Rémi Bernon rbernon at codeweavers.com
Thu Mar 31 05:06:40 CDT 2022


And call it from kernel32 to get access to kernelbase global data.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/kernel32/heap.c            |  5 +++++
 dlls/kernel32/kernel_main.c     |  1 +
 dlls/kernel32/kernel_private.h  | 11 +++++++++++
 dlls/kernelbase/kernelbase.spec |  2 +-
 dlls/kernelbase/memory.c        | 20 ++++++++++++++++++++
 5 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c
index 36353c82b90..cf8af2bd0c6 100644
--- a/dlls/kernel32/heap.c
+++ b/dlls/kernel32/heap.c
@@ -33,6 +33,9 @@
 #include "winerror.h"
 #include "winnt.h"
 #include "winternl.h"
+
+#include "kernel_private.h"
+
 #include "wine/exception.h"
 #include "wine/debug.h"
 
@@ -156,6 +159,8 @@ struct mem_entry
 
 #include "poppack.h"
 
+struct kernelbase_global_data *kernelbase_global_data;
+
 #define MAGIC_LOCAL_USED    0x5342
 #define POINTER_TO_HANDLE( p ) (*(((const HGLOBAL *)( p )) - 2))
 /* align the storage needed for the HLOCAL on an 8-byte boundary thus
diff --git a/dlls/kernel32/kernel_main.c b/dlls/kernel32/kernel_main.c
index 352a873933f..7b45db73257 100644
--- a/dlls/kernel32/kernel_main.c
+++ b/dlls/kernel32/kernel_main.c
@@ -123,6 +123,7 @@ static BOOL process_attach( HMODULE module )
     RtlSetUnhandledExceptionFilter( UnhandledExceptionFilter );
 
     NtQuerySystemInformation( SystemBasicInformation, &system_info, sizeof(system_info), NULL );
+    kernelbase_global_data = KernelBaseGetGlobalData();
 
     copy_startup_info();
 
diff --git a/dlls/kernel32/kernel_private.h b/dlls/kernel32/kernel_private.h
index 633511d6140..980a12b25a6 100644
--- a/dlls/kernel32/kernel_private.h
+++ b/dlls/kernel32/kernel_private.h
@@ -21,6 +21,17 @@
 #ifndef __WINE_KERNEL_PRIVATE_H
 #define __WINE_KERNEL_PRIVATE_H
 
+/* not compatible with windows */
+struct kernelbase_global_data
+{
+    struct mem_entry *mem_entries;
+    struct mem_entry *mem_entries_end;
+};
+
+void *WINAPI KernelBaseGetGlobalData(void);
+
+extern struct kernelbase_global_data *kernelbase_global_data;
+
 NTSTATUS WINAPI BaseGetNamedObjectDirectory( HANDLE *dir );
 
 static inline BOOL set_ntstatus( NTSTATUS status )
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index a59d8581ff0..b5116ae9b5a 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -943,7 +943,7 @@
 @ stdcall K32InitializeProcessForWsWatch(long) InitializeProcessForWsWatch
 @ stdcall K32QueryWorkingSet(long ptr long) QueryWorkingSet
 @ stdcall K32QueryWorkingSetEx(long ptr long) QueryWorkingSetEx
-@ stub KernelBaseGetGlobalData
+@ stdcall KernelBaseGetGlobalData()
 @ stdcall LCIDToLocaleName(long ptr long long)
 @ stdcall LCMapStringA(long long str long ptr long)
 @ stdcall LCMapStringEx(wstr long wstr long ptr long ptr ptr long)
diff --git a/dlls/kernelbase/memory.c b/dlls/kernelbase/memory.c
index e81d38564e7..6d42316760b 100644
--- a/dlls/kernelbase/memory.c
+++ b/dlls/kernelbase/memory.c
@@ -578,6 +578,13 @@ BOOL WINAPI DECLSPEC_HOTPATCH HeapWalk( HANDLE heap, PROCESS_HEAP_ENTRY *entry )
  * Global/local heap functions
  ***********************************************************************/
 
+/* not compatible with windows */
+struct kernelbase_global_data
+{
+    struct mem_entry *mem_entries;
+    struct mem_entry *mem_entries_end;
+};
+
 #include "pshpack1.h"
 
 struct mem_entry
@@ -590,6 +597,8 @@ struct mem_entry
 
 #include "poppack.h"
 
+static struct kernelbase_global_data kernelbase_global_data = {0};
+
 #define MAGIC_LOCAL_USED    0x5342
 /* align the storage needed for the HLOCAL on an 8-byte boundary thus
  * LocalAlloc/LocalReAlloc'ing with LMEM_MOVEABLE of memory with
@@ -617,6 +626,17 @@ static inline void *unsafe_ptr_from_HLOCAL( HLOCAL handle )
     return handle;
 }
 
+
+/***********************************************************************
+ *           KernelBaseGetGlobalData   (kernelbase.@)
+ */
+void *WINAPI KernelBaseGetGlobalData(void)
+{
+    WARN_(globalmem)( "semi-stub!\n" );
+    return &kernelbase_global_data;
+}
+
+
 /***********************************************************************
  *           GlobalAlloc   (kernelbase.@)
  */
-- 
2.35.1




More information about the wine-devel mailing list