[PATCH v2 2/3] ntdll: Implement LdrGetDllFullName

Alex Henrie alexhenrie24 at gmail.com
Mon Jun 8 00:27:20 CDT 2020


Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
 dlls/ntdll/loader.c    | 25 +++++++++++++++++++++++++
 dlls/ntdll/ntdll.spec  |  1 +
 dlls/ntdll/tests/rtl.c |  2 +-
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 45d32399ad..63972f360f 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -1713,6 +1713,31 @@ NTSTATUS WINAPI LdrEnumerateLoadedModules( void *unknown, LDRENUMPROC callback,
     return STATUS_SUCCESS;
 }
 
+/******************************************************************
+ *              LdrGetDllFullName (NTDLL.@)
+ */
+NTSTATUS WINAPI LdrGetDllFullName(HMODULE module, UNICODE_STRING *name)
+{
+    WINE_MODREF *wm;
+
+    TRACE( "(%p, %p)\n", module, name );
+
+    if (!module) module = NtCurrentTeb()->Peb->ImageBaseAddress;
+
+    RtlEnterCriticalSection( &loader_section );
+    wm = get_modref( module );
+    RtlLeaveCriticalSection( &loader_section );
+
+    if (!wm) return STATUS_DLL_NOT_FOUND;
+
+    RtlCopyUnicodeString( name, &wm->ldr.FullDllName );
+
+    if (name->MaximumLength < wm->ldr.FullDllName.Length + sizeof(WCHAR))
+        return STATUS_BUFFER_TOO_SMALL;
+
+    return STATUS_SUCCESS;
+}
+
 /******************************************************************
  *              LdrRegisterDllNotification (NTDLL.@)
  */
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 763d664a3b..ccdca4bd91 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -87,6 +87,7 @@
 @ stdcall LdrFindResource_U(long ptr long ptr)
 @ stub LdrFlushAlternateResourceModules
 @ stdcall LdrGetDllDirectory(ptr)
+@ stdcall LdrGetDllFullName(long ptr)
 @ stdcall LdrGetDllHandle(wstr long ptr ptr)
 # @ stub LdrGetDllHandleEx
 @ stdcall LdrGetDllPath(wstr long ptr ptr)
diff --git a/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c
index 3588e00681..f3ed4100c1 100644
--- a/dlls/ntdll/tests/rtl.c
+++ b/dlls/ntdll/tests/rtl.c
@@ -3499,7 +3499,7 @@ static void test_LdrGetDllFullName(void)
 
     if (!pLdrGetDllFullName)
     {
-        skip("LdrGetDllFullName not available\n");
+        win_skip("LdrGetDllFullName not available\n");
         return;
     }
 
-- 
2.27.0




More information about the wine-devel mailing list