From 23389127ecd0cedb8d6d020c2fa1f7dc00dc9b2e Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 31 Mar 2021 10:18:54 +0200 Subject: [PATCH] gdi32: Try to load the printer driver from the printer driver directory. Signed-off-by: Alexandre Julliard --- dlls/gdi32/driver.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c index e146a3a4f85..09b051cd6fa 100644 --- a/dlls/gdi32/driver.c +++ b/dlls/gdi32/driver.c @@ -177,6 +177,18 @@ static void release_display_device_init_mutex( HANDLE mutex ) CloseHandle( mutex ); } +#ifdef __i386__ +static const WCHAR printer_env[] = L"w32x86"; +#elif defined __x86_64__ +static const WCHAR printer_env[] = L"x64"; +#elif defined __arm__ +static const WCHAR printer_env[] = L"arm"; +#elif defined __aarch64__ +static const WCHAR printer_env[] = L"arm64"; +#else +#error not defined for this cpu +#endif + /********************************************************************** * DRIVER_load_driver */ @@ -200,7 +212,15 @@ const struct gdi_dc_funcs *DRIVER_load_driver( LPCWSTR name ) LeaveCriticalSection( &driver_section ); } - if (!(module = LoadLibraryW( name ))) return NULL; + if (!(module = LoadLibraryW( name ))) + { + WCHAR path[MAX_PATH]; + + GetSystemDirectoryW( path, MAX_PATH ); + swprintf( path + wcslen(path), MAX_PATH - wcslen(path), L"\\spool\\drivers\\%s\\3\\%s", + printer_env, name ); + if (!(module = LoadLibraryW( path ))) return NULL; + } if (!(new_driver = create_driver( module ))) {