From: Dāvis Mosāns davispuh@gmail.com
--- dlls/kernelbase/loader.c | 13 +++++++++++++ include/winbase.h | 4 ++++ 2 files changed, 17 insertions(+)
diff --git a/dlls/kernelbase/loader.c b/dlls/kernelbase/loader.c index 4d98ee8d309..600b2c967bc 100644 --- a/dlls/kernelbase/loader.c +++ b/dlls/kernelbase/loader.c @@ -550,6 +550,19 @@ HMODULE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW( LPCWSTR name, HANDLE file, DWOR return 0; }
+ if ((flags & LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR) && + (flags & (LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | LOAD_LIBRARY_AS_IMAGE_RESOURCE))) { + // Don't know why but happens like this on Windows 10 22H2 + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + + if (flags & LOAD_LIBRARY_UNSUPPORTED_MASK) { + WARN( "Pretending to be Windows 10 22H2, unsupported flags: 0x%lx\n, returning ERROR_INVALID_PARAMETER", flags & LOAD_LIBRARY_UNSUPPORTED_MASK ); + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + if (flags & LOAD_PACKAGED_LIBRARY) { // FIXME: Don't know if it's implemented like this on Windows // but this does accomplish same result in error case diff --git a/include/winbase.h b/include/winbase.h index 3f82d2e0cd4..c92d2b9617a 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1006,6 +1006,10 @@ DECL_WINELIB_TYPE_AW(ENUMRESLANGPROC) #define LOAD_LIBRARY_SEARCH_USER_DIRS 0x00000400 #define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 #define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS 0x00001000 +#define LOAD_LIBRARY_SAFE_CURRENT_DIRS 0x00002000 +#define LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER 0x00004000 +#define LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY 0x00008000 +#define LOAD_LIBRARY_UNSUPPORTED_MASK 0xFFFF0000 // If you add new flags update this mask
#define GET_MODULE_HANDLE_EX_FLAG_PIN 1 #define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2