user32: Fix hook_proc DLL loading using LoadLibraryExW instead of LoadLibraryW

Hongbo Ni HongboNi at njstar.com
Wed Aug 20 20:20:48 CDT 2008


>
>This patch fixes Bug 14784.
>
>As requested by Dmitry Timoshkov, I have created a standalone test case 
>for DLL injection via SetWindowHookEx. It has been attached in Bug 14784 
>with MSVC source code and compiled exe and dll.
>
>With LoadLibraryExW(module, NULL, LOAD_WITH_ALTERED_SEARCH_PATH), the 
>Wine will search any imported DLL first in the same directory as module, 
>then in the standard search path.
>
>LoadLibraryW(module) searches imported DLL(s) in the directory of current 
>process, which may not be the same process where the module is first 
>loaded. That is why that LoadLibraryW(module) fails to hook to another 
>process if the DLL containing the hook_proc links to another DLL(s) in 
>the same directory.
>
>---
> dlls/user32/hook.c |    2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
>diff --git a/dlls/user32/hook.c b/dlls/user32/hook.c
>index 4354e05..638a302 100644
>--- a/dlls/user32/hook.c
>+++ b/dlls/user32/hook.c
>@@ -322,7 +322,7 @@ void *get_hook_proc( void *proc, const WCHAR *module )
>     {
>         TRACE( "loading %s\n", debugstr_w(module) );
>         /* FIXME: the library will never be freed */
>-        if (!(mod = LoadLibraryW(module))) return NULL;
>+        if (!(mod = LoadLibraryExW(module, NULL, LOAD_WITH_ALTERED_SEARCH_PATH))) return NULL;
>     }
>     return (char *)mod + (ULONG_PTR)proc;
> }
>-- 
Is there any problems with this patch?



  Hongbo Ni <hongbo at njstar.com>
+----------------------------------------------------------------+
* NJStar Software Corp., P.O. Box 40, Epping NSW 2121, Australia.
* Tel:  +61-2-9869-1088  WebSite: http://www.njstar.com 
* Fax:  +61-2-9869-1099  Email:   http://njstar.com/contact/  
* eFax: +1-253-595-4788
+----------------------------------------------------------------+




More information about the wine-devel mailing list