Paul Gofman : kernel32: Add semi-stub for LoadPackagedLibrary().

Alexandre Julliard julliard at winehq.org
Wed Feb 12 16:21:08 CST 2020


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

Author: Paul Gofman <gofmanp at gmail.com>
Date:   Mon Feb 10 14:32:51 2020 +0300

kernel32: Add semi-stub for LoadPackagedLibrary().

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48229
Signed-off-by: Paul Gofman <gofmanp at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/kernel32.spec     |  1 +
 dlls/kernel32/tests/loader.c    | 19 +++++++++++++++++++
 dlls/kernelbase/kernelbase.spec |  2 +-
 dlls/kernelbase/loader.c        | 11 +++++++++++
 include/winbase.h               |  1 +
 5 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index b7c148395b..99297ea824 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -1049,6 +1049,7 @@
 @ stdcall -import LoadLibraryExW(wstr long long)
 @ stdcall -import LoadLibraryW(wstr)
 @ stdcall LoadModule(str ptr)
+@ stdcall -import LoadPackagedLibrary(wstr long)
 @ stdcall -import LoadResource(long long)
 # @ stub LoadStringBaseExW
 # @ stub LoadStringBaseW
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index 6f143f5efd..35c6b3c099 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -86,6 +86,7 @@ static BOOL (WINAPI *pFlsFree)(DWORD);
 static BOOL (WINAPI *pIsWow64Process)(HANDLE,PBOOL);
 static BOOL (WINAPI *pWow64DisableWow64FsRedirection)(void **);
 static BOOL (WINAPI *pWow64RevertWow64FsRedirection)(void *);
+static HMODULE (WINAPI *pLoadPackagedLibrary)(LPCWSTR lpwLibFileName, DWORD Reserved);
 
 static PVOID RVAToAddr(DWORD_PTR rva, HMODULE module)
 {
@@ -3917,6 +3918,22 @@ static void test_dll_file( const char *name )
 #undef OK_FIELD
 }
 
+static void test_LoadPackagedLibrary(void)
+{
+    HMODULE h;
+
+    if (!pLoadPackagedLibrary)
+    {
+        win_skip("LoadPackagedLibrary is not available.\n");
+        return;
+    }
+
+    SetLastError( 0xdeadbeef );
+    h = pLoadPackagedLibrary(L"kernel32.dll", 0);
+    ok(!h && GetLastError() == APPMODEL_ERROR_NO_PACKAGE, "Got unexpected handle %p, GetLastError() %u.\n",
+            h, GetLastError());
+}
+
 START_TEST(loader)
 {
     int argc;
@@ -3954,6 +3971,7 @@ START_TEST(loader)
     pWow64DisableWow64FsRedirection = (void *)GetProcAddress(kernel32, "Wow64DisableWow64FsRedirection");
     pWow64RevertWow64FsRedirection = (void *)GetProcAddress(kernel32, "Wow64RevertWow64FsRedirection");
     pResolveDelayLoadedAPI = (void *)GetProcAddress(kernel32, "ResolveDelayLoadedAPI");
+    pLoadPackagedLibrary = (void *)GetProcAddress(kernel32, "LoadPackagedLibrary");
 
     if (pIsWow64Process) pIsWow64Process( GetCurrentProcess(), &is_wow64 );
     GetSystemInfo( &si );
@@ -3986,6 +4004,7 @@ START_TEST(loader)
     test_import_resolution();
     test_ExitProcess();
     test_InMemoryOrderModuleList();
+    test_LoadPackagedLibrary();
     test_wow64_redirection();
     test_dll_file( "ntdll.dll" );
     test_dll_file( "kernel32.dll" );
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index 7f928e3085..63719b514d 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -926,7 +926,7 @@
 @ stdcall LoadLibraryExA( str long long)
 @ stdcall LoadLibraryExW(wstr long long)
 @ stdcall LoadLibraryW(wstr)
-# @ stub LoadPackagedLibrary
+@ stdcall LoadPackagedLibrary(wstr long)
 @ stdcall LoadResource(long long)
 @ stdcall LoadStringA(long long ptr long)
 @ stub LoadStringBaseExW
diff --git a/dlls/kernelbase/loader.c b/dlls/kernelbase/loader.c
index 456a9f2da4..eb715ba74a 100644
--- a/dlls/kernelbase/loader.c
+++ b/dlls/kernelbase/loader.c
@@ -535,6 +535,17 @@ HMODULE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW( LPCWSTR name, HANDLE file, DWOR
 }
 
 
+/***********************************************************************
+ *      LoadPackagedLibrary    (kernelbase.@)
+ */
+HMODULE WINAPI /* DECLSPEC_HOTPATCH */ LoadPackagedLibrary( LPCWSTR name, DWORD reserved )
+{
+    FIXME( "semi-stub, name %s, reserved %#x.\n", debugstr_w(name), reserved );
+    SetLastError( APPMODEL_ERROR_NO_PACKAGE );
+    return NULL;
+}
+
+
 /****************************************************************************
  *	RemoveDllDirectory   (kernelbase.@)
  */
diff --git a/include/winbase.h b/include/winbase.h
index 3062d3b6ad..10b92feb45 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -2418,6 +2418,7 @@ WINBASEAPI HMODULE     WINAPI LoadLibraryExA(LPCSTR,HANDLE,DWORD);
 WINBASEAPI HMODULE     WINAPI LoadLibraryExW(LPCWSTR,HANDLE,DWORD);
 #define                       LoadLibraryEx WINELIB_NAME_AW(LoadLibraryEx)
 WINBASEAPI DWORD       WINAPI LoadModule(LPCSTR,LPVOID);
+WINBASEAPI HMODULE     WINAPI LoadPackagedLibrary(LPCWSTR,DWORD);
 WINBASEAPI HGLOBAL     WINAPI LoadResource(HMODULE,HRSRC);
 WINBASEAPI HLOCAL      WINAPI LocalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2);
 WINBASEAPI SIZE_T      WINAPI LocalCompact(UINT);




More information about the wine-cvs mailing list