From 0472db80b26761a90b3941a53c6e94ea43565c21 Mon Sep 17 00:00:00 2001 From: Jason Hood Date: Thu, 23 Aug 2018 17:38:43 +1000 Subject: [PATCH] Preserve last error Hooked functions that failed and logged debug messages were causing an incorrect last error to be set. --- ANSI.c | 27 ++++++++++++++++++++------- readme.txt | 1 + 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ANSI.c b/ANSI.c index 5be111a..a7147ea 100644 --- a/ANSI.c +++ b/ANSI.c @@ -213,7 +213,8 @@ v1.85, 22 & 23 August, 2018: fix creating the wrap buffer; always inject from ansicon.exe, even if it's GUI or excluded; - log CreateFile calls. + log CreateFile calls; + preserve last error. */ #include "ansicon.h" @@ -3113,7 +3114,9 @@ BOOL WINAPI MyCreateProcessA( LPCSTR lpApplicationName, lpStartupInfo, &child_pi )) { - DEBUGSTR( 1, " Failed (%u)", GetLastError() ); + DWORD err = GetLastError(); + DEBUGSTR( 1, " Failed (%u)", err ); + SetLastError( err ); return FALSE; } @@ -3151,7 +3154,9 @@ BOOL WINAPI MyCreateProcessW( LPCWSTR lpApplicationName, lpStartupInfo, &child_pi )) { - DEBUGSTR( 1, " Failed (%u)", GetLastError() ); + DWORD err = GetLastError(); + DEBUGSTR( 1, " Failed (%u)", err ); + SetLastError( err ); return FALSE; } @@ -3222,8 +3227,10 @@ FARPROC WINAPI MyGetProcAddress( HMODULE hModule, LPCSTR lpProcName ) HMODULE WINAPI MyLoadLibraryA( LPCSTR lpFileName ) { HMODULE hMod = LoadLibraryA( lpFileName ); - DEBUGSTR( 2, "LoadLibraryA %s", lpFileName ); + DWORD err = GetLastError(); + DEBUGSTR( 2, "LoadLibraryA %\"s", lpFileName ); HookAPIAllMod( Hooks, FALSE, TRUE ); + SetLastError( err ); return hMod; } @@ -3231,8 +3238,10 @@ HMODULE WINAPI MyLoadLibraryA( LPCSTR lpFileName ) HMODULE WINAPI MyLoadLibraryW( LPCWSTR lpFileName ) { HMODULE hMod = LoadLibraryW( lpFileName ); - DEBUGSTR( 2, "LoadLibraryW %S", lpFileName ); + DWORD err = GetLastError(); + DEBUGSTR( 2, "LoadLibraryW %\"S", lpFileName ); HookAPIAllMod( Hooks, FALSE, TRUE ); + SetLastError( err ); return hMod; } @@ -3245,8 +3254,10 @@ HMODULE WINAPI MyLoadLibraryExA( LPCSTR lpFileName, HANDLE hFile, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | LOAD_LIBRARY_AS_IMAGE_RESOURCE))) { - DEBUGSTR( 2, "LoadLibraryExA %s", lpFileName ); + DWORD err = GetLastError(); + DEBUGSTR( 2, "LoadLibraryExA %\"s", lpFileName ); HookAPIAllMod( Hooks, FALSE, TRUE ); + SetLastError( err ); } return hMod; } @@ -3260,8 +3271,10 @@ HMODULE WINAPI MyLoadLibraryExW( LPCWSTR lpFileName, HANDLE hFile, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | LOAD_LIBRARY_AS_IMAGE_RESOURCE))) { - DEBUGSTR( 2, "LoadLibraryExW %S", lpFileName ); + DWORD err = GetLastError(); + DEBUGSTR( 2, "LoadLibraryExW %\"S", lpFileName ); HookAPIAllMod( Hooks, FALSE, TRUE ); + SetLastError( err ); } return hMod; } diff --git a/readme.txt b/readme.txt index 9fc131b..0518284 100644 --- a/readme.txt +++ b/readme.txt @@ -345,6 +345,7 @@ Version History - fix -e et al when redirecting to NUL; - prevent -p from injecting when already injected; - fix running directly via ansicon (hook even if it's GUI or excluded); + - preserve last error; + add log level 32 to monitor CreateFile. 1.84 - 11 May, 2018: