Preserve last error

Hooked functions that failed and logged debug messages were causing an
incorrect last error to be set.
This commit is contained in:
Jason Hood 2018-08-23 17:38:43 +10:00
parent 06459edb69
commit 0472db80b2
2 changed files with 21 additions and 7 deletions

27
ANSI.c
View File

@ -213,7 +213,8 @@
v1.85, 22 & 23 August, 2018: v1.85, 22 & 23 August, 2018:
fix creating the wrap buffer; fix creating the wrap buffer;
always inject from ansicon.exe, even if it's GUI or excluded; always inject from ansicon.exe, even if it's GUI or excluded;
log CreateFile calls. log CreateFile calls;
preserve last error.
*/ */
#include "ansicon.h" #include "ansicon.h"
@ -3113,7 +3114,9 @@ BOOL WINAPI MyCreateProcessA( LPCSTR lpApplicationName,
lpStartupInfo, lpStartupInfo,
&child_pi )) &child_pi ))
{ {
DEBUGSTR( 1, " Failed (%u)", GetLastError() ); DWORD err = GetLastError();
DEBUGSTR( 1, " Failed (%u)", err );
SetLastError( err );
return FALSE; return FALSE;
} }
@ -3151,7 +3154,9 @@ BOOL WINAPI MyCreateProcessW( LPCWSTR lpApplicationName,
lpStartupInfo, lpStartupInfo,
&child_pi )) &child_pi ))
{ {
DEBUGSTR( 1, " Failed (%u)", GetLastError() ); DWORD err = GetLastError();
DEBUGSTR( 1, " Failed (%u)", err );
SetLastError( err );
return FALSE; return FALSE;
} }
@ -3222,8 +3227,10 @@ FARPROC WINAPI MyGetProcAddress( HMODULE hModule, LPCSTR lpProcName )
HMODULE WINAPI MyLoadLibraryA( LPCSTR lpFileName ) HMODULE WINAPI MyLoadLibraryA( LPCSTR lpFileName )
{ {
HMODULE hMod = LoadLibraryA( lpFileName ); HMODULE hMod = LoadLibraryA( lpFileName );
DEBUGSTR( 2, "LoadLibraryA %s", lpFileName ); DWORD err = GetLastError();
DEBUGSTR( 2, "LoadLibraryA %\"s", lpFileName );
HookAPIAllMod( Hooks, FALSE, TRUE ); HookAPIAllMod( Hooks, FALSE, TRUE );
SetLastError( err );
return hMod; return hMod;
} }
@ -3231,8 +3238,10 @@ HMODULE WINAPI MyLoadLibraryA( LPCSTR lpFileName )
HMODULE WINAPI MyLoadLibraryW( LPCWSTR lpFileName ) HMODULE WINAPI MyLoadLibraryW( LPCWSTR lpFileName )
{ {
HMODULE hMod = LoadLibraryW( lpFileName ); HMODULE hMod = LoadLibraryW( lpFileName );
DEBUGSTR( 2, "LoadLibraryW %S", lpFileName ); DWORD err = GetLastError();
DEBUGSTR( 2, "LoadLibraryW %\"S", lpFileName );
HookAPIAllMod( Hooks, FALSE, TRUE ); HookAPIAllMod( Hooks, FALSE, TRUE );
SetLastError( err );
return hMod; return hMod;
} }
@ -3245,8 +3254,10 @@ HMODULE WINAPI MyLoadLibraryExA( LPCSTR lpFileName, HANDLE hFile,
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE |
LOAD_LIBRARY_AS_IMAGE_RESOURCE))) LOAD_LIBRARY_AS_IMAGE_RESOURCE)))
{ {
DEBUGSTR( 2, "LoadLibraryExA %s", lpFileName ); DWORD err = GetLastError();
DEBUGSTR( 2, "LoadLibraryExA %\"s", lpFileName );
HookAPIAllMod( Hooks, FALSE, TRUE ); HookAPIAllMod( Hooks, FALSE, TRUE );
SetLastError( err );
} }
return hMod; return hMod;
} }
@ -3260,8 +3271,10 @@ HMODULE WINAPI MyLoadLibraryExW( LPCWSTR lpFileName, HANDLE hFile,
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE |
LOAD_LIBRARY_AS_IMAGE_RESOURCE))) LOAD_LIBRARY_AS_IMAGE_RESOURCE)))
{ {
DEBUGSTR( 2, "LoadLibraryExW %S", lpFileName ); DWORD err = GetLastError();
DEBUGSTR( 2, "LoadLibraryExW %\"S", lpFileName );
HookAPIAllMod( Hooks, FALSE, TRUE ); HookAPIAllMod( Hooks, FALSE, TRUE );
SetLastError( err );
} }
return hMod; return hMod;
} }

View File

@ -345,6 +345,7 @@ Version History
- fix -e et al when redirecting to NUL; - fix -e et al when redirecting to NUL;
- prevent -p from injecting when already injected; - prevent -p from injecting when already injected;
- fix running directly via ansicon (hook even if it's GUI or excluded); - fix running directly via ansicon (hook even if it's GUI or excluded);
- preserve last error;
+ add log level 32 to monitor CreateFile. + add log level 32 to monitor CreateFile.
1.84 - 11 May, 2018: 1.84 - 11 May, 2018: