Alex Henrie : ntdll: Add LdrRegisterDllNotification stub.

Alexandre Julliard julliard at winehq.org
Thu May 17 19:10:58 CDT 2018


Module: wine
Branch: master
Commit: 760ca4c05f5deb46530bc3ccbaea2f6a508c6649
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=760ca4c05f5deb46530bc3ccbaea2f6a508c6649

Author: Alex Henrie <alexhenrie24 at gmail.com>
Date:   Tue May 15 05:50:49 2018 -0600

ntdll: Add LdrRegisterDllNotification stub.

Based on a patch by Michael Müller.

Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/loader.c   | 19 +++++++++++++++++++
 dlls/ntdll/ntdll.spec |  2 ++
 include/winternl.h    | 29 +++++++++++++++++++++++++++++
 3 files changed, 50 insertions(+)

diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 1a3dd80..3e00ec6 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -1462,6 +1462,25 @@ NTSTATUS WINAPI LdrEnumerateLoadedModules( void *unknown, LDRENUMPROC callback,
 }
 
 /******************************************************************
+ *              LdrRegisterDllNotification (NTDLL.@)
+ */
+NTSTATUS WINAPI LdrRegisterDllNotification(ULONG flags, PLDR_DLL_NOTIFICATION_FUNCTION callback,
+                                           void *context, void **cookie)
+{
+    FIXME( "(%04x, %p, %p, %p) stub\n", flags, callback, context, cookie );
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+/******************************************************************
+ *              LdrUnregisterDllNotification (NTDLL.@)
+ */
+NTSTATUS WINAPI LdrUnregisterDllNotification( void *cookie )
+{
+    FIXME( "(%p) stub\n", cookie );
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+/******************************************************************
  *		LdrLockLoaderLock  (NTDLL.@)
  *
  * Note: some flags are not implemented.
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index e2f5117..66d4e7c 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -83,6 +83,7 @@
 @ stdcall LdrProcessRelocationBlock(ptr long ptr long)
 @ stdcall LdrQueryImageFileExecutionOptions(ptr wstr long ptr long ptr)
 @ stdcall LdrQueryProcessModuleInformation(ptr long ptr)
+@ stdcall LdrRegisterDllNotification(long ptr ptr ptr)
 @ stdcall LdrResolveDelayLoadedAPI(ptr ptr ptr ptr ptr long)
 @ stub LdrSetAppCompatDllRedirectionCallback
 @ stub LdrSetDllManifestProber
@@ -91,6 +92,7 @@
 @ stub LdrUnloadAlternateResourceModule
 @ stdcall LdrUnloadDll(ptr)
 @ stdcall LdrUnlockLoaderLock(long long)
+@ stdcall LdrUnregisterDllNotification(ptr)
 @ stub LdrVerifyImageMatchesChecksum
 @ extern NlsAnsiCodePage
 @ extern NlsMbCodePageTag
diff --git a/include/winternl.h b/include/winternl.h
index c84e6d7..9452f8c 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -2169,6 +2169,32 @@ typedef struct _LDR_MODULE
     HANDLE              ActivationContext;
 } LDR_MODULE, *PLDR_MODULE;
 
+typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA
+{
+    ULONG Flags;
+    const UNICODE_STRING *FullDllName;
+    const UNICODE_STRING *BaseDllName;
+    void *DllBase;
+    ULONG SizeOfImage;
+} LDR_DLL_LOADED_NOTIFICATION_DATA, *PLDR_DLL_LOADED_NOTIFICATION_DATA;
+
+typedef struct _LDR_DLL_UNLOADED_NOTIFICATION_DATA
+{
+    ULONG Flags;
+    const UNICODE_STRING *FullDllName;
+    const UNICODE_STRING *BaseDllName;
+    void *DllBase;
+    ULONG SizeOfImage;
+} LDR_DLL_UNLOADED_NOTIFICATION_DATA, *PLDR_DLL_UNLOADED_NOTIFICATION_DATA;
+
+typedef union _LDR_DLL_NOTIFICATION_DATA
+{
+    LDR_DLL_LOADED_NOTIFICATION_DATA Loaded;
+    LDR_DLL_UNLOADED_NOTIFICATION_DATA Unloaded;
+} LDR_DLL_NOTIFICATION_DATA, *PLDR_DLL_NOTIFICATION_DATA;
+
+typedef void (CALLBACK *PLDR_DLL_NOTIFICATION_FUNCTION)(ULONG, LDR_DLL_NOTIFICATION_DATA*, void*);
+
 /* those defines are (some of the) regular LDR_MODULE.Flags values */
 #define LDR_IMAGE_IS_DLL                0x00000004
 #define LDR_LOAD_IN_PROGRESS            0x00001000
@@ -2185,6 +2211,9 @@ typedef struct _LDR_MODULE
 /* flag for LdrAddRefDll */
 #define LDR_ADDREF_DLL_PIN              0x00000001
 
+#define LDR_DLL_NOTIFICATION_REASON_LOADED   1
+#define LDR_DLL_NOTIFICATION_REASON_UNLOADED 2
+
 /* FIXME: to be checked */
 #define MAXIMUM_FILENAME_LENGTH 256
 




More information about the wine-cvs mailing list