Module: wine Branch: master Commit: 760ca4c05f5deb46530bc3ccbaea2f6a508c6649 URL: https://source.winehq.org/git/wine.git/?a=commit;h=760ca4c05f5deb46530bc3ccb...
Author: Alex Henrie alexhenrie24@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@gmail.com Signed-off-by: Alexandre Julliard julliard@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