From: Alex Henrie Subject: [PATCH v2 2/3] ntdll: Implement LdrGetDllFullName Message-Id: <20200608052741.43713-2-alexhenrie24@gmail.com> Date: Sun, 7 Jun 2020 23:27:20 -0600 In-Reply-To: <20200608052741.43713-1-alexhenrie24@gmail.com> References: <20200608052741.43713-1-alexhenrie24@gmail.com> Signed-off-by: Alex Henrie --- 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